00:00
好,接下来呢,我们来详细的看一下这个切片它到底怎么切的对吧?嗯,那这个输出路径啊,我们改一下改成。八八啊好,那下面我们继续第八个运行右键第八个周。对吧,哎,进入到这,进入到这儿之后啊,现在呢,我们就可以快速往下走了,因为我们的断点上次是不是没有三呢?哎,你定器是不是进到这上位,然后再走。之后呢,进入到这个新旧API的一个,呃,兼容性问题解决,再往下下面呢是connect,比如说它网络连接相关的一个处理。往右啊好。账下前面已经讲过了,这块我就快速说了啊,那往下走,这是呃,还是创建那个客户端,比如说本地模式还是延安模式,继续找,这是初始化里面相关信息出来。再出来再出来好好行,现在网络这个连接已经处理完了,那接下来呢,就是正常的代码提交,那提交之前他要做三件事对吧,一个是加包插盘L,还有一个是切片信息。
01:05
进进来之后第一步呢,是进行输出路径的一个校验,那输出路径呢,首先呢,你这个output路径这个参数必须要有,那其次呢,你有的话是不允许提前创建。啥意思啊,就是你这个word count。然后下划线input对吧,Input这个路径,然后out put路径,那这个out put路径得有啊,你这你这个参数得给输进去,因为这个word count它是必须得有输入路径,输出路径,那同时这个输出路径还不能提前在物理环境上提前创建好啊,这个校验啊。那再往下往下走。继续。哎,这是内部的一个校验,校验之后呢,来到这个位置向。这个呢是创建一个路径,临时路径,那临时路径我们也找一下吧。嗨,度方。找到啊。
02:01
嗯,这时路径的是hideop。然后map right sta。1269269。1269是这个吧,哎,进来。行,那在这个地方啊,等待一会儿呢,我们要用一下哈,要用一下这个路径,那继续往下走,快速走。直接全数运行,那现在呢,运行到呢,是一个获取新job的ID,对吧,创建一个job ID,每一个job都有自己独一无二的ID,之后呢,这是拼接路径继续。下面呢是提交,哎,如果你是集群模式的话,会提交这个价包,那本地模式呢,是没有,那继续走,走到这,哎走到这一定要停了啊,不要往下走了,这针叫right split。就是说控制切片相关信息,那好一定要进去啊进去。进去之后在这个位置打个点。往下走走,诶到这这是新API对吧,啊新的API这种处理方式right new spli。
03:00
进去。进去之后啊,我得打个断点。在这打过断点,在这儿打个断点好往下走。就到这叫input get please。进去。哎,进去进去之后啊,你看啊,你看我今当前是什么。叫file input是它吧,对吧?哎,在这个类里面了啊,跳到这了,那跳到这里面说它的一个get方法,那这个我给你看一下。是它对吧,它呢是继承了这个file,呃,Format,那怎么看它的相关的这个实现类呢,CTRL加F啊,这是它的方法啊,它的实现类有可能。放这个吧,CTRLH。CTRCTRLH里面,你看这个input form下它有多少个实像类呢?有DB数据库相关的,还有呢,File input,你看file input下面有几个这个实现类有online。
04:02
之前有说过是按行进行切割,还有默认的就是test input,诶,我们当前这个源码啊,默认走的就是这个test input这种切片按行切,那后面我们还要学的是这个combine file input当中的combine test input。哎,把多个小文件放在一起统一进行切片啊,是这个,那下面还有这个k value tma,那这个呢,呃,它和它呀,以前我们都讲过,那后来呢,其实在企业里面用的不是特别多,我们就给删掉了啊,我们在开读2.7.2那个版本里面视频啊,是讲过哈。那后面呢,还有这个single啊input,那本次课呢,我们其实只讲这个test input和combine test input啊这么两个重要的版本啊,现在了解一下它们之间的一个继承关系,那之后呢,往下轴。还是回到我们这个代码这个地方。到这到这啊啊,这也是get的方法对吧,来往下看走。
05:01
走走完一行之后,你看这个参数很重要,它获取到的一个mini size是一,那这个一怎么来的,它首先呢是获取它对吧?哎,看看它是几。它是一吧,哎,它是一,那如果它是一的话,那看一下它呗,因为他们两个之间取最大值吗。你看一下他是几。进来之后说它返回的是获取,它如果获取不到,返回的是一,那它是多少呢?进来进来它的值是由这个参数来决定,那这个参数去哪里去找,去我们的map read before。对吧,哎,来这里面参数去找M6的,那它默认的值是零,好,那它获取的是零。退回。比如说这里面获取的值是零,那你零的话再往回走。你是零,它是一,它们两个取最大的,那我取多少是不是就是一啊,哎,Mini size是一,那下面呢,我取这个马size。
06:06
Mark size呢是一个,诶他说没没获到,哎,没获取到,那你看一下为什么没获取到呢?它是获取它对吧?哎获取这个值,那这个值它又是多少呢。他这参数。这个参数呢,在map reduce这里面找,你发现你找不到这个值对吧,它如果说找不到,找不到对应这个参数,它会返回多少。返回的就是浪的最大值。啊,返回浪的最大值,那这个值呢,你就认为它是一个非常非常大的值就行了,那好,那这里面它返回的是一,呃,返回一个是浪的最大值,给了mark size mini size是个一,这两个值要记住哈,后面要用,那再往下走。下面哎,是不是S默认等于零啊,这是定义变量啊,往下走下面走好,下面呢,它开始循环遍历你输入文件的个数。
07:04
那你看新债遍历出来之后,发现你输入的文件只有一个,是一个吧,因为我们这里面是input input word只有一个hello.t,那就是一个文件。OK,那就一个,你要是多个文件的话,它都会便利,这就是为什么有的时候啊,我们一个文件夹下放置多个文件,他也能够进行处理啊,就在这哈。那往下那下面呢,往下走,它是一个一个文件的处理它的切片啊,进一步这也能反映反映出一个事儿,就说它的切片控制呢,是按照文件进行单独切片的,比如说每一个文件单独切片,对吧,你看我这里面进来的,进来一个,我处理一个切片,然后再循环下一次,再处理下一个文件的切片啊,所以说它不是统一切的啊。嗯,往下走说这个呢是A啊。当前文件在哪呢?在这个input input这个路径下。再往下,那它的长度是多少?哎,长度已经获取到了,长度是60,那这个输入文件。
08:03
看过吧?给你找一下。地盘。Input word input word就它吧,哎,它的大小是多少呢?嗯,这里面显示是1KB啊,嗯。这里面这些内容啊,啊是这个60啊,总共的长度是60。嗯,这里面机器算的肯定是不错的哈,那长度是60,那往下走。往下找。往下走走,走到哪呢,我看看啊。走到这,好进来了,这个很关键啊,这里面有一个isliable,啥意思呢?这个文件是否支持切割?举个例子,如果你前面的输入的这个文件内容是一个T。那我切多少片?你说这简单的,按照你的切片规则去切就行了。但是我告诉你,如果这个文件不可切割,不让你去切,它是一个整体。
09:06
那你就切割不了,那你这个你不管你是一个T还是两个T,最终它只能切一个片就一片,你就说你未来只能开启一个麦来处理。那什么场景会出现这种情况呢?后面我们会学一个叫压缩。比如把一个文件进行压缩,如果这种压缩算法它不支持切片。那么它就只能输出一个ma,那后面呢,我们会给大家说啊,并不是所有的文件都支持切片,那当然这个默认那个test啊,T这种是支持切片。那知识切片往下走呗,好对吧,哎,知识切片进来,进来之后往下看好诶现在呢,是获取这个块大小。块大小。同学说了,那应该是128兆啊啊,128兆一块吗?海哥已经说说了很多遍了,哎,但是注意啊,我们当前这个代码是什么模式下运行,是不是本地模式啊。
10:00
本地模式,他认为你的集群资源不是那么特别充足啊,就是一个调试,那么它的块大小呢,给你设置为32兆,也说这个33554432。它的值呢是32兆,那我们来算一下啊,看一下算一下是不是。叫33554432,你除以一个1024等于它,你再除以一个1024。对吧,哎,这就是32兆啊,这后面会给大家整理这个块大小,也是后面会有1.s大小,2.s块大小,3.s块大小,还有呢,本地模式。呃,集群模式以及呢,对应的企业开发里面对应的块大小分别是什么啊,都会给大家去说啊,不要着急,那先往下找啊,下面那这个呢,就是这个文件,它的切片就是它。你说切片的大小也是32兆,怎么来的,是不是跟这个公式有关系啊,那我们进到这个公式里面看一下啊。
11:00
这里面传进来一个block size,一个mini size,一个呢是mark size,那回顾一下mini size是等于1MARK size呢是long的最大值,Block size呢是32兆,对吧?好进去看一下啊。那进来之后,首先他执行的是这个代码,那这个代码先算在后面这个。对吧,是这么算的吧,那它们取值的话,取最小的max size。是浪的最大值block size呢是32兆,Mini取谁取32兆,OK,那32兆得到之后,这是32兆。那mini size是一,它们两个之间取最大的,那是不是结果就是32兆?哎,那32兆不就切片大小就等于块大小吗?那咱们之前说的块大小等于切片大小,就是这么来的。那回来回来之后,接下来我们继续往下走,往下走,走到这儿之后,这是非常精彩的一个地方。现在啊,我们当前这个长度呢,是60对吧,60呢,他让你去除以这个切片,那我切片呢是32兆。
12:03
我现在是60除以,它肯定除不开对吧,应该是这个不够一吧,对吧?啊不够一的话,那就正常的去接就行了,但是我思考给大家思考的问题,如果我是30.1兆呢。哎,不是陕西的,我是32.1兆呢。那我切割几片呢?你说你60没问题,你说不够不够32到我按按一来切没问题,那我就32.1呢。人家说那海哥你应该切两片呢,对吧,你32到一片,然后这个0.11片嘛。那你觉得这样合适吗?如果说我切我32.1兆,我切割成两片的话,就会形成32兆一块,0.11兆一块,按这个类似这个呢显示。不合适是吧,哎不合适,那你看它这怎么玩的,看这个值啊,我除以完之后,它大于多少呢。这个值是。1.1倍。
13:00
啊,1.1倍,也就是说如果我除以完之后,它大于1.1倍。那我就会切割成两片,对吧,我我把这个正常这个刨掉,如果它小于1.1倍,会出现什么情况,小于1.1倍,那我就没有必要把它切割成两块。对吧,切割成两块反而产生一个小文件,不利有后期的运算。啊,是这个意思哈。好,那往下走啊,如果说呢是正常能除开,那没毛病,但是呢,如果说它是小于1.1倍,那我按一片来走走,对吧,往下走。呃,后面呢这块呢,是把这个你剩下的内容啊,进行一个啊减法处理,如果你大于32兆之后啊,它把你这个比如说啊,你是呃50兆啊50兆的话,它就会减掉你正常的32兆,那还剩多少,还剩18兆,18兆之后,然后你再循环便利啊,再进一根进行除以这个32,看看它是否大于这个1.1倍啊这样反复的进行一个切割啊。
14:00
举个例子吧,100兆对吧?啊,100兆那100兆你首先这个减掉32剩多少,减掉32剩68对吧?哎,先拿掉一个一片了,拿走一片那68的你再除以32,嗯,再减一个32吧,再减一个32多少啊。32是。等于。36对吧,哎,32啊等于36,那36的话,嗯,那它就会干嘛,36它就会除以32兆,看它是否大于1.1倍,36除以32啊,一三的三十二四十。40呢一诶大于大于1.1倍是吧?哎,大于1.1倍呢,它就还得切,那就36再减32是不是变成四兆啊啊四兆那就是切出三片,再加一个四兆,那就是四片。这么切能懂吗?行,那这个是继续往下走啊,这是这块的一个切片逻辑,非常重要啊,人家面试官问你,如你看没看过源码,怎么能证明这个1.1倍就是一个非常好的证明你看过源码啊。
15:03
往下找,往下。走,你看它又变了一只这个file嘛,你要有多个file的话,它会再次给你切啊,那后面这个就是收尾工作了哈,走出来对吧,刚才是切片规则,切完片之后它有没有生成切片文件呢?看一下这里面有没有没有,那什么时候有的呢?往下看好往下看到了这行。好了吗?看这个地址吗?对吧,他要往这个地址里面写东西了,写什么内容呢?就要写的就是对应的这个切片信息,走一下再来一下好到了。看到吗?哎,比如说上面呢,是把这个逻辑啊已经切好了,那这块呢,是真正的让它形成这个切片文件。这是这个过程,那这个过程那后面我们就出来啊,正常往下走就行了,那整个这个切片原理就结束了,那后续呢,跟我们之前提交流程那块代码是一样的啊,这个是拆卖的信息对吧。
16:01
嗯,现在插描的信息也有了,有了之后呢,再往下走,这是提交,提交这个状态。状态,状态之后出来。走。好哎,改变这个状态,让它变成running执行。执行完毕之后,这呢是监控这个任务运行情况,并打印相关信息,那这一执行这里面的内容就没了。走。对吧,哎,你看这不就是正常这套流程吗?嗯,好,嗯,结束了啊。不是特别难啊,不是特别难,那这里面稍微总结一下哪些代码能让你觉得看过相关的这个源码对吧?哎,看过相关源码,那看过相关源码的话呢,我们来这里面哈,切片就是这个切片原理当中有这么几个点需要注意一下,首先第一个点呢,是这块。啊,也就是说它的切片原则啊,是按照每一个文件单独切片,对吧,这件事要知道那再来。
17:03
再来,来到这块。它的切片取决于什么?它的切片取决于一个呢是mini size,还有一个是ma size,另一个呢是块大小,那经过运算之后,块的默认大小是32兆,所以说我们取的是32兆,那我们能不能来调整这个块大小呢?以至于嗯,不,块大小能不能调,不能告诉你,因为这个块啊,它是实实在在存里在存储在物理。地址上的一个数据,这个块呢是不能改变的,但是这个切片值能不能改变呢?能改变,因为我这里面除了你这个块大小之外,我是不是还有这两个值啊。那我控制这两个值的大小,就能够控制你最终返回值的切片值怎么控制,你看啊,我现在这是块是32度。我如果把它设置成max size啊,我设置成31兆。对吧,那我会取的,那我这个mini尼塞是不是31啊,那31,那最终切片大小是不是就是31。
18:04
是这个道理吗?就这么简单,你看31个。好,那同样道理,那如果说啊,你这个里面是32。哎,我这里面没有改啊,没有改,那取的还是32,我把它改了mini size,我改成40张。那我最终取得,那我最终这个切面大小是不是就是实啊。能感受到了吗?也就是说我想调大这个切片,我就给它。哎,我可以把它改成128兆可以吧,那256,那最终数都取它,那我想把这个切片调小,那你这是32,我调小我调成十兆。它调成十,那我说不取十,十跟它比的话,一,那我是不是取十啊。哎,就这么来来控制的哈,好回来,这是第二个点,比如说切片的一个公式,那第三个点就是它。这个1.1倍的事儿。那你想你默认的块这个切片规则,比如说本地32兆,那你就问一下自己,我32.1兆,我到底要切几片?
19:03
那实际结果呢,它是切一片。啊切一片就行了啊,方便这个避免产生大量这个小文件计算是吧,好行,那这几个点啊,就能代表你看过相关的源码。
我来说两句