00:00
好,接下来呢,我们讲一下这个照提交流程,源码及切片。码详解。啊,也就是说呢,你这个照吧,就是你开头我写完这个mmr。如何将它提交到?集群上。这一段过程,他做了哪些事情?啊,接下来呢,我们带大家啊,去一行一行去读一读啊。那读这个之前稍微回顾一下啊,呃,这两个概念一定要要清楚啊,我再强调一遍。数据块是。HD上,物理上分成一块一块的。是相当于在物理上磁盘上。那么这个数据切片呢,它是在逻辑上对输入的这个内容进行一个分片啊。并没有改变它相应的这个磁盘上的位置。这个要清楚啊,这。之后那下面还有一个一条概念就是。一个job的map阶段并行度由客户端在提交job时的切片数决定。
01:05
多少个切片就决定了你有多少个map。OK,那回顾一下这两个概念之后,那下面我们开始啊。跟一下这个。改造啊,提交流程啊,连代码。那这个代码是,呃,从哪去跟呢。这个驱动类,我走一下这个word看看啊,走一个最简单的。那这个呢,是驱动类,我们写了这么多代码。这个断点要打在。也就是说在你提交的时候,你看一看他到底向集群提交了哪些内容。前面这些都相当于是一个正常的一个配置啊。生产的配置啊,没什么意义啊,最主要的是这块一提交之后的事情是比较重要的啊。那他其他的行。右行。
02:02
对之后呢,双击一下啊,出来一个word count。然后呢,这块呢,是一盘印布的。您不吧。是有困货了,一会确认一下啊,然后呢,报的不的。的。一步的。部的word在哪?是这个吧。没问题吧?OK吧?啊,好紧张时刻到了啊,紧张时刻到。哎,到这了吧,好,开头不错。继续这个还是这个哪个。第一个是往里进的,往里进走,进到这,进到这里面第一个看到的就是。
03:01
Sum等之前我是尝试过用这个啊,其实呢,呃,这个we for complic啊,它比这个some多了下面这个内容啊,也就是说提交完成之后要打印一些啊信息。运行的信息。那下面进到这儿呢,他说这个状态是否是定义。它定义成这种状态是什么意思呢?如果是DY啊,相当于还没有被占用,就说没有相同的job,那我们可以继续运行,那在后面的时候,他提交job的时候,它会将这个状态制成什么呢?And running。从正在运行啊,啊,那目前这个呢,不是这个执行状态,那你可以提交哎走。进来进来之后想进到这个方法里面去,那我进啊。进来之后呢,这里面有这么几个核心方法。先看这几个,那第一个呢是state啊,其实就是判断一下这个状态,我可以进去看一看啊。
04:01
这里面意义没有什么。太重要的意义啊,啊,这里面主要是抛了两个异常啊,照在什么状态。另一个呢,是这个,呃。照的状态。快速往后出下来下来看。我们的正常状态呢,现在都是OK的,那如果他是生态专井,他会给你报异常的。不让你再提交这个。出去。那来到这个方法。这款呢叫赛柚子new API。也就是说,让你使用新API。嗨的馆已经发展了这么久了啊,它的新旧API呢,呃,这个比例比较多啊,老的老的一些API特别多啊。那你看一看他对老的API是怎么处理的呢?来。但这里面有old啊,各种old是吧?他将这些old其实都转换成新的API啊,他在这这个方法中呢,把一些老的这个。
05:01
呃,代码给他。翻译成新的了,往下走走。都收的这些啊。这个函数就干这些事情的。为了匹配这个兼容性啊。那就出来了,那前两个方法呢,其实没有什么这个太大的这个技术含量啊,相信大家能轻松的搞定,那下面呢,来到这个connect啊。也就是说网络连接,那这个呢,对于我们来说啊,要稍微的看一看。然后进进来之后,这是一个fast集群,对吧?啊,那目前状态呢,是弓。没有这个集群,那怎么办呢?创建。进到这儿啊。别点快了啊,为了防止我手快太快了啊。进到这里面。哪个?提前打啊,因为这块呢。啊,走。
06:06
又回来了啊,又回来了,大家往下走,继续走。一下我出。下下。就到这儿。这个这个没没营养啊,这个没营养,前面这块都不是特别重要啊,也没大家看。看到很多播出。这个是不是我接哪断的啊。这一块才是,你看创建一个class对象,其实就是为了创建它啊,创建一个集群对象,那这个呢,是对这个集群呢,进行一个初始化。你看这个矿是啥?熟悉吗?非常熟悉是吧,这我们经常改的这几个配置文件。好,进去。这是什么意思?说是吧,啊是不是同学直接你进入一个好,那往里进下。
07:02
然后再走走。都是制哈,那默认情况下呢,这个是客户端,这个协议目前是空。那再往下走。以他为空,他是不是给你创造了一个客户端协议啊。是不是创建了不。是不是创建了一个,那你看这地方要注意哈,他创建的叫local job。他创建是本地的,本地的如果你在机器上运行的话,它这一块创建的就不是本地的了。哎,就是雅恩上的了。这块要注意。其实这个这个方法里面,最主要的就是判断你是连接的是雅恩,还是连接的是本地。这一块的创建根据你的环境不同啊,创建对象也不同啊。那再往下。
08:00
走走。其实下面就没有什么太大含义了哈啊。主要是这块,他创建了这么一个协议。直接就出来了。下说。回报完毕。出来。就出来了啊,这个connect啊,你就记住它在创建的时候。你要本地运行,它创建的是runner。呃,要是在这个。集群上它创建的是雅安啊,雅安的对象啊,不一样啊不一样。那行,那再往下呢,是这个这一块,这一块一不大,主要在哪块呢,大哥你呢。那我们快速的往下下也可以进去看一看啊,转一圈。F,对吧。空间为不下。下。
09:04
这样下。到这了,到这呢是必须要跟进去的啊,这个是提交job的一些详情信息。进来之后往下走。我再见。都是这个地方要看一下,叫check space。叫什么呢?Valid jobs output啥意思?校验它输出的。镜哈,来,这个就是我们能看到的一个异常了进来。嗯,进来之后往下走走。手烧一块就完蛋了,进来。好,我下去。看一看,这里面是不是我们熟悉的呢?Ensure that the output,输出径,Is not。
10:03
确认输出路径已经被设置好啊,并且不存在是吧?啊,存在,那你看如果存在,这地方会output director这个路径already熟悉。呃,之前我说过,我说这块呢,如果你这个输出路径啊,这个提前有的话,他一定会报这个异常啊,后面会带大家看源码啊,其实这个源码就在这儿呢啊exist。都往下走。把这个看完。就在这儿。那下边。出来之后可以快速出去。这个呢,就是验证这个输出路径,你看他是不是,呃,教练的很早啊。没有做任何事情之前就已经教训他了。那下面再往下。这个呢,还是这个配置信息。还是那个八个文件吗。
11:03
呃,这也是爱的框架to这个的,这也是一些缓存的处理啊。讲的数列我们先不看,往下找。这地方要注意了,这有一个叫submission。的一个输出路径。我们在来到我的E盘,我的临时目录是tap。态度吧,卖bread的space。这里面有一堆这种信息啊,你们那也有可。你看一看,他在每次提交账的时候,都会创建这么一个路径,把这个资料呢都存到这里面,然后提交走。同学说,哎,你这里没有啊啊。他一旦提交完,立刻把这里的东西删除掉啊。一会儿呢,大家看出来啊,那为了这个防止说我作弊是吧,狠一点。全部干掉啊。很干净吗?干干净净好。那下面这个是这个路径啊。
12:02
我下。我这一点就出来了,那你看这个路径是hi豆它map right。啊,这个东西,然后第二好。对吧,看着放进进进进。到这了吧,好,继续啊,注意哈,注意这里的变化,一会还要重新往里进。那下面这个呢,是这个网络的IP,看一下IP是多少。是不是就是我电脑的这个IP啊。这个妙PC啊,然后IP呢是192.168.0.130啊,再往下继续。呃,下。下下下。这都是一顿各种IP设查,那这块这块呢,它有一个job ID,提交时的job ID啊,每个job也是你这个任务。在提交的时候,他都会给你分一个ID,这不难理解吧。
13:04
因为你想想你你你有成千上万的这个兆吧,你让用户如何来区分你是哪一个兆啊,那是不是要给他分一个身份ID啊,类似的就是它啊啊唯一值。好,往下走。看看这job是多少啊?嗯,这招吧,是。放在这儿啊,放在这儿。好,那我们往下走走。这是提交的路径哈,你看他要提交到哪。太阳嘛,太阳麻,这个对比要。这个是我刚才我创建的,那后面这个你看是不是它那个照白D号啊,哎,你说提交到这个前面这个路径下面的这个照不下。OK哈,往下走。
14:01
看看提没提交走走。各种。是缓存的一些处理。啊,依然是缓存的处理,向下下。下。这块是最慢的啊,你要弹幕执行到这块,每次都是最慢的啊,这块不错啊,挺快往下走。来到这儿,到这儿要停,打三停,到这停。这里叫copy and con,这里面会提交一些文件的信息啊,我进去看一看。进。进来之后呢,这有一个upload创建这么一个对象,然后呢,这个uploader呢,就提交了他的job和要提交的信息。这是照要把这个信息提交到这个路径上。提交到这个录音上,那看看看看提没提交。不着看啊。
15:01
你们进去进去也行。进去这是照片信息啊,下下下下。降价。看,这里面有fire啊,有leave。这是归档文件照这是吧。提交的信息有很多,抓不抓?Getr,还有drop DR。提交下。这边是有东西了,刚才说一点创,这个是创建D吧,对。阿健,再进来。我在想,在想。还是判断你这个价有没有,其实你要在集群上的时候,这地方就有了啊,目前是本地他能找到,他不需要啊,所以说都跨过去了啊。这是本地和集群的一个区别。下在这块呢,又创建了进一步啊。把这个路径呢。把这个名称创建出来了。在。
16:02
的下下。这一下啊,这下过了哈,正好把这个过了,这个下回再打蹲点,这里面呢,就是right please。写你的所有的切片信息。然后提交到这个路径上,那你看这里面它有这么几个文件上面这个点开头的是都是隐藏文件上。其实都是3RC1及安全校验,那这个叫job点。切片信息就在这儿了啊,那这个呢,是这个切片的一些元数据信息啊,我打开。看一下能不能看懂,大概啥意思。那是不是大概这个是阿PA Li input啊这么一个切片,切片再往后,那这个切片是什么呢。
17:04
在file e盘in input in count hello点。数据他呀。其实这里面如果是你是多个切片的话,这里面会记录多个切片的信息都会在这里面啊,但是你看这是不记录方案够的啊。看不太清啊啊,大概有这么意思,这是虚拟化文件,那再往下走还有信息要提交。向这个男生缓存走。好到这叫job file和sum there,也就说到你的提交目录是吧,我看一看这里面是干啥事进。是白柳啊。L0,然后L流这块写的right叉ML。我走。
18:00
走。快了下来了吧,是不把买了。看到吗?一洗完它之后,这里面多了一个time,以及它的加时校验,大家看吗?它这里是什么?熟悉熟悉。呃。各种属性参数以及它对应的值,看一看。这是属于哪一个文件对吧,那这面是不是参数啊。这个参数是不是参数是十啊。这里面是由你开管整个。所有的。配置信息。每一个属性在哪个文件,每个属性值在哪个文件,它的值是多少啊?都在这个里面给你提交上去了。就在这查到芯片信息啊,其实正常要集群,这里面还有加包啊。这么多机器都提交上去了,好,那继续往下走下下。
19:03
看他什么时候删除的哈。是不是一提交完,是不是提交啊,这不submit me照吧啊,一提交完,你看这里面是不是立刻清除啊,哎,立刻清除哈,其实这里面有一个删除的这个。删除代码,那就可以快速的出来了啊。下来。那至此呢,整个这个萨的这块就提交完了。做完之后呢,下面这块呢,是你提交完成之后啊,他一些打印信息。快速的执行就行了,你执行。那这个代码呢,就执行完了。我们看一下这个结果哈,对不对。
20:01
那啥了?先不告诉你为什么。这是设置了那个。去哈去人就猜测。那这个结果呢,问题是不大的哈,你可以随便打一个。是OK啊。啊。只不过是他把这个结果呢,分到了这个两个文件里面去存了哈。回头再给大家解释啊,为什么两个东西。那这个你把这个这句话除掉啊,因为我这个是调试代码的时候啊,往里写的啊。那这个整个这个过程呢,就是这个源代码的一个提交流程。是不是没记住多少啊。买了多少没关系啊,没关系。接下来啊,替大家总结一下是吧,啊这个呢,是我从这个照提交流程当中啊,提提取出来的一些核心代码,我们可以看一看啊,稍微补录一下。
21:01
第一个呢是wait for没问题吧,从这进的吧。进来之后里面有一个submit submit,其实下面还有一部分是干什么的。提交完成之后,是不是用于这个打印一些信息的,好,那我们最关心的就是它。进到这里面。首先映入我们眼帘的是。那一边。边走一边打吧。结果删掉。首先映入我们眼帘的就是这个wait for complic。然后之后呢,进来进来之后呢,先看到的是三米的啊三米的,然后你往下一下进去。进去之后,前两个你不用关心啊,一个呢是这个判断状态的,一个呢是设置这个新旧API的。
22:00
快速的下。然后呢,就来到这个。啊,就来到这儿。来到这之后,你往下进啊,进到这个地方啊,要注意啊,这个地方也就是说这个创建这个class的时候要稍微注意一下。啊,进到这里面要注意一下这个地方啊,你有一个C。那就class,我们在这里面有一个初始化啊,初始化的地方。全程运行断点是吧,走。来就到这啊,到这个方法里面,到这个方法里面,它就是具体的去创建这个客户端的协议,创建客户端的协议的时候,他会根据你运行的环境去判断你是本地运行还是说是继续运行啊,如果继续运行的话,那这地方创建的是雅N啊,如果目前创建的就是。本地哈下。叫local job啊本地的那这块呢,其实你主要只要记住这个connect连接的时候,它是为了创建判断是雅还是本地。
23:13
比较注意一下就OK,那再往下走,再往下走,这个呢,可以快速出来出。对于你们来说这个。点这个的时候。容易快,一快就下去了啊。挪不到这个关键点哈,那好,这个connect结束之后,下面呢,我们要来到这个啊job也就是。下面的这个方法。那我们快速的可以到这哈,下下。到这时候呢,进啊进来。回来之后往下走。还好。控住了啊,这里面这个是判断这个原来的路径是否存在啊,这个不在这看了啊出。
24:03
到这之后往下走,下下到这个地方,到这个地方呢,是创建这个。路径是吧,组建的时候你可以把这打开了。这个原来的也可以删掉。那在这再放一个是吧。也就是说它下面这个get,那走。往下一走,这边就出现了啊,这边。那你说这这行代码是一个。创建这个给集群提交数据的这么一个路径。那再往下。下这是IP地址的处理啊。啊到这呢,是创建这个job的ID啊也是。这地方获取job ID,并创建这个账路径啊。左下。
25:00
这个路径。我在找。来到这儿,到这儿呢要停了啊,到这呢也是到这个地方啊。比如说拷贝加班到集群啊等等这些信息啊。虽然我们这里没有考虑加班,但是你能看到这里面是有加班的啊,进来。进来之后下啊,这个地方是提交进。这个提交里的信息你能看到。有很多。有file啊,有这啊这。还有这个归档的一些信息啊,还有job件。都在这里面进行一个判断,判断是否存在啊等等。这个D创建了啊,路径创建了。做完之后再往下。出来。
26:06
下。呃,在这块写切片的时候,那这里面呢,就会出现这么多信息啊,切片信息,切片的原数据信息,呃,等我讲完这边源码之后,一会儿呢,我们专门来分析一下它是如何来这个规划这个切片的啊,它是按照什么样的公式来算的啊,一会儿单独来说它。啊好,继续往下走。下。来到这到这呢是right job fair to submit there,也是把这些信息呢,写入到这里面去啊。我可以快速的一下搞定啊。进来吧,进来吧,这块呢是一个L是吧,L6那这块呢,就是写这个XL啊。然后聊完之后直接写成功,那这里面呢,就是整个job运行所有需要的这个配置文件信息都在这儿。
27:07
那再往下。是正常的一个提交了哈。比如说到了这块这块这个切片信息,一会大家详讲,那刚才呢,走到这那这个地方呢,其实就是这个向这个路径上去写这个采访的信息,最后呢,这个地方是提交并访的状态啊。往下。往下走。这地方啊,这地方是不是就删除这个录像的信息啊。已经删掉了。删掉。你看一下这块的状态。它在运行的时候,是不是将这个状态制成了。软啊。
28:04
这源码特别全啊。哎,到这了,到这之后你稍微往下,那当前的这个状态呢,就制成了running啊。他如果是专家的话,最开始的合法性校验的时候,在这里面是不是就会给他抛异常啊。看你要不是你要是running的话,它是不是就等于这个。啊,而且这个集群还等于公的话,它是不是就报一个那个状态是异常啊。比如说你这块running,而且你这还没有。那他一定抛一个job in状态啊,这个状态呢,But't attempt。别说呢,你这个进程正在跑着,但是呢,你这个class这个对象又没有。那就是幽灵了是吧,你一定你这个状态出了问题啊,这说。他会给你跑一趟。好,快速跑完。结束了啊,那这个呢,就是整个这个代码的一个过程哈,从那个整体上去给大家讲的,如果说你再想详细的去看某一个细节,那你需要再深入的去。
29:01
去写哈,其实这个代码呢,你像还多这个代码是。是经历过十多年了是吧,啊十多年的时间啊,然后呢,应该是无数的大神啊,来不断的优化优化,优化优化成现在这种状态。啊,他会考虑的事情会非常非常之多,并不是我们简单的想象的这东西啊,就是提交一下,把这东西啊,一给你这个集群,你上传就完事了啊并不是这样,他教的东西是特别特别多的。那是不是你要把所有东西每一行我都研究透透透透透透的啊,估计。是活不了那么长时间。每天是吧,每天我研究这个,呃,十几行代码啊,研究到这个老的时候,估计研。其实也没有必要啊,主要是一些核心代码,我们能那个说的清楚啊,而且呢,能简单读,读一读的时候呢,能往下走一走就差不多啊。面试的时候,你能把。哎,我跟你摘出了这些。搞定就已经很牛了,那足够证明你看过源码是吧?啊精通源码。
30:05
啊,至少是看过是吧,啊,看过一会我再告诉你们哪些代码啊,你让他你跟他说出之后,他会觉得你真的看。在下面呢。这个啊,切片的机制啊,切片的机制的时候啊,深入的给大家说一下源码啊。行,那这个呢,就是这个源码,那最终的结论你看一下啊,提交源码的流程解析,你可以稍微回顾一下,用这种方式。各种角度哈,全方位的给大家展示。Job wait for。这前面这个驱动代码不说了啊,往下走,首先进入的是。密的。杀me之后啊叫job meter提交,提交的时候,其实这里是一个呃。那个连接那个,他是问你连接哪一个。协议那一种呢,是logo专家啊。内容呢,其实是雅恩。
31:02
点哪一个。好,那这个判断好之后,下面呢,就开始创建这个提交资源的路径啊,分本地的和HTS的啊。是不一样的哈,呃,你想想你在本地的,你放在这个纸板上行了,那要是这个集群上的时候,那是一定在HDFS上开辟一个路径,这样呢,这个集群的所有成员才能找得到啊。那之后呢,这个路径创建完之后,同时它还要为每一个job分配一个ID啊,分配一个ID啊。保证这个基金上的job的唯一性。之后呢,就拼接成。这个全的路径,也就是说前面这个是他。后面呢,是根据你那个照ID啊。根据它去创建下一级路径。之后。会调用这个叫呃,File input getli获取切片信息。这个是一个气垫啊,也就是灶啊,Li。
32:02
啊,获取到它。嗯,那这个切片信息呢,他要写到你刚才这个照吧,目镜下啊,怎。大家往下。还有你这个job相关的差脉络信息啊,也要写入到这个下。也写到。之后呢,如果你是集群的话,那这块呢,其实还有造的价包啊,这个价包呢,就要写到列牌上啊,这块呢要注意啊。比如说最终我们提交的信息切片差卖漏。记录提交的时候有这么三个信息。我在后面的时候会问啊,包括这个呃。呃,叙述MAP6这个原理的时候,那这块呢,是要说的界面XML怎么。这是整个job的一个编码啊。
我来说两句