00:00
呃,好了,各位同学,那咱接下来呢,就继续往下进行,那现在呢,我们实际上就已经把我们前边就在最开始的时候,咱是不是讲过一个核心架构啊,对吧?把这个核心架构当中的所有的这个任务都已经准备完成了,对不对,你看啊,就是咱们整个的这个数据仓库的核心架构当中,咱们这个数据的链路是从哪儿到哪儿,是不是从业务系统到最终的这个报表应用了,对吧?那这里边的每个环节咱现在是不是都已经开发完了,没错吧,现在我们终于可以去做这个全流程调度了啊这样的啊,那全程调度呢,前面咱们分析过,我们需要用到一个这种所谓的调度工具,对不对?OK啊好,那这个调度工具呢,在这儿我们使用的是dolphin scheduler OK,那所以咱接下来要做的首要工作就是先把这个do sc是不是得先给它装上,咱们,然后咱咱们得先学一下这个东西怎么用,对吧,这是咱现在的首要任务,好,那所以接下来呢,咱们就开始去,诶学习这个高分盖啊来,那现在咱们继续往下走,我们找到这个。
01:01
数据仓库的工作流调度OK啊好了,那现在呢,我们就把这个,呃,这个dophin sc的文档给他打开,然后呢,咱们系统的学习一下这个dolphin sc率,好,那现在咱们给它打开。好,那打开之后呢,首先我们需要先来看一看,就是咱们这个所谓的dolphin sc到底是一个什么东西,对不对,那现在呢,我们先来看一下它的这个简介页,来我们打开这个简介,简介当中呢,有一个小节叫做概述,对吧?我们来看一看dolphin sc到底是个什么东西,来我们一起来看一下,他说阿帕奇dolphin scanner是一个分布式易扩展的可视化dag工作流任务调度平台啊,是这样的啊OK,那前面呢,说的是分布式易扩展,这个咱们其实很好理解对不对,那一会儿我们看到它的核心架构的时候,这个也能很好的体会出来,所以这会儿咱不说,不多说,我们重点看啥呢?我们重点看后边,后边这个什么是可视化,Dag工作流任务调度平台,这个可视化怎么理解,这个一会儿我再给大家说啊,咱们先来把后边这个搞清楚,就是所谓的dag工作流任务调度平台,这个咱们怎么去理解,实际上这样呢,我们可以提取两个。
02:13
关键的信息,一个就是dag工作流,还有一个呢,就是啥调度啊,就是调度,提两个这个关键点,首先我们先来搞清楚什么叫做dag工作流,所谓DADA工作流程说白了就是啥呢?就是DA是不是有向无环图的意思啊,对吧?那那玩意工作流指的是什么呢?就是咱们前面提到了一个工作流程的概念,Work flow的概念,那work flow,我记得我之前给大家举过一个生活当中的例子,对吧?我举了一个什么例子来着,就是大家自己做饭的一个例子,对吧?你要想去吃某一道菜对吧?你需要先干啥呢?先去买菜,回来之后呢,摘菜,回来洗菜,对吧,切菜,最后再炒对不对?那这是不是一个典型的工作流程啊,对吧?它有什么特点?有什么特点,就是一个工作流呢?我是有什么,我是由多个工作单元组成的,对不对,而且这工多工作单元之间呢,不是完全独立的,他们是有前后的依赖关系的,对吧?就是你在执行的时候,必须得按照这个依赖关系是不是依次执行对吧?得一个一个执行,这叫做工作流啊是这样的啊好了,那我们这种所谓的工作流调度期对吧?Dophin scanner,它就是专门用来调度什么的呢,就是专门用来调度这种工作流的啊是这样的,他做的一个具体的工作是什么呢?就是解决这个工作流之间任务,这工作流当中任务节点之间的这个依赖关系,哎,他主要做的一个工作就是解决这个依赖关系,啥意思呢?就是他能够自动的干啥啊,当你提交第一个工作流,然后提交完之后,他他能干啥呢?是不是能够去监控这个工作流的执行的结果,对吧?诶只有当第一个成功了之后,他才会怎么做呢?诶去帮你自动的提交下一个,哎,他是不是能够帮我们去解决这个依赖关系啊,对吧?哎,是这样的,这是他做的第一个工作,OK。
03:52
那这种调度器呢,其实还有一个作用就是啥呢?就是所谓的调度,这个调度呢,里边其实有一个有一层意思,就是什么意思呢?就是定时的意思,有一层定时的意思啊,就是它是能够帮我们去定时的,去执行这个工作流里边的任务的啊这样的啊,而且他在定时的时候,我们我们是怎么去用它定时的,我们需要去给每一个任务节点都制定一个时间吗?不需要,我们只需要给他指定一个什么时间就行了,工作流的开始时间就行了,你只要告诉他第一个诶是什么时候开始,那完之后呢,他就会诶到点提交的一个,然后呢,第一个完成之后自动下一个,自动下一个,它是这样的,这就是这个所谓的工作流啊,这个任务调度平台的这样的一个概念,其实就是类似这样的工作流任务调度平台呢,其实有非常非常多的这个产品,那除了我们这儿用到的这个dolin scner,对吧,那还会有谁呢?大家以后可能还会听到,比如说阿兹卡班哎,乌Z,还有什么air flow哎等等等等,其实非常多,那再加上咱们。
04:52
分的这个dolphin schedule啊,是这样的,虽然这个产品非常的多,但其实他们的使用逻辑都是类似的,那他们怎么去用它呢?基本上我们在使用这种调度工具的时候呢,我们就主要分为两步,第一步就是干啥呢?就是定义工作流,第一步就是定义工作流,那什么叫做定义工作,你想一想啊,你要想让这种工具帮你去调度自己的这个工作流程,你首先得告诉他什么,就是我这个工作流里边到底有哪些这个任务节点吧,对不对,OK,你得告诉他,诶我这个工作流第一步我要干什么,第二步我要干什么,第三步我要干,你是不是得先把这个事儿给他说明白呀,对吧?啊是这样的,这这一步我们叫做什么呢?就叫做定义工作流,你需要声明你的工作流有哪些任务节点,然后任务节点的依赖关系是什么样的,你需要先告诉的啊,这是第一步,那第一步完成,第二步完成,第第一步完成之后,第二步做什么呢?其实就简单了,就是干啥的。
05:48
就是配置定时呗,对不对,你得告诉他我这个工作流在每天的几点开始执行,是不是就是做这个工作呀,对吧?所有的调度工具,基本上咱们的使用逻辑都是这样的,定义工作流再加定时啊,就是这样的,只不过呢,就是我们刚刚提到的这个不同的工作,工作流的这个调度器呢,他们的这个使用的方式可能是不一样的,比如我举个例子啊,那我们再去定义工作流,再去配置这个定时的时候,对吧?那我要是用阿兹卡班,那我是怎么去做的呢?
06:16
我需要怎么去做呢?我需要去编写配置文件对不对?那我使用屋Z的时候呢,我也要编写配置文件啊,OK,当然他们的配置文件它的格式是不一样的啊,比如说屋Z啊,我们使用呃,你要写配置文件,你得写XLSXML文件对不对?那你要是使用咱们这个阿卡班的,你可能需要写的是这个压面文件啊,是这样的啊,就是不同的工具,它的配置文件肯定不一样的,那再比如呢,我要使用这个dolphin scer,那我需要去编写配置文件吗?是不需要的,它是一个什么样的,是一个可视化的调度平台,对不对?那就是说我在dolphin sctter当中,我去定义工作流,我去配置定时,我是不需要写配置文件的,我怎么做呢?我直接在他给咱们提供的外部页面上边去画图就完事了,对不对?需要什么节点来,我画一个节点对不对?那这两个节点之间有什么依赖关系,我直接给他来个啥就行了,来个箭头就完事了,哎,就是这么个逻辑,这就是所谓的可视化的意思啊,OK,也就是说doin干它其实用起来是不是就是相对来说要方便一些对吧,就是对傻瓜。
07:16
但是就是这个意思啊,OK啊好了,那这就是dolphin scner的一个基本的介绍啊,是这样的啊,那刚才提到了,虽然这种调度工具非常的多啊,但是我们没必要把每个都去学一下啊,我们学一个其他的应该基本上看一看也就会用了啊,这个理解就行了啊,那这就是dolphin sc一个基本的说明,那它是一个可视化的dag工作流任务调度平台,行了,那这个完成之后咱继续往下走啊,那下边还有一句话,他说他致力于解决数据处理流程当中错综复杂的依赖关系。对吧,使这个调度系统在数据处理流程当中开箱即用啊,说白了,那他的这个目标就是干啥呢?是不是就是就是就是就是提供一个非常简单的一个用户的一个使用的接口啊,对吧,咱们要想用的话,我拿起来就不用,对不对,就这个意思啊,就是用起来其实比较简单的好,那这就是DS的一个基本的概述,那这个呢,咱们先有一个大概的了解就行了,行,那接下来呢,咱继续往下看,那下面呢,要讲的是什么呢?就是刀分SKY的核心架构啊来,那这个咱们单独录一段视频啊,我把视频先停一下。
08:21
嗯,好,各位同学,那咱接下来呢继续往下走,那下边呢,我们要讲的内容就是do分SC的核心架构,那首先我们先来了解一下这个整个DS当中的一些核心的组件啊,我这个DS就是dolphin sc的一个简称啊好,那现在咱们往下走,那下边呢,我们先来熟悉一下这个dolphin sc的一个每每一个组件啊,咱们从下往上看吧,来,那首先我们先看第一个。这个是什么呀,UI对吧,UI是什么的简写呀。是不是user interface啊,对吧,是不是就是用户界面呀,对吧?啊,是这样的啊好,那接下来咱们继续往下走,这个UI它所负责的是什么呢?就是系统的前端页面,它为我们提供的这个功能是什么呢?是不是又提供系统的各种可视化操作界面呀,对吧?啊,这个其实很简单,就是现在刚才我已经提到了,说我们DOS在这是一个什么样的调度平台来着,可视化的调度平台对吧?我们在使用它的时候,对吧?我定义工作流,我配置定时,是不是都是在页面上面去进行操作的呀,对吧?那所以说它需要一个UI组件为我们提供相应的这个可视化操作界面。好,那接下来咱们继续往上看,上面这儿有一个什么呢?叫做API接口层,那它的这个主要作用是什么呢?就是用来。
09:30
干啥呢?是不是主要是负责处理前端,那咱们这个UI词的请求啊,对吧?就啥意思,比如举个例子,各位同学你想一想啊,假如说我现在打开这个doin sc这个前端页面了,对吧?那打开之后我是不是可能需要往里边去定义一些工作流,去配置一些定时啊,对吧?那你想一想,当你在前端页面完成这个配置操作之后,它需要干啥?他是不是需要去把这些工作流去保存起来,对不对?你的工定义的这个这个参数啊,或者说你配置的定盘的时间是不是得保存起来对不对?OK,那保存这个操作应该由谁来去做的,是前端直接去请求数据库,把这些数据保存在数据库里边吗?是这样的吗?那肯定不是这样的,对吧?他得怎么样呢?是不是得把这些请求是不是发到哪儿,是不是发到我们的这个API这个接口层,也说白了就是咱们的后台对不对?那后台接收到我前端的这些请求之后,是不是再把请求当中携带的这些信息给它进行持久化保存到数据库里边的,对吧?是这样一个逻辑,也就是说我们的API接口层就是用来处理前端的各种各样的请求的,说白了就是咱们那个所谓的后台嘛,对吧,这个理解一下行吗?好,那接下来我们继续往上看,这还有一个叫做什么呀,叫做alert服务的一个组件,这个alert是啥意思呢?是不是就是报警嘛,对吧?那这个报警指的是什么?
10:48
报警是干什么用的?来想想。诶,其实报警呢,在这种就是工作流调度器当中,是一个非常重要的一个功能,非常重要,为什么非常重要啊来各位同学我们来思考一个这样的一个问题啊来,那咱们都知道这种调度器它是用来调度什么的来着,是不是用来调度咱们这个工作流程的呀,对吧,是这样的,那通常这个工作流程是什么时候跑来着。
11:11
咱们书堂里的工作通常是在晚上去跑的,对吧,这个之前咱们已经说过了,好,那接下来咱就继续往下进行,那你想一想,这个工作旅游他在跑的过程当中,它有没有可能会失败?有可能会失败,对吧,比如说举个例子,跑到这儿的时候,他失败了,那失败之后你说我后边的工作者还能跑,跑不了,因为他有依赖关系嘛,对吧,你这个不成功,后边谁也别想跑,呃,是这个道理对吧?OK,好,那假如说他失败了,然后呢,我们也没有发现对不对,然后呢,到了第二天我们这个上班的时候,诶,那我后边是不是正常情况下,我们数仓后边会有各人各种各样的这个,这个比如说运营啊,或者说数据分析师需要用的这个数据啊,对吧,那他们发现昨天的数据没算出来,就没算出来之后是不是人家就没法工作了呀,对吧?那这时候他肯定会找你说,诶你这个数据没跑出来,那你说这时候咱们再去恢复这个工作流,让他去继续往下跑还来得及吗?这就有点晚了,对吧,为什么?因为你想就是我们离线数据,它在计算的时候,是不是数据量是比较大的呀,对吧,他不是说短时间内就立马就能够跑完的,对不对,我可能一晚上需要跑个六七个小时,七八个小时才能跑完,对吧?好,你第二天早上上班的时候,你才发现有问题,这时候再恢复就有点晚了,你就会耽误人家后边这个。
12:23
用户的使用啊,是这样的啊,那所以说我们这种,呃,工作流调度器呢,它必须得提供一个功能,什么功能啊,就是告警的一个功能,就啥意思呢?就是说当你这个工作流对不对,在运行的过程当中出错了,他就得及时干什么呢?呃,及时的通知咱们这个大数据的开发人员,尤其是离线的这个这个这个开发人员是这样的啊好,那完事之后,你接收到的这个通知之后,你得干啥去呢?你得赶紧去给他修复,让这个工作流继续往下进行啊,所以说一般情况下就是咱们这个离线组啊,离线组通常会进行这个值班啊,就是说你你你比如说一周对吧,咱们轮一下,比如这这这周你负责,然后下周他负责啊,是晚上是这样的,你晚上得值班,所以出问题之后呢,你得赶紧去修复才可以啊这样的,那所以说这个报警的服务对于这种离线数仓的这个调度工具来说,是不是非常重要啊,对吧?OK,那这个就是告警服务它的一个意义,这个咱们理解一下,好,那完了之后我们再继续往上看上面,大家注意观察,我们上面是不是还有三个组件啊,对吧。
13:24
分别是master worker,还有组K对吧?那现在我们先来看上面这俩master跟worker,呃,大家要注意啊,就是这个master跟worker呢,他俩是DS当中的非常重要的两个组件,是最核心的两个组件,OK,那我们现在来看一看它俩都是啥啊,我们现在先看master,他说master采用什么分布式无中心设计理念啊,就是这里边呢两个概念,一个叫做分布式,一个叫做无中心设计理念,对不对?OK,这个是什么意思啊?呃,在这儿呢,我先简单的给大家说一下,然后一会儿呢,我们看到下边架构图的时候,大家再去深刻的体会啊,我先给大家简单说一下这个所谓的分布式无中心什么意思啊?首先先说分布式对吧?那分布式那理论上咱们非常直观的一个想法就是啥呢?就是将来咱们这个master server它肯定不能只有一台,对吧,一台呢,能成为分布式吗?是不能啊,对吧,也就说将来那咱们你会看到在整个DS当中,那master它是会有多个的啊,是这样的啊OK。
14:24
好,那这多个当中对不对,它又是什么的呢?又是无中心的,什么叫无中心,也就是说我这多个master他们之间的地位是什么样的,是完全对等,完全平等的,是不分主次的啊,是这样的,那这就是所谓的分布式无中心,对吧?那也就是说我这多个master它是同时工作,然后呢,同时负责相同的这个任务,因为他们不分主次,是完全对等的嘛,对吧,这就是所谓的无中心的这样的一个思想,OK,好,那一会儿呢,我们再讲到它下面那个架构图的时候,再去好好的体会一下,那咱们这个无中心的这个概念啊,好,那现在咱们先继续往下看,我们先来看一看,就是这些master他们主要负责什么任务啊,来往后看,他说master主要负责dag任务切分。
15:11
诶,这个dag任务切分是什么意思啊,给大家解释一下,首先dag在这指的就是什么?就是咱们那个工作流程啊,对不对,因为咱们在使用DS的时候,我们是不是会给他定义一个工作流程啊,对不对,OK,好,那master他拿到这个工作流程之后,他会先干啥呢?先对这个DA进行任务的切分,OK,他会先进行这个拆解,好那拆完之后,接下来你看他干啥啊干啥是不是任务的提交啊,对吧?你其实可以想一下,你说他会把任务提交到哪。啊对,其实想大概也能想出来,应该是提交到worker,你worker你一听名字,他就是干什么的,就是干玩的对不对,OK啊,那所以说那master在这儿其实主要是做一个什么工作呢?就是切分任务,然后呢,把任务是不是分配到worker去执行啊对吧?是这样的,那所以他第二一个工作就是任务的提交,提交到worker去执行,好那接下来继续往下看,下边还有一个任务是什么呢?是任务的监控啊,就什么意思呢?你想啊,我这个整个的一个工作流对不对,那他在执行的过程当中对不对,那比如说现在执行到哪哪一步了,对吧,哪步成功了,哪步失败了,那这个worker他是不是必须得时刻的掌握才可以啊,对吧,这样的,因为你比如说要是出错了之后,他是不是得去协调这个work克去重考啊等等,是不是得做这样一些工作啊,对吧,他说说所以说需要去监控整个工作流的执行进度,诶这一点咱们要给他搞清楚好了,各位同学,那接下来咱们就继续往下进行,那这其实就是master它的一个主要的作用,那也就在这儿,咱们应该能够体会出来,Master它负责的是什么。
16:44
一个master他负责的是整个的工作流吧,对不对,他是会拿到整个工作流,然后对流进行切分,然后呢去诶提交任务啊对吧,他负责的是工作流啊OK,好,那接下来继续往下看,我们来看worker,那worker它主要是干什么的呢?哎,首先那它采用的也是分布式无中心设计理念,啥意思,是不是它也是有多个work克对吧?然后这多个work克之间也是怎么样的?
17:09
也是完全对等的,不分主次的,对吧?诶,这一点要搞清楚好,那下来继续往下走,那看他主要的职责是什么,Worker就主要负责什么呀,负责任务的执行和提供日志服务啊,这个啥意思啊来也就是它主要是做两件事对吧?一个是任务的执行,还有一个呢,是诶提供日志服务啥意思?各位同学,我们先看这个任务执行啊,OK,那这个任务注意啊,在dolphin schedule当中,它是有特殊的含义的,这个任务指的是什么啊?任务指的什么?哎,指的是工作流里边的一个节点,在dolphin scar当中,一个任务指的是这个工作流里的一个节点,这1.1定要搞清楚啊,是这样的啊,那也就说白了,我这个worker他负责的是什么?是你这个工作流里的一个一个的节点吧,对不对?那刚才提到了master负责的是什么来着,是整个工作流啊,是这样的啊,所以说master跟worker他们所针对的内容是什么,咱们得做一个区分,Master负责整个工作流,而worker负责工作流当中的一个一个的节点啊,这一定要搞清楚好了,那么之后还有一个工作就是干啥呢?是不是提供日志服务啊,对吧?就是什么意思呢?比如说各位同学,咱们举个例子啊,假如说我现在呢,使用DS,我去提交了一个任务,对吧,那提交这个任务结果呢,在执行到一半的时候,他报错了对吧?那报错之后,你说理论上我们应该去做一个什么工作,你是不是得去排查问题,去解决问题啊,对吧?排查问题你得干啥,是不是得看这个任务的执行日志对不对?好,那你说理论。
18:40
份上,你要去看日志,你得去什么这个节点上面去看。你那就什么节点上面去的,对呀。对不对,去去哪看日志,是在ER上还是在master上面去看,得在worker上面去看节点吧,为啥?呃,去看日志吧,为啥?因为你真正的这个任务是在worker上面去执行的,对吧?但是你要知道,那咱们这个沃克是不是肯定是有多个的呀,对吧?那我去哪儿看这个日志呢?
19:05
你是不是还得去看一下,OK,我这个task,我这个任务到底是在哪个work克上面执行的,然后呢,你还得去进到对应的worker去看这个日志,你想一想,这样一来是不是有点麻烦呀,对吧?啊是这样的,那所以说那DS它的这个worker呢,提供了另外的一个服务,叫做日志服务,他提供了日志服务之后,我们要想看他的日志,我们就可以怎么去看了呢?我们可以直接在这个UI页面上面去看相应的日志了,你就不用再进到那台节点去看了,其实也主要是为了我们方便去排查错误,对吧?是这样的,这就是worker提供了另外的一个职责,好了,同学,那截止到现在呢,我们就已经把master还有worker的基本的这个职责咱们给他说完了,那说完之后呢,我们再往下看,这还有一个服务叫做组K,对吧,它主要是用来干什么的呀。其实大家能看到我的master还有worker他们都是什么呢?都是分布式的,对不对,OK,那所以说那我们需要一个什么呢?是不是需要一个这个注册中心去协调整个分布式的服务啊,对吧?也就是说我们的master还有worker都会通过组kper来进行集群的管理和容错啊,是这样的啊好,那到底他是怎样用主K班去做这个容错的,怎么去做基金管理的,这个一会儿咱们再简单的举例子说明一下就行了,好了,各同学,那截止到现在,那咱们这几个核心角色的基本的职责咱就搞清楚了,好搞清楚之后呢,我们继续往下看,下面呢,我准备了一个dolphin sc的核心架构图,那咱们现在呢,通过这个架构图来把这个dophin sc呢更深入的了解一下,那首先各位同学,我们先来找一找,就是刚刚我们所提到的那几个核心组件啊,来咱一个看,首先我们从上面往下走,这是不是就是刚才看的那个UI组件啊,对吧,它是用来提供前端页面的,对吧?来接下来我继续往下走,这是啥?是不是那个APS2是不是用来处理前端的请求的,对不对?来继续往下。
20:50
啊,这个是什么master,你看master是不是有多个,它是分布式的对吧?好继续往下走,那这呢。这是咱们那个worker所对吧,它是不是也是多个是分布式的呀,对吧?好,那现在我们继续来看这儿,这是啥?这是不是那个alert呀,对吧,是不是那个告警服务对吧?那左边是什么,是组开对不对,然后大家会发现我们这其实还会用到什么database数据库啊,关系数据库它是需要用到的,好,那一会儿再给大家说这个数据库里存的是什么啊来我们先继续往下看看这儿。
21:19
这还有一堆东西,这是啥?Shell circle m mr4 SPA啊,这是什么东西,这应该是任务的类型吧,对不对?OK啊,其实大家应该能想到啊,就是这我们正常情况下,我们在企业当中对吧?我们去处理数据的时候,对吧?我们处理数据的方式可能不止一种,我可能会用circle去处理,我也可能会写MA6,我也可能会写SPA或者是弗Li格的任务,对不对,是这样的啊,那所以说那我们这个DS呢,它在这儿就支持这么多的任务类型,也就是说不管你那边处理数据是用什么去处理的,那我这个DS是不是都是能够去调度的呀,对吧,实际上这是它所支持的任务类型,这个咱们理解还行了,那其实咱现在这个数仓当中,那咱的任务类型大家说应该都是啥呀?
22:06
其实说白了都是shell脚本,就我们是不是已经把那些处理任务的circle,或者是这个导数据的,那什么data叉的那些命令等等,是不是都封装在shell脚本当中了,对吧?所以说咱现在任务类型其实主要就是这个shell啊,这个理解下行了啊好了,同学,那到目前为止这个图上的这个内容咱们基本上就看完了,那接下来呢,诶,我以一个具体的使用DS去调度工作流的例子,对不对?那以它作为切入点,然后呢,咱们去熟悉一下,就是整个这个DS当中每个组件之间的联系啊对不对,咱们以一个这个使用DS的流程为例,对吧,看一看这个几个组件之间是如何协调工作的啊来咱们来看一看,那大家想一想,你在使用DS调度工作流的时候,你的第一步应该是什么?大家想想第一步应该是啥?定义工作流对不对?那定义工人我们在哪定义,是不是应该在UI页面上面去定义对吧?好,那假如说我现在已经把工作流定义好了,那接下来还需要干啥呢?这个工作流相关的信息是不是得保存起来才行,对吧,保。
23:06
存在哪呢?其实就是保存在这个数据库当中,好,那怎么能把这个我们在前端定义好的这个工作里边保存到数据库里边去呢?前端它能直接去请求咱们这个数据,这个数据库嘛,肯定是不能了,对吧?那我肯定怎么办?是不是应该是让前端把在这个我们刚刚这个工作流的相关信息发到后台啊,对吧?OK,它会调用我们后台的接口,好,那我后台APSSO接收到这个请求之后,就会把请求当中携带的这个工作流的一些信息是不是写到数据库里边啊,对吧?OK,他会把这个工作流的原数据写到数据库里边,好了,那完了之后,我们现在相当于已经完成了第一步就是啥了,是不是就已经完成了什么工作了。工作流定义这个工作了,对吧?好,工作流定义完成之后,接下来是不是DS得去执行咱们这个工作流了,对吧?好,那这个执行工作流怎么去执行?其实按照我们刚才的描述啊,那其实我们执行工作流应该分为这样的两步,第一步是什吧master它是不是得去切分那个DA啊,对吧?然后再把任务是不是提交到咱们的worker去执行对吧?好,那现在问题来了,我的工作流已经在数据库里边放着了,对不对?那现在是不是得由master去切分这个工作流啊,对吧?好,那由谁去切分这个工作流,我master是不是有多个呀?对吧?OK,那由谁去切分?
24:25
给谁?那我给谁呢?咱们这个里边有主次之分吗?是没有的,对不对,他们它跟我们那个name node是不一样的,大家回忆一下hds name note hdfs的name note咱是不是也是可以有多个的呀,对吧?OK,但是你那多个name note同时工作的只有几个,只有一个,另外那几个是不是就是热贝啊,相当于是没问题吧,但是master跟它是不一样的,我这多个master跟多个name note不一样,那我这三个master他们都是同时工作的,他们是无中心化的嘛,对不对,你像内蒙not,那那是那能说为无中心化吗?不能,因为它是有主有次的,对吧?但是master是没有主次之分的,也就是说我这三个master理论上都有资格去拆分那个工作者,所以说那这时候到底让谁去拆呢?那是不是就得平均一点,就得让他们自己去竞争才行啊对吧,那所以说那实际上这个刀杆呢,当中这多个master是如何去,哎,这个找到这个工作流的呢,它其实是强的。
25:26
他们会抢啊,是怎么去抢呢?呃,这个当然在不同的版本有不同的实现啊,那我现在呢,以1.3.9版本的这个实现为例,给大家说一下,就是他这到底是如何去呃这个获取这个工作流的啊,那咱们现在学的这个DS就是1.3.9版本的,然后最新的现在是2.0版本啊,是这样的啊,咱们学的是1.3.9,好,那在1.3.9的版本当中呢,我们的每个master server实例当中呢,都会有一个扫描线程扫描,他们扫描谁呢?就去扫描关系型数据库里边存储工作流的那张表啊,是这样的啊,他们会定时的扫描,比如说十秒钟一次或一秒钟一次啊,会去扫描这个表,OK,好,那一旦我们这个数据库里边是不是插入了这个新的工作流,那我这个master,这多个master是不是就会去,呃,扫描到咱们这个工作流的记录啊,对吧,OK,好,那完之后呢,就是谁先抢到他,那OK,谁就负责这个工。
26:26
客流啊这样的啊,那所以说这时候大家得考虑一个问题啊,既然他们要抢它了,那也就是相当于什么呢?相当于我这个工作流,这个资源是被这多个master所共享的,对不对,他们是不是都可能会抢到,对吧?那所以说我现在是不是必须得做一个操作,得保证什么呢?你得保证我的这个工作流只能被一个master抢到才行,对吧,你不能俩都抢到,那你就乱套了,对不对,那所以这时候你怎么办呢?是不是得有一个锁的概念对吧?就是当我这个master抢到这个工作流之后,我必须得对这个资源进行加锁,对吧?那加锁之后是不是其他的master就不能再抢到了呀,对吧?那这个枷锁的操作实际上是靠谁去做的呢?是靠组kper去做的,那就相当于什么?举个例子啊,比如说我这儿有一个工作流,那这个master抢到了,抢到之后他会随机怎么样呢?是不是在组K上面去注册一个节点对吧?好,那注册完之后,那其他的master抢到之后再想去注册,还能注册上吗?注册不上了,那这样一来是不是相当于完成了一个枷锁的操作,对吧?就这个意思,这一点咱们大家要稍微的理解一下,好,那从这儿呢,大家应该是能够体会出来,Master他的这个所谓的无中心化这个诶思想的对吧,他们没有主次之分,同时工作对不对,那玩获取资源的方式呢,也是公平的,他们自己去竞争对吧,谁想到算谁的啊,就这个意思啊好,那接下来咱们继续往下进行,假如说现在已经有一个master抢到了这个工作流了,那接下来还需要做什么工作呀,是不是得他进行这个拆分呀,对吧,刚才咱们这个所谓的那个扫描。
27:52
线程其实就是咱们这儿看到的这个什么呀,是不是监听任务啊,对吧,有任务那他他就会去,呃拿到嘛,就这意思好,假如说他已经拿到了一个,呃,这个工作流了,那接下来是不是得做这个任务的拆分,对吧,也就是DA级切分好,那切分好之后你说下一步应该干啥。
28:07
是不是得去分配任务啊,对吧?任务分配给谁?大家说是不是分配给下边下边咱们这个worker啊,对吧?OK,好,那现在把任务就已经分配下去了,好,那我的这个worker接收到这个任务之后,他需要给master一个响应,对吧?那这时候会给一个ACK,就是说我已经接收到相应的任务了,好,那接受任务之后,那咱们这个worker下边就得干啥了。是不是得真正的去执行这些任务了呀,对吧,也就是说咱们一个一个的任务是在work克下边去执行的,OK,好,那执行的时候,那下边我是不是可能执行各种各样的任务类型,对吧?你看你自己怎么定义的,你是上游就执行上有脚本,你是S法就跑S对吧,你是MR他就提交MR等等等等,好那完之后呢,在他执行这个任务的过程当中,他还会再实时的把这个任务的执行结果报告给谁。报告给master这样的,那master他在接收到我们这个任务的这个,呃,执行进度之后呢,他会怎么样会把这个进度写到数据库当中,其实大家可以想想,他为什么要把这个进度写到数据库里边,这是为啥呀?
29:12
其实很简单啊,他把这个进度写到数据库之后,那我们在UI界面就能够干啥了,是不是就能够实时的调用API接口的这个相要接口,去查看每个工作流的执行进度了,对吧?也就是说我们一会儿就能够看到,我们在这个UA界面上面是能够看到咱这个工作流它具体的执行进度了,比如说第一步有没有完成,第二步有没有完成,咱们是能够看到的,是这样的啊这个咱们理解一下,好,那接下来我们继续往走,那假如说啊,我们这个工作流在执行的过程当中,他报错了,你报错了之后,你在UI上面是不是能够看到哪步出错了呀,对吧?那理论上它出错之后,咱们接下来要干啥呀,是不是得去排查错误,你得去看日志,对吧?那这个日志咱们从哪看呢?需要进到沃克节点去看吗?其实不需要,我们直接怎么做就行,我们直接是不是从UI就能够查看呀,对吧,我在UI上面我去调用API提供的这个日志的接口,那API server呢,就会去提去请求这个去请求每个worker上面的这个日志,因为刚才提到了我们worker是不是有一个功能就是提供日志服务啊,对吧,是这样的,也就是我在UI界面上边就能够完成这个,诶错误的排查了啊,这个用起来是比较方便的啊,OK,好,那也就是其实你应该能够看到,虽然dophin schedule,对吧,它的整个架构是比较复杂的,但是我们的使用接口其实只有谁只有一个,就是外部UI,我们几乎能在UI上边完成所有的工作啊,是这样的啊,OK,那这其实就是do盖一个大体的架构,好,那我通过一个这样的具体的案例啊,就是把咱们这个do盖这几个组件的给它串起来了,这个东西咱们了解一下就可以了啊OK啊好了,那完之后呢,这儿还有一个alert服务,Alert服务其实这个道理就比较简单了,咱们前面提到它就是干啥用的着。
30:54
是不是就是报警的对吧,如果出错之后,他就会把这个相应的告警信息发送出去,并且同时往这个数据库里边存一份,OK啊,那这就是刀分盖的一个核心的架构啊,那这些东西咱们大概的了解一下就行了,好那接下来我们再继续往上看,各位同学。
31:09
再继续往上看啊,那之前我们提到了说我们的组kper他会干什么呢?是不是会辅助master和worker去进行集群的管理和容错呀,对吧?而且这儿也看到了说呃,这个master呢?诶master他会干啥?Master他是不是会呃去什么同时监听其他的master跟什么worker的健康状态啊,对不对?那这个到底是怎么一回事呢?那在这儿呢,给大家说一下啊,那首先我们来分析一下,就是master他为什么去监听其他的master和worker的监管状态。他为什么会去做这个事,为什么?其实这个道理很简单,咱咱咱们来想一想啊,来,我把这个图还打开,咱们先来分析第一个问题,就是master为什么要去监听其他的master的健康状态,其实很简单啊,呃,首先咱们得先把这个理解了啊,所谓的master去监听其他master的监控状态是怎么监听,每个master都要监听其他的master,也就是他是不是需要监控他们俩对吧,那他呢?
32:10
是不是也要监控他们俩呀,为什么是这样的,因为是无中心化的,没问题吧,是不是都得是对等,都得是平等的呀,对吧?是这样的,好了,那你说为什么要遇见他呢?其实就是为了进行容错,啥意思啊?比如举个例子,假如说现在我这个master就给挂掉了,对不对?他挂掉的后,那他所负责的那个工作流是不是就没人管了,对不对?那这时候是不得有人接管才行啊,对吧?那这时候让谁去接管呢?你让他接管还是让他接管对,是不是还是得抢啊,因为得公平嘛,无中心化嘛,对不对?那所以说他俩就得干啥都得去监听这个master的状态,对不对?那他一挂了之后呢?那怎么办呢?是不是他俩就得去接管他的任务啊,对吧?那当然谁去接管这个还还得是怎么做,还得是抢才行,对不对,这个抢又得干啥呢?是不是又得借助这个组开去做呀,对吧,是这样的,OK啊好,那包括这个master server去监控,其他的master server这个状态怎么去监控啊,是不是也是根据组K上的注册节点去监控啊,对吧?啊就这个意思,OK啊好,那这就是容错的一个操作,那当然那master它下边。
33:10
是不是还要去兼控每个worker的状态啊,对吧?为什么要兼顾worker状态,这个其实也很也很好理解吧,比如举个例子,那假如说我现在这个master,对吧,他是不是会负责一个工作流啊,对吧?他负责工作流,会把工作流切完,切完之后是不是交给克去执行啊,对吧?那他不得监控这些worker的状态嘛,如果这个挂了,那他是不是得把这个worker的那个任务是不是得交给其他的worker去执行的,对吧?所以他也要兼顾所有的worker的状态,就是这么个逻辑,好了,那这就是doin style,一个完整的核心架构啊,那这个完成之后,视频我停一下啊。
我来说两句