00:00
呃,行了,各位同学,那咱们接下来呢,终于可以正式开始咱们这个工作流的调度了啊OK,好,同学们,那在开始调这个工作流之前,那咱们是不是得先简单的看一看咱这个工作流长什么样啊,对吧?工作流长什么样还还有印象没有。有没有印象,应该有点印象啊,来各位同学,我们我记得之前在大家就就是在咱们做完这个,呃,这个学完这个,在学这个刀SC之前,对吧,咱们就已经画过一个图了,对不对?来咱们把那个图打开看一看,就是咱们那个工作流到底长什么样,这是不是就是咱们那个工作流啊,对不对,这个工作流我们第一步是什么呀?是不是什么my circle to HD FS负点SH这个节点,它的作用是什么,大家还记得。这是把那个买circleq当中的全量表的数据通过date叉是不是同步到HDS,没错吧,OK啊,好,那完之后再往下,这就是哪了,这是从HDFS到ods了,然后边是不是一层一层的往下走啊,对吧?啊,这个我们就不再一个一个去看了啊,那我们简单的回忆一下就是为什么。
01:03
诶,咱们这儿只有这个全量表的同步工作包含在了工作流当中,我那些增量表,我那个日志对吧,他们的同步工作我们为什么没有包含在这个工作流里边呢?这是为什么来着,还记得吗?还记得啊,应该有同学还记得啊,就是说我这个任务到底是否要包含在这个工作流当中,这个由什么决定?由什么决定,你就看你这个任务他是不是需要每天重复的执行就完事了,对不对,只要那些需要每天重复执行的,是不是就应该包含在工作流当中,对不对?OK,那咱们现在简单的对比一下啊,相当于复习一下,之前咱们提过这个事儿啊,好,各位同学我们来看一下,那刚才提到了这个是使用data叉同步全量表的那个任务,对吧?OK,好,那data叉同步全量表的叉,那咱们是不是得每天把这个脚本执行一次,没,所以他他就得放在这个工作流里面,就得每天重复调度嘛,对吧,就是这个逻辑,好,那我们那个日志它是怎么同步的,还记得吗?
02:03
日志怎么重步来着,是不是用flu实时的监控文件,实时的把数据写到HTS对吧?OK,那我们那个日志的同步工作,我需要每天重复的去启动它吗?不需要,你只需要启动一次让它一直运行就完事了,对不对?那所以它就不需要包含在这个每日调度的流程当中了,那包括那个呃,业务系统当中的增量表,增表是不是使用Maxwell实时的监控blo,然后实时把数据发过来对吧?所以那个也不需要每天重复的执行,也是你只需要启动一次让它一直运行就完事了啊,所以,所以它俩呢,是不用包含在这个工作流当中的,OK啊,所以这个咱们得回忆起来啊,那最终咱们得到的一个工作流它就长这样,OK啊好,那一会儿我们使使用DS去调度的工作流,就是这样的一个工作流,好了同学,那到目前为止,那咱们这儿呢,呃,该讲的东西基本上讲完了,那咱们接下来呢,就准备正式开始调度工作流啊OK,好,那在调度这个工作流之前,我们要做的一个非常重要的工作就是啥呢?就是咱们得准备一天新的数据。
03:04
对吧?OK啊,那之前咱们在开发这个数据仓库的时候呢,我们是以14号这一天的数据为例,对吧?啊,咱们以他为例,我们去建表,然后呢,用14号的这一天的数据呢,去测试我们的30号等等等等,咱们用的是14号的数据,那14号的数据我们现在已经从最开始的业务系统已经到达了,哪已经到达了我们这个数仓的最后一层,然后呢,我们又把它导到了这个买sol当中了,对不对?所以说14号的这个数据的流程已经跑完了,对吧?那我在想测这个全流程,那我我总不能还用14号数据跑,对吧?那所以我应该怎怎么办呀,我相当于14号已经过去了,已经来到了第二天了,已经到了15号了,所以在这儿呢,咱们需要准备一天15号的数据,对吧?好,各位同学,那现在问题来了,你说咱们这儿准备15号的数据啊,我准备到什么程度就算是准备好了。我准备到什么程度呢?什么叫准备到什么程度啊?比如举例子,那我们以这个业务系统的数据为例,那咱们业务系统对不对,我们里边是不是有那个my servel的数据啊,对吧?比如说我买servel数据,我是只需要给他把数据写到my serve里边,还是说哎,我得把MYSO的数据呢,写完之后我再给他导到HS上。
04:14
对不对,我到底应该准备到什么程度,那再比如说我们那个用户行为日志对吧,日志我是只需要给他生成到日志文件里边,还是说我需要把那个日志文件给它同步到H上,对不对,我到底应该准备到什么程度?这个准备到什么程度,咱们也得好好思考一下,这个我们得取决于实际的情况啊来各位同学,那现在咱们来一起分析一下这个问题啊,好了同学,那一会儿我们是不是需要使用DS去调度咱们整个工作流对不对?OK,那当然咱们调度这工作流,我们模拟的肯定是真实的情况,对不对?那我问一下大家啊,那一会儿咱们这工作流跑的是不是15号的数据?对不对,那问一下大家15号的这个数据,我们如果说在生产模式下,对吧,我是在什么时候开始去跑。是16号对不对,16号到什么时候呢?一般是零点之后对吧,比如说我们是00:10开始跑的,没问题吧?好,那现在我们继续往下思考啊,那假如说现在时间就已经来到了16号的00:10了,对不对?好那你说哎,我们那个15号的数据,现在它在哪儿啊。
05:20
15号的数据在哪,咱是不是得分具体的情况去讨论对不对,我们的数据分两类,一类是日志,一类是业务数据嘛,对吧,我们先看日志,你说到了零点,呃,就是16号00:10的时候啊,那咱们15号的日志现在在哪放的应该是。是不是应该已经到HTS了,为什么移经到H,因为日志是实时的往HT上写对不对?OK啊,那所以说我15号的数据,我只要生成一点,它就往HT发一条对不对?所以说你到了16号的00:10的时候,日志就已经到了HDFS,那所以说一会儿咱们去模拟生成日志的时候,我得把日志放在哪,是不是得放在HCFS,没错吧,咱们得根据这个实际的情况去生成嘛,对吧?好,那接下来我们再看另一类数据,另一类是不是那个业务数据啊,对吧?业务数据咱也是分为两类的,一类是全量表,一类是增量表,对不对?好,那现在咱们来一起分析一下,那到了16号的00:10的时候,那你说我的这个增量表的数据现在在哪?
06:18
也是在HDFS吧,它跟日志是一个道理,是实时的往HDL发的,对不对,那完之后全量表的。全链边呢,其实还在买so索当中,是这个道理吧,啊,为啥呀,什么时候他才会到HS,是不是得等你这个工作流起来之后,跑了第一个任务全两边是不是才能到APS,是这道理吧?那所以说那一会儿咱们去模拟生成数据的时候,我们这个数据到底给它准备到什么程度,大家现在心里应该已经清楚了吧?来总结一下啊,我们的日志应该放到HTFS,增量表应该放到HTFS,而全量本的数据呢,无所谓,你只要生成在当中,然后等着这个流程去给它调度,给它同步,是不是就完事了呀,对不对,应该是这样一个逻辑啊好,那这个分析完之后,咱们接下来就把这个数据给它准备一下,好,那现在我们看文档,那咱们先看第一小节,就是十三点二点一,哎,这个是准备谁呀,准备用户行为日志对吧?好,那我们来看一看用户行为日志,咱们要想给他准备,那我们应该做哪些工作。
07:17
首先咱们得先干啥呀?得先把这个日志的采集通道给它提下来吧,日志的采集通道都有谁,大家还记得不?我们应该是102103各有一个flu对不对,然后呢,我们需要再启动一个卡夫卡集群对不对,然后呢,还有这104时候还有一个嘛,对吧?诶我们得把这个通道给它启动起来,好,那接下来咱们就给它启一下啊好,各位同学,那这会儿需要给大家稍微说明一下啊,大家呢,再去启这个财经通道之前啊,如果你的内存不是那么的充足的话啊,我建议大家呢,先把这款呢,先把dolphin sc给关了啊,能理解吧,哎,我这内存它这个确实够用啊,所以说我就不关了啊,那大家那边记得关一下啊好,那现在呢,我们把这个我们的日志的财经号给它提起来,首先我们得先起谁呢?先起卡卡吧,那JK是不是也得先起Z是刚才已经起了,那所以直接起卡卡就行,来Kf.SSH4点好,那现在呢,我们查看一下当前的进程啊S靠GPS卡卡我这已经都起来了,对吧,没有问题,好,那接下来呢,我们再继往就行,卡卡有了,接下来是不是就可以起了,对吧?那102103的两个我们是不是可以通通过S1.s这个脚本去写对吧?好,那直接。
08:27
给启动就完事了,好,那接下来呢,我们再取104那个,104那个是不是fa2.sh对吧,然后呢,直接回车好了,那现在我们查看一下现在的进程。呃,进程应该是application吧,对吧?哎,这儿有一个application没问题,那这儿呢也有一个application,这个呢也有一个application没有问题,好,那现在我们该起的进程都起来了,那接下来是不是就可以模拟生成数据了,对不对?好,那现在往下走,往下走,往下走,那首先我们要想生成数据啊,我们得先改一个啥呀,是不是改一个日期啊,对吧?哎,咱们把日期改成15号,好,那现在我们找到日志模拟器的配置文件,应该是op model APP了吧,对吧?好,那接下来呢,我们打开这个application的压面文件,然后我们将这个Mo date给它改成谁,改成六月15是不是就完事了,对吧?然后呢,Shift,好,那完之后呢,我们来到103这边,两边是不是都得改,都得改啊,我们CD一下。
09:17
O型猫的APP log,然后VM这个application点压文件好打开,打开之后呢,我们把这个也给它改成15,然后呢,Shift c好了,那日期都改好了,接下来我们就可以是不是生成日志,生成日志然后呢,如果通道没问题,它是就会写到exfs对吧?好,我们直接执行这个生成日志的脚本就行啊啊直接回车,好那现在呢,我们需要稍微的等等一会儿,稍微等一会儿,呃,等这个数据呢,传到HTFS啊好,那现在我们去查看一下吧,来打开这个HT的外部页面,然后呢,找到哪应该是orange吧,对吧?这是我们上传的目标路径,找到j Mo,找到log,找到topic log对吧?如果没有问题的话,15号的路径是会出现对吧,但是这个注意啊,这个TP现在是不还没有消失对吧?咱们得等这个文件消失之后,咱们再去,诶,比如说去关闭这个录的进程等等等啊,稍微等一会。
10:09
稍微的有点慢啊。等他关闭啊。差不多得十,呃十十秒钟,差不多十秒钟啊呃,一会咱们再看吧,OK啊好,那等它关闭之后,那我们的这个用户行为日志是不是就算是生产好了对不对,那接下来我们要准备的就是啥呢?其实就是那个业务数据了,对吧?OK啊,那当然同学们在准备这个业务数据呃之前大家如果你的内存不够用的话,也可以先把F先把这个日志的通道先给它关掉,对吧,比如说前后的两个你就可以关了,现在用不到了,那我这儿也给它关一下吧,我这用不到了啊,f1.sh我给它停掉,然后呢,f2.sh我也给它停掉,没问题吧,卡卡用不用停,卡卡不用停,为啥?因为我业务数据它的同步是不是也需要用到卡卡呀,对吧?啊是这样的啊好,那咱们接下来呢,去管下进行日志,到目前为止咱们就算是完成了,接下来准备业务数据,那刚才咱们说过啊,业务数据我们分两种情况,一种情况是什么是增量,一种是全量,诶增量表我需要确保这个数据跑到哪去啊,跑到HDF。
11:14
买的这对不对,全量表呢,只需要放在买so就可以了,对不对,好,那咱们接下来呢,去完整一下这个工作啊,那首先我们需要先干啥。你现在是不是得把保证那个增量表的数据得跑到哪才行,是不是跑到HTS对不对,那所以说我我我我在生成那个增量表的数据的时候,我得先干啥呢?是不是先把这个增量表的通道先给他记起来,没错吧,OK,好,那大家回忆一下咱们增量表的通道都包含哪些环节还记得。都包含哪些环节来着,增了网那个通道啊,首先第一个环节就是谁说Maxwell对吧?Maxwell是不是监控我们那些表的那个blog呀,对吧?诶是这样的,然后他会把数据写在哪来着,卡夫卡,所以卡夫卡得保证是启动的状态对吧?接下来继续往下进行,再再往后呢,是不是后边又通过一个flu把卡夫卡的数据写到H些白色对吧?所以说我们得先把这个通道给它起起来对吧?好,那现在咱们给它起一下啊,那在起之前,诶我们需要修改Maxwell的一个配置文件啊,OK啊,这个配置文件咱们改谁呀?是不是改这个Mo data呀,对吧?OK,大家还记得这个Mo data的作用吧?
12:22
猫data的作用是不是用来定义定义谁定义Maxwell输出的那个杰森字符块当中的是不是TS啊,对吧?啊是这样的啊,就是那个TS,它正常情况下应该跟谁是一致的,跟我们那个数据当中的业务时间是一致的,对吧?比如什么cur time update得跟那些一致对不对,OK啊,那所以在这呢,我们需要诶把这个日期调整成六月15,因为我们马上要生成的数据是不是15号来,对吧?所以这个咱们得调整一下,好,那现在咱们去修改一下,进到OG进的Mo,进到Maxwell,那各位同学啊,如果大家那个Maxwell你从开始到现在一直都没有停过,因为有的同学可能他内存比较多,他没停过,如果没停,那你改的这个配置文件你得怎么样一下得重启一下,对吧,这个一定要注意啊好,那在这儿呢,我们找到这个Mo data参数,然后呢,把这个14给它改成15,那就完事了,然后呢,Shift好了,那这个ma well,我就算是给它配完了,配完之后咱们接下来要做的工作是不是给它提起来了,对吧?好来给它记一下。
13:23
还是那句话啊,如果Maxwell你从来没关过这个,改完之后一定要记得重启,重启才会生效啊好,那start你看好,那现在Maxwell提下来了,那接下来呢,卡夫卡刚才就已经提下来,对吧?现在是不是就可以起104那flu了,那个flu我们是哪个脚本控制的,是F3这个脚本去管的对吧?好,那用这个脚本启动一下104的,好,那现在我们X号GPS一下,好多同学看一下102有没有max y有对不对,104呢,有没有,有啊,所以现在呢,我们这个该启的进程就都骑下来了,好,那接下来呢,我们再继续往下进行,那接下来咱们改啥?是不是就可以往那个买搜Q里边写数据了呀,对吧?好,那写数据之前咱们是不是也得改一下那个模拟器的配置文件对吧,我们进到OPT Mo进到呃,DB log对吧,Dblo。
14:11
好,进来进来之后改一下这个文件,我们将这里边的日期给它改成是不是15就可以了,对不对?好,那完了之后改成15,然后shiftc,好,那接下来我们是不是就可以执行一下加油杠这加这个命令啊,对吧?好,各位同学,那我先问一下大家啊,当我执行这个命令之后,对不对,那我们这个数据它它会怎么流转呀,它是怎么流转的呀,能不能想明白。好,那现在咱们一起来分析一下啊,是不是当我们执行这个命令之后啊,那这个程序它就会往哪儿,会往我们的业务数据库里边,是不是来写入15号的数据啊,对吧?OK,那你注意啊,就是这个命令,他往这个业务库里边写数据的时候,它会区分什么?增量表,全列表嘛,它不会区分的,它就是一股脑的往里边写对不对?好,那完了之后我们继续往下思考啊,那完了之后,你只要往我们的这个数据库里边写数据,那他就会怎么样。
15:02
是不是就会有这个新增有变化对吧?有新增有变化,那我们的b love里边是不是就会写入新的内容,对不对,OK,那只要写入新的内容,那我们那个谁Maxwell是不是就会监听到啊,对吧?好,监听到之后他就会把什么把我们那些增量表的数据写到哪,是不是写到HDFS了,因为通道咱们已经提起来了嘛,对不对?那前两秒呢,全表没动,是不是就直接写到my sol里边来,对吧?那是不是一会儿咱们启动全流程才会同步到HDS上,对吧?这个流程是这样的,咱们得搞清楚好,那现在呢,我们直接回车。走稍微等一会儿,那如果我们通道没有问题,当这个程序执行完之后,对不对,我们的HDFS上是不是那些增量表会出现15号的路径对不对?好,那现在咱们去看一眼啊,来咱们对一下,然后呢,随便找一个增量表找到DB对吧?这都是负,这都是没有的对吧?这个都没有15号的路径对吧?好,我们找这个INC的来找他,诶大家看这里边有没有十物是有的,对吧?当然这个文件呢,还没有关闭,我们稍微等一会儿,等这个文件关闭之后我们再去,诶把这个通道给它停掉啊,稍微等一会儿。
16:07
好,文件是不是已经关闭了,大家这块呢,也一定要稍微的注意一下,等tmp去掉,你要想关进程的话,你再去关啊,不要着急,不要着急好了,那这个增量表的数据咱们也已经到HTFS了,那我们全量表的数据就在买,放着就完事了,好,那到目前为止,我们这个呃,新数据咱就准备好了,对吧?日志业务数据都准备好了,来,我把这个视频停一下啊呃,好了,各位同学,那咱们接下来呢,就可以正式进入到这个全流程调度的这个环节了啊呃,然后在正式开始这个调度之前,咱们有一个小事儿需要说一下啊,这块其实呃在文档当中也已经提出来了,他是什么呀?他是由于DS这个集群模式启动的进程比较多,所以说呢,他对这个虚拟内存要求是比较高的,对不对,那那所以说在这边咱们怎么做呢?啊,就是这么去安排啊,就是咱们学DS的时候,我们是不是都是用集群模式去学的呀,对吧?呃,然后大家应该也能看到,就是我只起DS这个集群模式,我不跑任务,他是不是几乎已经把咱们16G的。
17:07
内存就占满了呀,对吧,是这样的,那所以说那如果说我们现在用集行模式在跑这个数单的任务,16G的内存会比较吃力,呃,16G内存如果你给它分成833,这个就是相对比较吃力,但是呃,其实也能凑合着跑下来,只不过就是说你跑的过程当中,它会可能会经常的超时失败,失败之后你还得怎么样啊,是不是让他重考就行了,对吧,失败重考,失败重考,你经历几次失败重考,其实也能凑合着跑完,但是这个过程呢,就比较坎坷啊,是这样的啊,那所以说在这儿呢,我就建议大家啊,你要是16G的这个笔记本,那咱们在这儿呢,一会儿去做这个全程调度的时候呢,就不要使用这种集群模式了,你用谁就行了,用单机模式就可以了啊,是这样的啊,当然16级以上有同学是24G的,或者有什么同学是32G64G的,对吧,这个你就随便你就随便就完事了啊是这样的,这个咱们大家稍微的注意一下啊,OK,那完了之后呢,再给大家简单说一下啊,就是一会儿我这演示,我肯定是用集群模式演示啊,集群模式演示完啊,然后呢,我还会再给大家说一。
18:07
一下就是单机模式的一些注意事项了啊,所以说啊,不管大家一会一会儿使用集训模式还是单机模式,那咱们现在就呃正常跟着我这个顺序听就行了啊是这样的啊好,那接下来呢,我就先用这个集群模式演示一下啊,就是咱们这个全能调度到底应该怎么做,那你要想用集群模式首先得先干啥呢?是不得先把这个集训模式提起来,对吧?那我这刚才是不是就已经提起来了,对不对,DS就已经在这放着了对不对,好,那咱们接下来呢,就正式开始使用它去调度咱们这个小流程,好,各位同学,那大家说我现在第一步应该是什么呢?是不是应该是先是不是创建一个工作流啊对吧?项目咱们就不创建了,还用之前那个项目就行,点进去,然后现在呢,是不是点击工作流定义后,在这呢,我们点击啥呀,是不是创建工作流啊对吧,点一下好,那接下来那咱是不是可以开始创建工作流了,对不对,OK,那现在问一下大家,我们在创建这个工作流的时候,咱们得参考谁。
19:01
三个谁是不是参考咱们之前自己规划的这个工作流啊,对对,其实咱这个工作流我最终要调度的,实际上就是我们之前写的每层的那一个脚本,对吧?好,那咱们接下来就开始照着一个图去定义咱们的工作流,首先第一个节点是什么?买3TO HD FS,负点SH,这是一个什么?这是一个shel脚本对吧?那所以在这咱们定义工作流的时候,我就得拖一个是不是shell类型的任务过来,对不对?好,现在我给它放在这个位置,那之后呢,在这儿我们需要填一个什么呀,什么节点的名称,这个没有问题吧?好,我把这个点SSH去掉啊,我用脚本的,呃,我就用脚本的名称作为节点的名称啊,这个咱们好看,好现在往下走,那下边呢,我们需要干啥呢?呃,运行标志就是正常就行了,对吧,优先级不用调诶注意观察一下,这是不是有一个沃克分组啊,对吧,沃克分组咱们现在有几个分组。是不是只有一个default分组啊,对吧?Default分组它里边有几个worker还记得吗?三个WORKER1021314,是不是都在这个default分组里边,能理解吧?那这意味着什么呢?是不是意味着将来就是咱们这个任务,它是不是可能会在这三台节点里边的任意一个节点去执行,是这个道理吧?诶,这一点咱们得先意识到啊,先意识到啊,那这一点会带来什么样的问题,一会儿咱们再继续思考,咱们先继续往下进行,各同学,那接下来咱们怎么做?
20:17
现在干啥进来是不是咱们得调脚本啊,对吧?OK,好,各位同学,那你说调脚本的话,我们怎么调。怎么调脚本,咱们是不是正常情况下你得让他去调,谁得让他去调我们102这台节点下边B目录下边的这个脚本啊,没错吧,OK,那咱们怎么样能够让这个DS调到这个脚本呢?怎样让它掉一个脚本,其实两种方式,一种方式是什么呢?你可以直接怎么样,你可以直接找到这个脚本,My circle to HD FS附点SH对吧,然后你怎么办,我直接把这个脚本的全部内容直接怎么样呢?我给他拷虑到这个位置。能不能行,可不可以可以没有问题,可以这样啊,或者说我还可以怎么做呢。
21:05
诶,我是不是可以把我们这个路径下的这些脚本上传到哪儿啊,上传对,上传到我们这个DS的一个所谓的资源中心里边,对不对?好,你上传过去之后,我这就可以怎么调下了,是不是可以直接什么bash by是去调它来对吧?是这样的啊,那所以在这儿呢,咱们有两种方式,哪种刚式,呃,哪种方式更方便一点呢?肯定是上传到咨询中心,咱们通过这种BA的方式去调它是更方便一点,对吧?那所以咱们接下来呢,要做的一个核心的工作就是干啥呢?上传脚本,那所以这个工作流我们暂时就先不定义了,咱们先把这些脚本给他上传一下啊OK,好,那现在咱们开始上传这个脚本啊,那上传脚本呢,在这咱们为了方便啊,在这儿我创建一个什么呢?我创建一个文件夹啊,在这儿呢,咱们起一个这个名字啊,我叫s scds scripts对不对,OK,那在这边呢,我就点击这个创建就完事了,好,那这个文件夹咱们创业出来了,那之后呢,是不是咱们进入到这个文件夹对不对,然后呢,在这儿是不是就可以上传咱们的文件了,对吧?那大家注意啊,这个上传文件它从哪。
22:05
大船。他从哪传,是从我们Windows这边传对不对,那所以咱们还得先干啥呢?是不是得先把这些脚本给它先拿下来啊,对不对啊是这样的,这个咱们需要稍微的这个,诶注意一下,稍微注意一下,好,那接下来呢,咱们先给他诶拿下来那右键,那现在在这儿呢,我新建一个这个文件夹啊件夹,然后在这c pts script,那之后呢,我把这个咱们所需要的脚本一个一个的都给它拿下来,给它下载下来啊,稍微等一下啊呃,来,那现在咱们得看一看哪个脚本是咱们需要的,哪个是咱们不需要的啊,哪个是咱需要的。这么多脚本咱们得一个来对吧,哎,这个咱要不要啊,DWD到dws ED的S这个要不要。这个要不要,这个包不包含在我们这个全流程调度这个流程当中。包含吗?是不是DW到DWS这个咱们肯定得要对吧?好,那所以这个咱们是需要的啊好,那接下来下一个这个咱要不要。
23:01
这是哪个,这是什么以匿的脚本对不对,这是首日脚本,首日脚本需要每日角度吗?不需要,所以他不要啊,那这个呢,这个得要啊,对吧?那这个是不是也得要,这个也得要啊,那所以这个咱们也给他拿过来,好,那下来我们就下隐匿的应该是都不要对吧?好,那就往下走,这是DWS到ADS,这个也得要啊好,拿过来那之后继续往下走,那这些是不是咱都用不着,对不对?接在往下走,那这个呢,这个得有H于DFS到买circle,这个是干啥的来着,是不是把ADS的那个各指标的结果导到那个报表当中啊,对吧?那所以在这儿呢,我们这个得要拿过来,好,接下来往下走,这个要不要,这个得要,那这个是不是也得要,对不对?好,那这个继续往下进行。诶,那这个呢,这个得要吧,哎,这个咱们得要啊好,那这个呢,这是增量表的首日全量同步,这个是不需要的吧,这个咱是不要了,那这个呢,诶得要,呃,那ODS到DWD呢,这个也得要对不对?好,那接下来继续往走,那恰下边就没有了,好那要是在这呢,我们一共需要这么多的脚本,对吧?这一共几个呀。
24:01
应该是一共十个对吧,十个,那这十个脚本是不是正好对应我们这个工作流当中这十个节点呀,对吧?这个咱们得回忆起来啊,好了,那接下来呢,我们继续往下走,那现在脚本已经拿到我这个Windows系统当中了,那接下来是不是就可以一个一个的上传大家对吧?好,那在这儿呢,我们点击上传文件,呃,然后呢,我们点哪点这个位置啊,你也可以往这拖啊,在这我点上传就行了,好,那之后呢,我找到这个scripts,大家注意啊,他这稍微的有点不好用啊,如果上传文件的时候,我只能怎么传。我只能一个游船,它不能批量上传,所以在这稍微的麻烦一点,那得让我快速的操作一下啊。我这个手速还比较快啊,来这个上传一下啊,来这个第二个,然后呢第三一个上传,那完了之后呢,我们继续往上进行。大家稍微等一会儿啊,就比较慢啊,他这其实做的不太好,正常应该有一个批量上传的功能才对啊,那我们得上传,然后这已经是五个了,对吧,然后我们上传第六一个,呃,然后继续上传,呃,然后呢,该第呃12345,然后六该第七个了,对吧,第七个啊上传好,那我再快速做一下啊好,第八一个上传来走,然后该第九个了来上传。
25:16
来办事好了,那到目前为止,咱们这十个脚本是不是都已经上传到了我们这个,呃,资源中心当中来,对吧?好,那他有的时候我们接下来再去干啥呢?再去定义一下咱们的这个所谓的工作流,咱们再去定义一下啊好,那下来我们找到项目管理,找到这个J猫,然后呢,找到工作流定义,然后呢,咱这是不是创建工作流啊对吧?好,点击创建工作流,那接下来呢,我是不是就可以把它拖过来了,对吧?好,那拖一下,那我们第一个任务呢,仍然是这是不是仍然是这个对不对?好,那接下来我们继续往下进行,那这些东西咱们暂时都先不管,咱们直接管谁管这个脚本就行了,对吧?那这样咱怎么办?是不是可以引用资源中心里边的这个脚本,对不对,那这个咱们调的应该是哪个脚本,应该是my circle到HDFS负点S是不是应该是它对不对?好,你点开一下,那这是不是就可以引用到它了,对不对,那在这我怎么掉它呢?是不是直接拜就行了,对吧?注意啊,这个拜的话,我这个路径怎么写。
26:14
路径怎么写,你就记住一个原则就行了,就是这儿怎么显示的,那上边咱就怎么写就完事了,能理解吧,好,那就在这你就直接c rits对不对,然后后边呢,加上一个这样的脚本,那是不是就完事了呀,对吧?啊就这样了,那这样他就能够去掉这个脚本,好各位同学,那我们继续往下思考,那调这个脚本的时候,咱们之前说过是不是得传参呀,对吧,能理解吧,OK,那咱们这个脚本一共有几个参数,大家还记得吗?有几个三数化,记得有几个,咱们要是忘了的话,你是不是可以打开那个脚本看一下对吧?OK,大家来看啊,那首先这是不是有一个到二了,有道二肯定有到二一吧,所以说这个脚本应该是两个参数啊,这两个参数分别是啥来着?第一个参数是表明对不对,第二参数呢是日期对不对,那前面咱们就提到过啊,就是我做每日调度的时候对不对,我这个第二个参数可传可不传对不对?所以理论上在这儿我们要想少传一个的话,我只传一个奥数就完事了,对不对?那第二参数我可以不传,因为你要不传的话,它是自动计算前一天日期对不对?但是在这儿呢,我其实还是传比较好,为什么传比较好呢?啊,就是你在这传一个参数,那完了之后,我可以使用DS当中的什么来着,是不是那个自定义的那个时间参数,那个时间参数是不是也能自动的去获取什前一天日期或者前两天日期啊,对吧?OK,那你说我在这是不传好还是传好呢?传好传好在哪?
27:40
船好在哪?还记得吗?就是DS里边有一个什么功能。补数的功能还记得吧?补什么叫补数来着?就是比如说我前两天或前三天的这个任务,当时跑失败了,或者是没跑,我今天想把他们补一下对不对?OK,那这是不是就是补数啊,对吧?OK,补数的这个功能它依赖于谁来着?是不是就依赖于我们DS当中那个自定义的时间参数啊,还记得吧?嗯,全忘了是吗?OK,那这个自定义的时间参数还记得是什么?不来给大家演示一下啊,OK,那首先你要想在DS当中你给它传参,你这得怎么写?你要想引用参数,是不是应该是写一个Dollar,画括号里边写一个DT,没问题吧?好,那接下来下边是不是可以定义参数,我们定义参数两种,两种两个地方都可以定义,这儿能定,还在哪能定,是不是外边工作流那也能定啊,对吧,这个我们叫局部,外面那个叫全局对不对?好,那现在我们甭管是哪啊,写参数的格式都是一样的,比如在这呢,我给他传DTDT这我可以传什么值,我可以传固定的值。
28:44
对不对?比如说传一个2020杠零六杠幺五,这是一个固定的值,对吧?我也能传什么样的来着,那种动态的值对不对?比如说我在这儿可以这么写Dollar来一个方括号里边写一个YYYY,然后杠,然后杠DD后边,然后解一大家还记得这种写法它会怎么办来吗?
29:03
它是会自动的去计算每一天的前一天日期啊,对不对啊,是这样的,OK,好好,但实际上在这儿我这么传参跟我这儿不传第二参数,对于我这个脚本它是不是一样的呀,那是一样的啊,OK,那如果说你只是正常的每天定时调度,这个确实没啥区别,但是如果你要想用到补数的功能,能理解吧,补数还记得怎么补出来吗?还记不记得来回忆一下啊,那这个呢,我暂时先给他添加一下,我这个暂时先保存一下啊,先保存咱们随便来一个,比如说来test,来test啊先保存已经有了啊test-A吧,啊这个test-A,然后呢,我点击保存,点击添加,好,咱们先保存一下啊,那什么叫补数来着,我之前我记得之前给大家演示过一次,对不对,比如说我们以这个太子为例啊,那在这呢,我们点击这个运行,运行完之后这儿是不是有一个补顺,对不对,是不是有什么串行执行,什么并行执行,这个还记得吧,完了之后在那呢,你可以选一个哎补数的日期,比如说我需要补一到这个八号能理解,OK,好,那他就会同时怎么办,是不是同时跑这八。
30:04
天的任务啊对吧?好,那他这八天的任务是怎么去实现的呢?他怎么去实现,诶我一跑就可以跑一号的任务,二号的任务,三号的怎么跑,怎么决定怎么实现的呀,是不是就是依赖于那个自定义的那个日期的参数啊对吧?OK啊好,那如果说你在你的工作流当中,对吧,你用到了这种就是自定义的这种,诶日期的参数,OK,那它就会同时把这个解析为一个什么呀,一号哎,然后跑一次,二号跑一次,三号跑一次,四号跑一次,五五号跑一次,能理解吧?啊就是补数必须得用到这样的时间参数,那假如说反过来啊,假如说各位同学,我现在呢,并没有用到你这个日期的参数。也就是在这儿,我们第二个参数我没船,我是这么写的,那你想一想,你要想做补数的话,比如说一到八是不是起八个任务,那你起八个任务是不是跑的是同一个脚本啊,对不对,那这八天这八个任务跑的是不是都是我们这个当前日期前一天的这个,呃,这个数据啊,那里边这个补数的效果是实现不了啊,是这样的啊,所以说它的补数的功能是依赖于那个自定义的日期参数的,那所以在这儿呢,其实我们说实话,传这个日期是比较好的,传这个日期是比较好的啊OK,那传日期在这儿呢,我们正常你进行全程调度的时候,在这儿你就可以怎么传就行了,你就传一个DT,那完之后在这儿呢,就像我刚才写的到放个号,然后YYYY,然后杠大M,然后杠DD,然后来一个减一就行了,这个格式大家还记得在哪能找到不?
31:32
在我们那个do sc的文档里边,是不是有这个日期的格式啊,对吧?啊,当然这个不用记,你要是忘了的话,你去那找一下就行了,是这样的,正常你传就这么传就行了,OK啊,这是我们真正的去进行全流程调度的时候,你是这么传的,哎,但是我们大家要注意一下啊,我们现在是真正的定时调度吗?我们其实并不是,我们是生成一天15号的数据,然后我是不是就跑一下15号的数销对吧?那所以一会儿咱们要给他传参,我在这能这么写。不能你像你像现在这么写,他跑的线是哪一天呢?是当前日前也就2月7号的数据,对吧,咱们有那一天数据吗?没有,所以一会儿咱们真正的去跑实话数据在这你怎么传就行,你就传一个固定值就行了,0685是不是这么传就行了,对不对,是这样,这块咱们大家稍微的注意一下就行啊,OK,好,那实际上在这我们去定义节点,就这么定义就完事了,好,那这个节点你定义完之后,那你是不是还得再来一个,对不对,再来一个你就照着谁就定就行了,是不是照着咱们这块去找就行了,对吧,一个一个去声明,声明完之后是不是得有相应的依赖关系啊,对吧,这个依赖关系怎么声明呢?
32:32
是不是照着咱们之前规划好的这个依赖关系去连线就完事了,对不对,也就是你在这呢,哎,从这里边把这个图给它画出来,那就算是完事了啊,是这样的,OK,定义工作流相对比较简单,在这儿我就不多说了,然后呢,在这咱们讨论一个比较重要的问题啊,什么问题呢?就是关于谁,就是关于这个worker分组,刚才这块我是不是就让大家注意一下这个事儿啊,对吧,那说这个worker分组,这咱们得注意什么问题啊?咱们得注意什么问题?来来,咱们分析一下work分组,咱们用的是default default里边呢,有三个节点,102 103 004,对吧?这就意味着我们这个节点的任务可能分到102,可能分到103,可能分到104,是这个道理吧?好,那现在问一下大家,如果任务分到102,你说我们这个任务能不能顺利的执行?
33:21
能不能能啊,所谓分到102就是啥意思,所谓分到102就是说到时候呢,他在执行任务的时候,是不是WORKER102那个节点的work克对吧?是会把那个脚本拉取到102节点去执行,对不对,对不对,这个脚本里边咱们引用了谁的呀。引用谁了?是不是引用了date差了呀,没问题吧,对不对,这里边是不是引用了date叉了,对不对,那102有没有date叉,有,所以说这个能不能正正确的执行呢?能,但是如果说这个任务他分的时候分到了103或者是104了。对不对,能能能顺利执行吗?不行,他肯定就报错了,找不到这个叉嘛,对不对,所以这个道理应该是很简单,很很好理解的,那接下来我们就按四道,那我们为了避免这样的问题,对不对,咱们可以怎样去解决它呢?其实两种思路,两种思路啊,一种思路咱们可以怎么做,我可以再定义一个沃克分组,沃克分组是不是可以随便定一下对吧?好,这个沃克分组我只让他有一个成员,那就是谁,就是102,就那所以这样一来的话,我们跑这个任务的时候,我分到那个,诶新的沃克组里边对不对,他是不是任务只会在102执行,他就不会出问题了,诶这是一种思路,那其实还有一种思路,你怎么办?
34:31
怎么办?把date叉是不是给他分发一下,我让这三个work上面都有date叉对不对,所以这个任务分到哪是不是都都都能执行,应该是这个道理啊好了,那接下来我问一下大家,你说这两种方案哪个更好一点呢?我们应该选谁?其实应该选第二个好一点啊,为什么呢?你想一想,你要是选第一种方案对不对?那我这个worker它的分布式的意义还能体现出来吗?是不是体现不出来了,对吧?那相当于就是你所有的任务都在1021台节点执行,那如果102的worker挂了,你的任务就别跑了,是这个道理吧?那那如果说我现在呃就这么做的话,那相当咱们会有单点故障对吧?那所以说肯定是还是把它分到这个呃这个多个沃克节点去执行是更合理的,一个沃室挂了,是不是可以由另外的work式顶替他呀,对吧,是这样的,那所以在这我们接下来要做的一个主要的工作就是啥呢?咱们得去分发一下这个data叉对不对,但是大家要注意,我光分发data叉行吗?不行,就是咱这个脚本它需要用到那叉对不对,但是我其他的脚本还会用到什么呀。
35:31
其他间是不是还可能会用到have,涉及道理,因为我们有的脚本是不是里边执行是一个have杠一啊,对吧?那所以说我们103104不是也得有have才行,对吧?但是光有have行吗?光有have也不行,还得有谁,还得有SPA,为啥呢?因为我们前面讲过啊,就是我这个have,咱们的引擎是不是用的是SPA对吧?那have on SPA引擎要求什么,是不是要求have所在的节点得有一个什么来着,得有一个Spark是这个道理吧?那所以说我们现在还得把have跟Spark也得分发一下,哎,然后还得注意一个问题,Have on Spark have是不是需要用到Spark的依赖啊,对吧?那我问一下大家,那have是怎样去寻找它所要用到的这个SPA依赖的呢?还记得不是根据什么来着,根据环境变量啊,是不是根据一个SPA和home这样的环境变量去寻找它所需要的SPA的JA包啊,是这样的,所以说那一会儿103104,它是不是还得有这个SPA后的环境变量才行,是这个道理吧,所以说在这呢,咱们得考虑全面一点,OK,那咱。
36:32
那接下来呢,就先把这个分发的任务给他去做一下,分发的工作做一下啊,首先我们先去分发一下我们所需要的电子,好,那现在我们XS,哎,Yn Co op PG model这条,好,咱们直接分发就行了。稍微等一会儿啊,这个可能比较慢,对的,差分发完之后,咱们还得分发谁啊,分发还还得分发四八个啊,然后还有一点就是那个环境变量对吧,咱们得注意一下啊,稍微等一会,稍微等一会,稍微等一会。
37:03
有同学可能这块已经做过了啊,做过的同学你就让他再复习一下啊,没做过的就认真听啊。稍微比较稍微有点慢啊呃,他这个datar它之所以这个比较慢,是因为它这个里边的依赖比较多啊,你看里边是不是就各种reader writer啊,对吧,因为datar它支持的数据源比较多嘛。等一会吧,再等一会啊。嗯。呃,这是在往哪发呀?103还是104 103发完了吗?刚才看着没看着是吧,那等一会儿吧,啊,等一会再坚持一下啊啊103刚完刚翻完,要不咱这样吧,呃,时间也差不多了,要不大家先休息一会,然后我在课下的时候,我把那个data叉,还有Spark,还有have给它分发完,然后这块我就不不录在视频里边了,大家知道就行了,好吧,啊行啊,先休息会儿吧,兄弟们。
38:24
喂,好,各位同学,刚才大家已经看到了啊,我已经把这个就是我们的脚本所需要用到的Spark have这摊已经完成了这个分发的工作了啊,就是这里边你到底要分发谁,这个其实取决于什么呀,各位同学,你到底要分发谁取决于什么,是取决于你那个调度的脚本到底依赖于谁,对吧?你这个脚本你用谁,你是不是就得保证这个worker间里有谁啊,啊就这个意思,其实道理很简单啊,好,那完之后我们继往下走,就是其实在分发谁的时候,大家可能会有疑问呢,在分发Spark的时候,大家自己那块可能就有疑问了,为什么呢?因为你想一想啊,就是很多同学就是他在那个102年节点上边,他是不是安装了好几个Spark呀,对吧,有什么?呃,Spark stand alone,什么Spark,雅安Spark local对不对?那这到底分发谁呢?是都分发呀,还是只需要分发其中一个就行了呀?到底分发谁呀?
39:17
其实这个分发谁取决于什么呀,取决于咱们自己的配置吧,对不对?前面咱们在搭建这个high王SPA这个环境的时候,前面就说过,对不对,说诶这个have呢,会使用Spark home这个环境变量去寻找它所依赖的那个组件,呃,依赖那个Spark对不对,是这样的,那当时是不是咱们说了,诶你那个SPA home是不是指需要指向任意一个这个SPA就可以了,对不对,那所以是在这你分发谁就行了,你那个SPA home你指向谁是不是就是说你这个have就用谁啊对吧,用谁你是不是分发谁就完事了,就是任务逻辑,其实道理很简单,OK啊好,那这个大家在分发这个SPA的时候呢,你稍微注意一下就行了啊OK,好,那我们现在继续往下进行个同学,那接下来咱们还有一项工作需要去做,那就是环境变量吧。
40:04
没错吧,诶因为因为前面提到过说103104,因为之前没有HI5没有Spark对不对,那现在我们刚分发过去对吧,我们得配一个什么呀,得配一个是不是SPA home嘛,对吧,没错吧,好,那SPA home咱们在哪配才行?在哪配在哪配SPA后在在哪配,就是按照我们之前那种那个操作的一个逻辑,我们都是在哪配,说在环境变量配置文件里面去配啊,对吧,我们一般是在ETC什么profile.d下边去配,对不对,里边咱们有一个啥什么MYE nv.SH对吧?咱们之前都是在这边配的,对吧?那现在我们在这儿配行不行的,我也可以明确的告诉大家,现在咱们在这儿配是不行的,是为为什么是不行的呢?这个我需要给大家说一下啊,是因为dolphin scheduler对吧?它在运行我们那些任务的时候,它所使用的环境变量并不是我们在这个文件下边配置的环境变量,而是在哪呢?而是这样的,就是dolin sc呢,它自己就有一个环境变量的配置文件,它自己就有一个环境变量变件,那OK,他在跑任务的时候用的环境变量都是自己那个配置文件当中的环境变量啊,是这样的啊,就是这个咱们怎么能能够看出来呢,怎么能够测一下呢?就是这个很简单。
41:22
接下来给大家演示一下啊,就是这个命令大家之前有没有用过呀,Env啊,就是因V你直接回车,它能够展示什么,能够展示我们当前的这个绘画当中的所有的火箭量,你比如你简单看一下啊,这里边咱们熟悉的有谁,比如说have home,这是我们自己配的呀,对吧?那这有什么加va home,还有什么Maxwell home等等等,这些是不是都是我们自己配置的一些环线变量啊,对吧?OK,那这儿我是能够正确的显示的,OK,那咱们接下来还可以怎么做呢?来我怎样能够看到,就是dolphin scer它使用的环境变量到底是不是我们这配的这环片怎样能看出来啊,怎样能看一下dolin scer它所哎使用的环境变量是哪几个,这个怎么看。
42:04
这个很容易啊,对吧,你随便定义一个工作流对不对,你让这个工作流执行一个什么就行了,执行一个因为的命令不就行了,是不是就能看出来了,对吧?咱们以谁为例,就以这个hello为例吧,好,那现在咱们先给他下线,然后编辑一下啊好,那我现在把这个note a给它改一下,那这里边咱是不是可以让他执行一个env这样的命令对不对?OK,那完了之后呢,我们点击确认添加,然后点击保存好,那之后呢,咱们是可以把这个工作流给他跑一下了,对吧?来,我点击上线,然后呢,点击运行,然后呢,点击运行走,然后咱们稍微注意一下啊,那现在是不是会出现一个工作流实力对吧?那下边是不是会出现一个任务实力啊,正常情况下对吧?稍微等一下啊,这个跑完没有,嗯,还在跑没跑完呢,稍微等一会儿,OK,跑完了,跑完之后我们找谁找note a就行,对吧,然后咱们点一下查看日志来往下翻。来各位同学,你看一看这里边是不是就是他打印的那个环境变量啊,对吧,你注意观察,你看这些环境变量跟我们刚刚在102执行那个因为命令的时候打印的环境量是不是一样的,显然是不一样的,对吧?你看这里边有个什么highdo home,我们high home配的是这个不是还它还有一个什么SPA home1 SPA home2,这个我们都没配过,对吧?所以说这个显然跟我们配的环量不是一回事啊,是这样的啊好,那所以接下来呢,咱们就得看一看,就是DOLSC跑任务的时候,他用到环境变量配软件到底是哪一个,其实是哪个呀。
43:25
我们文档当中其实已经给列出来了,是哪个是这个,诶在这个路径下边呢,就有一个文件,就是do scner使用的环境变量都是来自于这个文件的,好,那所以说我们接下来你想啊,就是你要想配环境变量,那你就得在哪配才行,是不是就得在dolphin scner它用的这个环境变量配置文件里面去配才行啊对吧?是这样的,这个一定一定得注意啊好,那咱们接下来就找一下这个文件,我们先进到呃,102哪个节点进到,诶do进来之后呢,进到哪,进到com,进到康之后,是不是里边有一个env呀,对吧,进到env因V里边是不是有一个dolin together env的SH,对吧?那咱们现在给它打开,打开之后各位同学我们来看一下,你看这里边是不是它声明了一堆的环境变量,然后下面呢,把这些环境变量的什么B目录或者什么等等,是不是都加到了他下边来,对吧,是这样的,这是这个,呃,这个文件的这个大致内容是这样的,你看这里边所展示的什么high hope跟刚刚我们在这个位置看到的是不是都是一样的呀,是一致的吧,诶是一致的,是这样的,那所以。
44:25
接下来咱们要改就得在这改,那你说我们要改的话,咱们得改谁呢?都有谁需要改呢?因为原则上你用谁改谁就行了,对吧,你用不到的,你可以给他删了,你也可以给他保留,是这样,那咱们这会用到谁呢?High后咱们用不用。用不用hi home得配,Hi do home得配啊,为什么得配?从哪就能看出来呢?从一个非常简单的脚本里边大家能看出来,比如说我们看一下谁home b,你比如说我们就以那个my circle to hdfs附点S,咱们以它为例大家来看啊,就是在这儿我们最开始的时候,咱们是不是写了一个这样的函数,叫做什么handle pack d对吧?你们完里边的内容是什么?你看你这执行了一个什么命令,是不是直接执行了一个hi度FS对不对?那如果说你的pass下边要是没有这个脚本,它能执行成功吗?是不是成功不了对不对?那所以在这儿呢,你是不是得把这个呃,Hide home给它配一下,对吧?配完之后,那下边是不是他把这个B加到了这个pass下边对不对?你是不是才能直接执行成hi do的命令啊,对吧,那就这些东西你该配的都得配啊好,那在这儿呢,我就不再一个一个去解释咱们都要配谁了啊,那在这儿呢,我们诶把这个直接把文档当中全部拿过来,直接给它复制CTRLC诶然后呢,把这里边给它替换一下就行啊,这里边一共有几个呀?呃,应该是差不多是九个吧,那9DD,然后全部删除,删除之后最后一行咱们给它留着啊。
45:42
然后呢,把文档当中这几个给它粘过来就行了,当然我这儿直接粘过来行,但是大家那块儿呢,你得注意一下,粘完之后跟自己那个缓节变量那个跟自己一个路径对照一下啊,看有没有问题,那在这呢,我有几个比较重要的给大家特殊说明一下,就是这里边我们需要必须得配的有一个head of home,这个我已经配好了,那还有一个呢,就是这hi com DR,这个也得配一下,然后还有谁呢?注意观察一个小细节,你观察这啊。
46:07
原来这个位置是什么?是死SPA的后一对吧,然后死SPA的后二对不对,然后你注意观察,我这是是把那个一给去掉了对吧?那这必须得去掉,为什么必须得去掉呢?是这样的啊,就是have,它是不是会根据SPA和home这个环境变量去找SPA依赖对吧?注意它是根据SPA home去找的,而不是SPA home1,也不是SPA home2,能理解吗?同学们,所以这块一定一定得注意啊,OK,那这个完之后呢?哎,我们继续往下走,那当然这个SPA home指向谁是不是取决于你自己的实际环境对吧?你那个103104,你分发的是哪个,你就让它指向哪个就行了呀,对吧,就是这个逻辑呀,啊,我们现在继续往下进行,那还有谁得配一下什么账号home,这个咱们得配,然后呢,这个该配的咱们这些都给配好就行,什么data叉home等等都配好就行了,其其余的我就不再多说了啊呃,然后再往下下边这个export pass,这个咱们用不用改呢。
47:01
这个不用改,有的可能说了,你这儿不得改一下吗。你上面是不是有SPA后,这就改成SPA后嘛,对吧,其实这个咱们说实话啊,就是我们当前这个场景,你不改也行,为什么不改也行啊,大家想一想,你说我们呃不改为什么没有问题,为什么呀,什么时候你必须得改,什么时候可以不改。其实很简单啊,其实很简单啊,就是你假如说你现在你那个脚本当中啊,有一个这样的命令,比如说执行了一个什么Spark shell或者是Spark circle,哎等等等,你如果你执行的这样的一个命令,OK,你是不是必须得保证你那个Spark-she或者是Spark-circle,它得位于pass下边才行。能能理吧,如果你直接执行了这样的一个命令,是不是必须得保证它的v pass才行,对吧?那这种情况下,你是不是必须得把这个一给它去掉,然后呢,把你这个自己的Spark是不是它的B加到pass里面才行,对不对,那我们现在脚本当中有这样的命令吗?我们脚本里边有这样的命令吗?有什么Spark-SH,有SPA-S吗?有吗?根本就没有对吧?根本就没有,这是啥东西?呃,大家不要不要不要那个被他吸引注意力啊,听我听我说,听我说啊,好,我们继续往下进行啊,呃,那刚才我主要是解释了一个什么样的问题呢?主要解释了一个这样的问题啊,就是说,呃,那咱们这个SPA home1你改也行,你其实不改也可以,什么时候必须得改,就是如果你执行了什么Spark-circle SPA sh这样的命令,那OK,你就得把它的B加到这个pass里,那我们现在是不是没有这样的命令了,对不对,我们是不是只需要用到一个SPA hope就行了,对吧?是这样的,所以在这儿的这个你改不改都可以,没有影响,没有影响啊,OK,那这个大家理解了就行,好,那到目前为止这个环境变量的配置文件,咱们就算是,诶配完了OK啊,大家到时候配的时候,你就照着文档把这几个复制过来就行了,呃,当然复制过来之后,你跟自己的实际路径对照一下啊好,那这个完成之后,我们接下来继续往下走,那你说这个文件咱要不要分发呢?用不用分啊。
48:56
六秒。肯定得分发呀,集群模式是不是肯定得分发对不对,那所以在这呢,我们XXYC一下,把这个呃,环境变量的品种液给它分发一下,好,那分发完之后,那咱们要不要重启呢。
49:12
Do sc要不要重启呢?需要重启,需要重启,其实大家可以测一下对吧,你测一下就行了,怎么就能看出来这个效果呢。怎么能看出来个效果,我再把刚才这个工作流跑一遍,对不对,我让他执行一下EV对不对,那完了之后你看环境变量有没有变,变了是不是就不用重启了,没变你就得重启,是这个道理吧,好,那现在咱们重新执行一下,点击运行,点击运行好,那稍微的等一会儿,哎,刷新啊刷新刷新等跑完啊。好,诶还没完,已经完了啊,然后看这个任务实例,然后找谁找NOEA对吧,大家找到A,然后查看日志,然后咱们看一下这个下边的环境变量,你看一看这个环境变量是不是已经是我们给他配的环境变量了,对不对,说明就已经生效了啊,那生效了之后,那在这儿呢,我们就不用再给它充气了,好那到目前为止,那那咱们这个呃该该做的准备工作基本上就做完了,OK啊好,那现在咱们简单的总结一下,其实咱们刚才做的呃,这个准备工作其实还挺多的啊,咱们总结一下咱们都做了哪些工作,首先那咱们做的第一个工作是什么呀。
50:19
是不是把我们工作流所依赖的脚本都上传到了哪儿,HDFS的资源中心上边,对不对,这是第一个工作,还有第二个工作是什么,是不是把我们脚本所依赖的组件,包括have Spark data叉是不是给它进行了一个分发呀,对吧?哎,这是一个,还有一个准备工作就是啥?就是环境变量,因为我们这些脚本它的正确执行是不是需要依赖我们的环境变量啊,对吧?OK,那这个环境变量跟咱们之前配的那个位置是不一样的吧?哎,我们在这儿呢,需要在do分SC自己去所维护的一个环境变量配置文件当中去配置这些环境变量,配完之后得怎么样才行,得分发才可以,这是我们刚刚所做的三个准备工作啊,这个大家一定要,哎注意一下,好准备工作都做完之后,咱们接下来就可以,哎正式的去定义工作流,然后呢,去干啥呀,哎去啊跑咱们这个工作流了,好,那现在我把这个视频先停一下。
51:12
呃,好了,各位同学,那这个准备工作我们到目前为止就都都准备好了,那接下来我们就终于可以开始定义工作流了,OK,那定义工作流呢,其实很简单,刚才咱们已经演示过了,其实就是创建工作流,然后呢,照着这个图咱们去一个一个去画就行了,对吧?啊,但是在这儿呢,咱们要真一个一去画这个就太麻烦了啊,在这儿呢,我就不再给大家去演示一步一步怎么画了,那在这咱们可以换一种做法怎么做呀,注意观察,我这个除了可以创建光头,还可以怎么做来着,是不是可以导入工作流啊对吧?OK,那在这呢,我们就直接导做就行了,直接导入就行了,OK,但是啊,这个,呃,导入这个工作流的这个功能呢,它稍微的有点问题,它有点bug啊,有点什么bug呢。就是当你把一个工作流给它导入进来之后,它可能会出现一个什么问题呢?可能会出现一个就是这种依赖关系错乱的问题,或者说那个呃,就是那个呃依赖的脚本就是你引用那个脚本错乱的一个问题,这可能是他的一个bug,所以说大家把这个工作导进来之后,你还得再逐个的怎么样一下呀,再检查一下,一定得记得检查一下啊,那接下来呢,我就给大家去呃演示一下这个到底如何导入,当然你要想导入,你首先得干啥呢?你得先是不是先导出才行啊,对吧?哎,你所这个,所以说呢,我是这样的,就是我在上一个班呢,哎,我已经把上一个班我创建的工作流给他提前导出出来了,那在这儿呢,我就不再一个一个去创建了,我直接给他是不是导入一下就行了,对吧,是这样的啊啊,那现在呢,我就导入一下这个工作流,那当然导入工作流,你是不是得有一个当初你导出的一个文件啊,对吧,它导出的文件是一个什么文件呢?
52:49
是一个接算文件,是一个接文件啊,OK,在那其实咱们可以演示一下,比如在那我我这是不是有一个什么hello word工作流啊对吧?那导出怎么导出,你往下走,这是不是有一个导出对吧?你就点点完之后这就会生成一个哎接算文件,这个接算文件里边呢,就包含了你这个工作流的一些原数据信息啊,然后呢,你再给它进行是不是导入,找到那个接算是不是就导进来了,对吧?好,那接下来呢,我就找一下我上一个班的那个工作流的那个接算文件,我找一下,那在这呢,我搜一个G ma.GN诶应该就是诶这个文件,这个文件我再给大家发到一个视频里面,是不是也有啊对吧?好,那现在咱们给他诶复制一下啊,复制呃,在下边复制,我给它放在哪呢?放在桌面啊,这个好找一点啊,放在这儿,然后呢,咱们给它导入一下。
53:34
呃,找到那个文件,呃,应该是在桌面对吧?找到j Mo,点杰森,然后打开,然后呢,我们点击上传,好,那注意观察,你看上传上来之后,这是不是又多了一个工作流啊,对吧?好,那刚才就说过了,说这个工作流呢,它可能会有问题,所以在这儿呢,我们需要逐个的检查一下啊,来咱们一个一个看啊,那就是你现在看它是不是好像是正常的呀,对吧?但其实这里边可能会有问题,咱们逐个检查,先看第一个my circle to hdfs负对不对,那理论上他应该引用的脚本是谁呢?
54:06
应该引脚本是谁,是不是应该是呃,My circle to HF,这个现在是有问题还是没问题啊,现在是没有问题的对吧?OK啊,所以在这呢,你点击确认添加没问题,来我们逐个检查看这个这个有没有问题。Hdfs to log h to o log这个是不是也没有问题,对不对,这个点击确认添加好,那接下来我们继续按走,那这个呢。H加排到ods DB,这个也是没有问题的,对吧?啊,然后点击添加,然后我们就按到好,那这个有没有问题呢?也没有问题对吧,也没有问题啊好,那所以这个呢,我们点击确认添加,那这个呢。啊,也没有问题啊,这个没问题,OK,那这回是不是也没有问题啊,对吧?好,那下来我们继续往这边看,那这个有没有问题啊,那ED到dws ED到DWSND对不对,这个也是没有问题的,对吧?好,OK,那接下来继续往下走,那这个应该是ED到TDD到TDD到T,这个也没有问题吧?好,那接下来往下走,这个是DWS到ADS,这个也没有问题,那这个呢。
55:04
HDFS到100HDFS到这个是不是也没有问题啊对吧?好,我这儿这个恰好是比较顺利的啊,都没有问题,然后大家那块儿呢,呃,要是有问题的话呢,你就给它调整一下就行了,呃,然后还有一个比较细微的地方,大家要注意一下,就是有时候呢,你看着它没问题,但是这里边有一个小细节得注意哪呢?就是关于这个资源的这个背景色,你看啊,就是正常况下,我这个背景色是什么颜色,是淡蓝色对不对?但是诶有些情况下可能会出现一个什么样问题呢?就是说你这个里边的脚本的路径是对的,但是它那个背景色不是淡蓝色,它是什么绿,什么颜色的呢?是一个浅绿色,是一个淡绿色,如果是淡绿色的话,那就说明你这个资源它是有问题的,是有问题的,你这个怎么做一下就行了,你就把它删除,把这个资源删除,然后呢,你再重新的这样添加一下就行了,能理解吧,同学们这个一定要注意啊,一定要注意这个是呃,可能是有bug,这个一定要注意一下啊,好了,那我这已经检查完了,都没有任何问题,那所以咱们接下来就可以怎么做。
56:04
就可以去执行这个工作流了,对吧?好,那在执行工作流之前,咱们得注意一下这个参数,咱们一会怎么传啊,大是观察,你看我这些脚本,这个日期参数我都传没传,我都给他传了一个当时DT对吧,那也就意味着一会儿我是不是得给这个工作流传参对吧?那这时候你说我给他传参,我用全局参数,用局部参数比较好啊,肯定是全局比较好,对吧,那就在这呢,我们局部就不添加参数了,我们统一在全局添加参数,好,那在这儿呢,我们点击一下这个保存,点击保存之后呢,大家注意观察啊,那这个呃名称我给他稍微调整一下,我把这后边这个后缀去掉啊,大家注意观察,你看这是不是就有一个全局参数啊对吧,就是正常情况下,咱们进行每日定时调度这个全局参数,咱们这要传应该怎么传。真正上线了,真正的每日定时亮度了,这怎么传,是不是还是写那个什么Dollar方括号,然后YYYY,然后杠大M大M,然后杠DD,然后后边来一个减一,正常是不是得这么传呀,对不对,但是由于我们现在是测试,只测试15号这一天的数据,所以在让你这么传不行,对吧?所以在这儿呢,我们暂时的先给他传一个固定的六月15的日期是不是就行了,对吧,这个一定一定得注意一下啊,就咱们得知道真实情况下是什么样的,然后咱们现在为什么这么做啊好,那完成之后我们点击添加好了,那到目前为止,那咱们这个工作流是不是就算是定义好了呀,对吧,那一会儿呢,我会把这个结算文件啊,大家已经有这个结算文件了啊,然后大家到时候也是可以把这个监测文直接导进来,导进来之后逐个的检查,一定要逐个检查好,那完事之后我们点到这个工作定义,接下来咱们就可以干啥了,就可以上线执行了,对吧?好,那现在我们把这个工作流给他点一下这个上线,好现在已经上线成功了,然后呢,我们就可以执行什么呀,我们就可以执行这个调度了,来我们现在。
57:48
点一下这个运行走。好,那完了之后,这里边咱们是不是得填一些东西啊,对吧?来看一看哪些东西咱们要填啊,那首先呢,有一个通知策略,大家说这个我发还是不发呀?呃,这个其实你随便,呃,但是正常情况下啊,在实际的生产过程当中,我们应该怎么办呢?一般的就是失败发就行了啊,成功可以不发,一般失败是必须得发的,那在这儿呢,大家也可以模拟一下这个真实的环境嘛,对吧,你也可以来一个失败发对不对,那完之后这个咱们就不多说了,那你这个要点了,失败发,那下边你得怎么办呢。
58:21
是不是得选择你的通知对象,这个通知对象你两种方式,一种是怎么办?是不是通过这个通知组去选择,还有一种呢,是不是直接指定这个收件人的邮箱也行啊,对吧?那在这儿呢,你指定一下就行了,那我这儿呢,我就不发这个邮件了,OK,好,那完事,其他的其实就不用填了,那之后呢,我们点击运行是不是就可以了?好,那到目前为止呢,那咱们这个工作流它就已经提交上去了,这时候正常工作流实例里边是不是会出现一个对不对,然后呢,你点一下这个工作流实例,呃,是不是能够看到我们当前正在执行的这个任务啊,对吧?以及这个任务执行进度,那是不是他俩先执行,他俩执行完了之后,是不是后边再依次执行啊对吧?OK,那这时候我们要做的工作的就是等,哎,咱们等他跑完看一下最终的结果就行了,最终成功的现象应该是啥样的,是不是这个全都是一个绿色小箭头对不对,然后呢,哪会出现16号的,15号的结果,哪哪会出现15号结果,最终咱们是买S对吧?诶一会儿再买S里咱们查看一下,看有没有15号的。
59:22
呃,统计结果有就表明整个流程是成功了,对不对,是这样的啊,那所以在这呢,我们剩下的时间就是等他跑就行了,来我把这个视频停一下。呃,好了,各位同学,那刚才呢,已经给大家从头到尾的演示了一下,如何用这个DS的集群模式去调度工作流啊,然后呢,集群模式里边需要注意的一些问题咱们也提到了,那咱们接下来呢,再给大家说一下这个单机模式大家应该怎么去做?呃,你要想用单机模式的话呢,首先得先把这个集群模式得关闭才可以,就是单机模式集群模式,这俩不要同时起,能理解吧啊,所以说你得先把这个集群模式关了啊,OK,那关了的话,那你说组K还要不要留着。
60:04
组旋边要不幺零也可以,也可以关掉,为什么也可以关掉的,为啥?因为前面提到过单机模式里边它有什么呀?是不是有内置的JK啊,对吧?那所以说你集群里边这个ZK你也就不需要启动了啊,这个一定要注意啊,也就是说呃,你要想使用单机模式,只需要启动海度博是不就可以了,只要写海度不就行了啊好,那么之后我们继续来走,那前面我给大家提到过啊,就是因为第这个doin sc的单机模式,它使用的是它内置的一个组开板和数据库,对不对,那你说他用的是我们那个买操数据库嘛,是吗?并不是,那所以说我们之前在集群模式下边做的那些配置,在单机模式下你还能看见吗?你就看不见了,因为你做的所有的一些配置,比如说你配的租户,你配的用户对不对,比如说你之前创建的工作流,他这些信息都保存在哪儿了。保存在数据库里边吧,对不对,那你的单机模式跟你的集训模式用的是一个数据库吗?不是,所以说你集训模式下边配的所有东西在单机模式下你是看不见的啊,反过来你在单机模式里配的,你在集群模式是不是也配也看不见啊对吧?他俩互不影响,所以这个一定要注意啊,那所以说你现在要想用单机模式,就得在把所有的这个东西再重新配一下啊,是这样的,这里边其实呃要配的东西也不多,你必须得配的东西其实就是两步,一个是什么创建租户,一个是创建用户,主要就是这两个,别的都可以不配啊好,那尽量往下走,那首先你第一次启动单机模式是不是也是只有一个管理员用户,对吧?你得先用管理员用户登录好,那登录完之后呢,首先你得创建一个租户,诶原来怎么创建,现在是不是还是怎么创建啊,对吧?好,那之后呢,再创建一个,诶do分盖一个普通的用户,好租户用户都给他创建完毕,创建完之后接着往下走,你就可以干啥了,这就可以切换到普通用户去登录了呀,对吧?好,那切换到。
61:55
普通用户去登录啊,各位同学,这个其实呃,就是切换到普通用户呃,登录之后,后边你要做的工作就跟咱们在集群模式下边做的工作就是怎么样了呀,基本上就是一致的了,就是一致的了,就是这里边呃唯一不一样的是什么呢?就是你的在单机模式下边,你需要去分发have,需要去分发Spark data叉这些东西吗?需要分发吗?是不需要的对不对,OK啊,因为你单机模式你在起的时候呢,你比如说你就在102这台继电器对不对,那你是不是只有一个拨号就在102对不对,那所以说那是不是所有的任务都可以执顺利的执行啊,对吧,是这样的,当然那个环境变量的配置文件你要不要改?
62:38
环境变量配置文件要该改的是不是也得改对不对,但是改完之后还用分发吗?就不用分发了,是这样的,这是单机模式,咱们大家需要注意的,然后最后一点就是单机模式怎么启动啊,说什么单机模式怎么启啊,很简单,来大家来看一下,我这儿就已经给大家准备好这个命令了啊,这就是单机模式的启动命令啊,就这条OK啊,你比如说你现在先把这个所有的这个呃,集群模式的进程都关掉,关掉之后你在这个102啊,它的这个dophin sc的安装目录下边执行一个这样的命令,就能够把这个单机模式给它启动起来,在这儿呢,我就不演示了啊,因为我这儿是不是集训模式正在运行啊,对吧?呃,大家到时候呢,执行一下这个命令就行了,很简单啊,Dolphin start stand论。
63:22
啊,那时该访问的那个哪个页面就还访问哪个页面就行了,它的这个,呃,这个地址都是一样的,那你要想停怎么停呢?就把这个start换成stop就完事了,对不对,就是这样,OK,好,那这就是单机模式的一个注意事项,呃,然后呢,在这儿再提醒一下大家啊,就是单机模式它使用的是不是内置的数据库啊,对吧?前面提到过,它使用的这个内置的数据库呢,使用的是内存模式,什么叫内存模式呢?就是你往那个数据库里边写的东西,它会真正的持久化磁盘上吗?它并不会的啊,只会保存在内存当中,那也就是意味着什么。意味着你这个dolphin scanner这个,呃,它它的这个单机模式对吧,比如说我现在启动了,然后呢,做了一系列的配置,然后呢,我现在给它关了,关了之后再提起来,刚才那些配置还有吗。
64:10
就就没有了,就没有了,是这样的,所以说大家在使用单机模式的时候,一定要稍微的注意一下,反然然后有同学可能会说了啊,那既然他这个不会保存我这个配置,那我将来我我再想用,那怎么办呀?啊其实没关系,大家不用担心这个啊,就是我们这个结果不重要,咱们重要的是一个过程,对吧,你只要诶用这个单机模式把这个流程跑一遍,跑成功了,那就完事了,也就后后边也用不到这个流程了,是这样的,所以这会儿大大家不用担心啊,是这样的啊好了,那这就是单机模式的一些注意事项,完事之后我把视频停一下。
我来说两句