00:00
呃,那此Co呢,咱们刚才给大家说了啊,它能够实现关型数据库和啊咱们海多和生态啊之间的这个数据的双向传输对吧?啊双向传输,呃,然后大再分析分析啊,我们现在要做的事是从把买S的数据导到HTS对吧?所以咱其实只用一个单向的就够了,对吧?就是诶关心数据库到海多啊那所以说那一会咱们去学习的时候呢,我们现在诶重点先学谁呀,先学那个。是不是就是引泡呀,那就是导导入,先重点学导入,那导出咱们会不会用到呢。会不会用到啊,哎,会用,但是咱们现在不用,什么时候用呢?我们做完数仓之后是不会用啊,大家回忆一下在哪会用到啊,哎,对,可视化的时候会用啊,前天讲了啊输仓,比如说我这个分五层啊,最后呢,得到结果,结果是不是要做可视化展示啊,但是搞展示一般情况下咱们可视化的系统呢,不会直接对接have怎么办?对接啊,关系数据库,比如说买SQL,那咱们是不是需要把咱们数仓里边计算出来的最终的结果是不是得导到MYSQL里边啊对不对,那这时候咱就会用到谁,就会用到sscriptop的导出功能啊,那所以说咱sscriptop你要学的话,实际上得学一个导入,学一个导出啊,导出咱现在用不到啊,所以现在还不学,学了,到时候大家也得忘对吧?啊,所以语咱就不学了,到时候用的时候再学这个导出,那现在我们重点就学这个导入,重点学导入啊。
01:22
啊,专写导入,然现给大家说一下啊,我们这个SCO导入导出的时候呢,还是有一点区别的啊,那咱们scoop导入的时候,我们支持将MYSQL里边或是关系数据库里边的一张表导到HDFS一个路径,或者是直接导到还有的一张表里,或者是直接导到h base账表里,这是咱们导入的时候啊,Import I p里导入我是支持的,但是注意导出的时候呢啊,也是从从海度播往MYSQL里导了,对吧,这个时候它就支持不了这么多功能了,导出的时候只支持将HDFS的一个路径上面的只是HTS啊,只支持将HDFS上面的一个路径下面的文件导出到麦SL的一张表里。
02:11
能理解吧啊,这是导入和导出的这个区别啊,导入导出的区别啊,咱们把这点得搞清楚,行,那咱们现在重点学习导入啊,那导入的时候虽然咱们支持到HTS到hi到HV啊,但实际上我们用的更多的呢,还是到HTS,因为到了HTS啊,我这个数据到底想让去哪,我非常的灵活啊,我就可以使用咱们的呃,Hfs的一些操作去管理这个数据了啊,是这样的,所以一般情况下咱们还是把数据导到HTFS上更多一些啊,咱们这个采集项目呢,也是把它放到了HTS,那现在咱们重点来学一下怎么将数据导到hfs啊,好,那现在我们就开始学习。嗯,啊,我们打开一个脚本吧,打开一个文件吧,啊,我们给它切换成这个该shell,那其实咱们说白了使用库就是敲这个shell命令对吧,然后传参啊然那第一步我们首先啊,比如先进到子库的那个根目录,咱们执行一个诶B子库吧,那变子库后边咱们应该传一个什么东西呢。
03:11
传什么,我们现在要导入对吧?传啥引号的呗,对不对,引牌的,然后后边的咱们是不是还得传,诶那个什么数据库的连接呀,那是必须得传的啊现咱们分析分析,我使用S库op,哎,咱们要传的参大致就是这两个,一个是数据来自于哪儿,另一个呢是数据你要给它导到导到哪去对吧?啊从哪来到哪去,把这个配好就行了,那从哪来从MYSQ来,从MYQ来呢?你就得把那个MYSQL的连接给它写上,那所以是不是还得再传什么杠杠connect con ne,然后后边的JTBC,然后买S,然后后边呢,啊什么这个双斜线啊,海动管102然冒号这个3306,哎,但是你这个刚才咱们是测试查看所有库,所以链接就这么写,但是我现在要干啥,我要要导数据了,对吧,你导出去,你是不是得指明一个导哪个库里边的哪些表啊,那库在哪指令,库是不是在咱们ul里边指令啊,那就比如说g ma这是我要导的库,后边呢,还得在杠杠,诶什么这个username。
04:11
诶,大家会发现啊,这么写虽然行,但是好像呃,这个就是不太好,不太好看,对吧,所有东西全堆在一行里边了啊这个效果不好,那咱们可以借助一个什么东西呢?借助一个我们shell当中的啊,叫做换行符的一个东西啊什么换行符呢?就是一个斜线反斜杠就是换行符啊,你可以在这儿呢,挑一个换行符,然后直接回车。啊,直接回车,然后这样呢,我也可以再敲一个换行符,然后再敲一个回车啊,虽然咱们现在看起来是什么,看起来我这个数据是不是变到多行里边来了呀,但实际上你把这个东西放到我们的商务客户端下边去执行的时候,它会把什么呀,会把这个换行符给你替换掉,然后怎么办呢?相当于再把诶这个东西给你拼接成一行。能理解吧,啊,这有换行符之后呢,我们相当于就是咱们写起来哎,更更直观一些,更好看一些,但是最终运行呢,还是按照一行去运行的,能理解吧,啊是这样,这是换行符,那大家写这个换行符的时候呢,那需要有一个这样的注意事项啊,一定得注意一下,换行符后边不要有任何字符。
05:15
啊,就是换完符后就得是回车才行,你假如加空格,诶,你看我这个,呃,这个拉还挺好,它能提示咱们这个语法错误对吧?啊,因为我设成这个shell shell了嘛,啊,你加了空格,那这个它就不是换行符了啊,这会就报错了啊,所以这个空格是不能有的,而且还得注意啊,你这换行符前边它必须得有一个空格。啊,为什么必须得有一个呢?假如说没有空格,我就这么写对不对,虽然语法没问题,但是一会它解析的时候呢,是不是直接直连起来了呀,那相当于这这个东西变成一个参数了,那这个死库就识别不了了,能理解吧?那所以这个写欢符的时候呢,大家一定得注意一下啊,就是画符前边得有空格,后边呢啥的东西也不能有啊,把这个记住就行了啊好,那咱们就接着往下写就行了啊school inport,然后connect没问题,然后user nameme,咱们接着写后边的root啊,空格换行符,然后杠杠错了,PA s swrd,空格123456,然后空格换行符啊,这个得记住啊,行,那咱们再接着往下走,现在相当于配置好了我们这个呃,数据库的连接了,那完了之后咱需要干什么呢?是不是得指明一下你要导的表是哪个呀,对不对,那导的哪张表啊啊,那怎么指明呢?啊,一个参数叫做杠杠table不啊生么一个表名就行了,比如说我现在要导的是谁想比如说我现在想导的是这个,咱们随便找一张表。
06:36
咱们找谁看比较合适啊,跟到谁啊嗯,哎,比如说导user引O对吧,那我们就导它,那那直接写这个库里边表明一下user下划线引缝啊,然后注意空格,然后诶反斜杠。啊,这相当于就告诉他我要导哪张表了,但是这个大家得注意啊,你要这么写的话,那他一会导的时候导的应该是什么。是不是导的应该是全表啊,对不对,可能有的情况下我不需要导全表,我只需要导其中的某几行,或者是导其中的某几列,对吧?啊,某几行我面那这个怎么去声明呢?哎,再声明以下两个参数型的,嗯,那首先如果是某吉列那怎么办?杠杠Co ns啊杠columns啊,就是某取列,比如我现在只想导ID这一列,然后呢,还想导一个什么列呀?呃,来看一下这有一个,呃,咱们导一个login name嘛啊,还想导一个login name啊,Log gn lo in name对不对,是不是就这么写啊,就这么写啊,完了之后呢,再往下写,假如我再有七大列,你就以包泡风格接着往下写就行了啊,就这么写就行啊,而这个大家要注意我这需不需要加引号呢?
07:43
需不需要电影号啊?我好像俩字段,那用不用加引号呢。用不用那得怎么去看啊,我们shell当这是不是就相当于一个shell,一个shell shell命令啊,对吧,那shell当中我要不要加引号是由什么决定的。那得看啊,得看什么,得看你传的这个东西啊,它中间有没有空格,如果有空格,假如说我这呢是有空格的,然后呢,我还想把这个东西呢,当成一个整体啊,相当于一个整体,那这时候你就得加啥,哎,就得加引号啊,但是我现在中间有空格吗?没有,我是不是用逗号直接连起来呀,那这用加吗?那那就不用加啊,这是大家得注意的啊,那这个没没问题,不用加,直接空格,然后反线就行,然后咱们再往下,现在相当于声明的有几列了,对吧?那是不是还得有哪些行啊,那行怎么办?
08:31
行,正常情况下你写S怎么去决定有哪些行啊,是不是写where过理条件呀,对不对,那这边也同样有一个这样的参数杠杠,哎,Where-where,那比如说我现在呢,只想获取某一部分数据,那咱们这看一下啊,我们就用就ID去过滤吧啊ID咱们比如说想获取ID大于等于十,小于等于30的,那你知道怎么写,那就是ID啊然后呢啊比如说哎,大于等于啊十,然后呢,呃,And ID啊这个小于等于30啊相等于30,哎哎,你看这这回我们这个正常是不是就相当于是你的Y过理条件怎么写这就怎么写呀,啊这这语法就是这个,哎,但是这回你发现啊,咱们这个东西。
09:17
是不是应该是应该是当一个整体去传啊,那但是它中间有啥有空格,那这时候得怎么办,得加引号啊,那加引号的时候又得考虑问题,我加单引还是双引呢。单眼还是双眼啊啊,单眼还是双引啊,首先得考虑一个问题啊,就是说啊,你这个参数当中啊,有没有引用外部的变量。对不对,那假如说我这里边呢,我这边引了一个变量啊,这个假如说我这个30没有直接写死怎么样啊,假如说我在这个山药前面啊,我声明了一个这样的一个一个一个变量,比如说叫什么呀,叫做max ID啊,比如说我让它等于30。对不对,我是不是生明一个这样变量啊,然后我想干什么,我现在不写参十,我不写死我怎么了,我要引用上面这个诶参数,那你这是不是就得是怎么写,就得是Dollar啊,然后那个max ID是不是得这么去引用啊,对不对啊,那如果说这种情况下,你这需要加什么引号是单元双引啊对,没错,那就得是双引,因为是不是双引当中才会解析这里边的变量了,对不对,那假如说我这儿没有这样的要求,我就是直接一个普通的一个数字啊30啊,那这时候呢,你加什么啊,其对确实都行啊都行,因为你这里边也不需要解析变量啊,那单眼是不会解析变量的,那说到引要解析它也没有啊对吧?那所以你这用单眼双眼都可以啊,这注意的也就是咱们总结一下啊,双眼会解析这个字符串里边的变量是要变量,那单眼呢,是会原样显示不解析的啊,这个得记住啊,啊,这是VRV的条件,那现在我们相当于已经配置好了,我的数据从哪来的啊,从什么数据都配好了,完之后咱们接着配,往下配啊,再往。
10:57
下是不是就得配配配什么呢?配往哪去了对吧?弯区肯定是往H上去啊,那这边咱们首先来一个什么东西,得来一个T,他给的DR,诶诶大家看着我这个颜色不对,对吧,这咋回事。
11:13
啊,没写欢呼啊。好杠刚target DR,这就是目标路径,这个目标路径呢,指的就是数据传到HDFS的哪个路径,那比如说咱这随便写一个,比如说我传到一个叫做test的这样的一个路径上啊,写就行了啊,然后大家注意啊,这里边你看我正常一个HDFS路径应该什么样的,还是HDFS冒号双线S1028020对不对,但咱这是不是也没写那个东西啊,这是为什么?因为咱是不是给他配了海子home了呀,他能找到那些配置文件,所以他能找到啊是这样的,那这边直接简写就可以,那路径写完了,然后咱们空格反斜线,然后再往下走。然后跟这个目标路径相关的呢,还有一个参数给大家说一下,叫做delete,它给的D,然后杠TT,然后它给的D啊那这个参数呢,它的作用是什么?给大家解释一下啊,这个作用它的这个参数它的作用就是啊,如果目标路径存在,这就是目标路径对吧?啊,那我就给你删除。
12:12
啊,啥意思啊?大家想想子库的底层是啥?MA6那MAP6我们有一个大的特点啊,如果你的输出路径存在,是不是任务直接报错呀,对不对,他也不例外啊,他也不例外啊,如果输路径存在,他也肯定会报错的啊,然后这边呢,他相当给我们提供了一个这样的参数啊,如果他会先叫下路径存不存在,如果存在我会先把它诶删除啊先把删除啊,那这个参数呢,大家使用的时候得得小心一点啊,要小心点呃,你这个目目标输出路径,你必须得确保什么确保这个路径啊啊,它是你自己创建的一个这个专门用来存这个数据的一个路径,不要指向别人的那个什么have的表的一个路径什么的,不要乱指,乱指后你是不是有可能把人家数据给它覆盖掉啊,对不对啊,那这是大家得注意的地方啊,注意的地方呃,那这个参数呢,我们实际上正常情况咱们还真需要啊,就是在确保你这个路径没问题的情况下啊,确保你这个路径没问题的情况下啊,咱们这个参数也需要给它保留下来。
13:11
啊,什么意思啊,你保留下来之后,那就能够保证什么呀,就能够保证咱们这个scoop走数据任务的一个啊,就是说说的高大上一点啊,就是相当是密等性啊,什么叫密等性啊,啊就是一个任务重复执行多次,但最终结果和只执行一遍的效果是一样的,对吧?啊就是所谓的密等性啊,那你假如说我这个数据,嗯,我导导的时候,我比如说导到一半啊,导到一半,导到一半的时候,假如说我这个任务失败了,失败假如说咱们那个目标路径里边是不是有可能会有一些残余啊,对吧,那他OK,我一会儿怎么我再重新,我是因为失败了,我是不是需要重新执行,重新执行OK,我先把原来路径删掉,这个任务再重新跑,对不对,这样一来是不是咱们任务可重复执行啊,相当于是是不论执行多少遍,最终结果都一样啊,那所以说诶,咱们给他留了行了,但是前提得确保你这个路径是没问题的啊,不不,那个路径不能把别人的路径覆盖掉啊,这个得注意行,这是这个关于delete它给的DR。
14:09
行,那其实基本上啊,我们配到这一步啊,基本上配到这一步啊,咱们这些呃,基本基本的字段就配完了啊,从哪来到哪去,是不是都搞定了啊,但是这下边呢,我们还有一些其他的一些优化相关的参数,还有一些优化相关的参数啊,那比如说谁呢?比如说第一个。杠杠什么东西啊,杠杠,哎,卖。那然后ma PP。哎,Maps,那maps啊,这个什么意思啊,Mapp,呃,Map那是maps还是maps啊,这个参数我得看一下,这我还真记不清了啊,这个参数太多了啊,我看一下啊,咱们找一下那个死库的参数,这边还没有,咱们直接去那个下边的脚本里看啊呃,叫做nu姆maps没错对吧?啊,那maps没错啊,这个还还记记,诶,就是拼写刚才错了对吧?啊,那maps双撇P啊,那这个参数指的是什么呢?指的就是咱们这个,诶导数据的时候呢,我们这个map的个数啊,Map的个数,诶,那大想想啊,我们之前大家在学mmr的时候,Map的个数是怎么指定怎么决定的。
15:21
咱们是不是根据切片决定的呀,对不对,那怎么在这儿,我们这个map好像是自己指定似的,对吧?啊,我指定一个二,那就是俩麦,哎,这是咋回事呢。哎,不知道了对吧,感觉跟前面这个理论有点这个冲突了是吧,但其实这个也不冲突啊,咱们得知道啊,这个分辨策略是谁决定的。是input ma决定的,就是那咱们前在学的是什么学的是,呃那个什么test file input麦对吧?啊那那种input ma的,我那个分片确实根据,呃,我我这个我这个这个map的个数是怎么来的,呃,我不是啊重新说啊,咱们重新说啊,咱们前面讲过map的个数啊,是跟分片的,那是跟分片数决定的对不对,这个一点份没有,这个是对的啊,是对的啊,那分片关键是分片策略是由谁决定的啊,分片策略是由音符妥麦决定的。
16:12
啊,Format决定的啊,那咱们现在这个库,它的input format是是咱们前面学的什么test fail input format吗?不是啊,这是他自己定义的,哎,这个input format啊,那他自己定义的这个input format,它的分片策略是什么呢?啊,就是根据你这传的这个参数去决定的啊,你这传几个值你传几啊,那它就分几个片。啊,能理解吧,哎,你传二那它就分两片,你传三那它就分三个片对不对,那是不是你分几个片我就有几个麦呀,对不?所以最终这儿相当于你配的这个值,那就是什么?就是它这个map的个数相当于是啊,是这样的,实际上最终这个值啊,呃,其实这个值你直接配的是啥?直接配的是分片的个数啊,分个片我就一个map啊,是这样的啊,那这个应该能理解了,对吧?啊也就是咱们前面学那个理论还是对的啊,就是啊,我的这个map数是由分片数决定的啊,只不过人家S库呢,自定义的input ma了,它的分面规则呢,是由这个值来决定的啊,把它搞清楚就行。
17:17
行,那这个完之后呢,我们再接着往下走啊,那还有一个非常重要的参数啊,哪个参数呢,就是这个叫做杠杠。Field啊,Fields t,哎,Fields termin的Y啊,这个参数其实大家在学have的时候应该比较熟悉啊,我们在have的时候,建表的时候是不是经常要敲一个这样类似这样一个参数啊,对不对啊,建表语句里边就有啊,这个相当于是这个字段之间的分隔符啊,这个为什么要指定呢?你想想啊,MYSQL里边是结构化数据对吧?那你现在要导到HDFS上啊,诶,他们是一个文件对吧?那你怎么保留这个结构呢?哎,用哎分割符分割就行了啊,那所以这呢需要指定一个,哎,Field term by by谁的,咱们一般情况下可以指定一个,比如说杠T啊,杠T啊就可以。
18:05
行,那这个参数也完事了,那他完之后呢,我们还有一个参数需要去给大家说一下啊,还有哪个呢。还有一个这样的形式,叫做死Li。BY叫做spli by啊也是杠杠啊啊,那这个是相当于什么呀?是按照谁进行spli对吧?啊按照谁进行切片,相当于是啊,那给大家解释一下啊,这个首先我们后边要指定的是一个字段啊,是咱们买SQL表里边一个字段,一般情况下咱们这个字段呢,就指定主键就行了啊,一般情况下指定主键就行了啊然后给大家解释一下啊,这个参数它的意义意义是什么,它的作用是什么啊哎,大家认真听。其实这个就是跟我们此库op当中啊,它的那个input form的分片策略相关了啊,这就跟它的诶分片策略相关,那它分片策略到底是什么样的呢?给大家解释一下啊啊你看我们经过刚才的那个什么table column where,哎,经过这几个参数,咱是不是已经诶大致规定下来了,我要导的数据应该是哪部分了呀,对吧,已经规定好了啊,他假如就是这部分数据好,那它的分面策略到底什么样的,是这样的,他会先看你传的这个参数是几,比如说我这传的是几啊,我传的是二对吧?啊,我传12,那我传12相当于是我会分两个片吧,对谁分两片啊,是不是对你买S当中这个数据分两个片啊,对不?这可不是文件了啊,不是单纯的文件了啊,咱们读的是买S里边的一张表,哎,分两片,那这个具体怎么分,哎,它会这么分啊,先看你分几个片,比如分俩,那分俩之后呢,你看这有一个什么,有一个sli by ID对吧?啊,那相当于它会按照这个ID进行分片,那首先它会先。
19:43
出来一个最大的ID啊,求一个max ID啊,最大的比如说就是它,然后呢,再求一个啊最小的ID啊,因为你那是不是规定的一个数据范围啊,一个最大一个最小啊一个最小,然后怎么办呢。然后呢,他会求一下最大最小的相当是一个,呃中间值啊,中间值啊,相当于最大加最小除以二是不是就中间值啊相当于对吧?那取了一个中间值啊,完了之后呢,它会把最小值到中间值分成一个片啊,然后这个片是不是正好对应于一个map呀,对不对,那中间值到最大我再分一个片,那这个呢,相当于对应另一个脉吧。
20:22
啊,那这个分好之后呢,那我这个map就会读取从啊这个ID到中间值,从最小ID到中间值的这部分数据,这个map呢,就会读取从中间值到哎最大ID的这样的一个数据,完之后呢,给它把数据写到咱们最终的路径里边就行了啊实际上它是这样的一个过程啊,这样的一过程啊,啊这是它的这个分辨策略,所以说这个Li by呢,我们通常情况下需要指明谁就指明主见就行了啊,指明主线行了啊,但是其实它这个分辨策略呢,其实也不完美。啊,为什么不完美呢?就它有可能分的不均匀哈,为什么不均匀。因为咱们ID一般都是什么都是都是自增主键对吧?啊自增主键有什么特点。
21:03
假如说我这个最开始就是一对吧,那我把这个一插入,然后再插入,是不是就是二啊,那我假如说把一删了呢。或者我把二删了吧,啊把二删了,把二删了,然后我再插入,再插入这个ID是几啊是三,也就是你这里边它它它有可能这个ID是稀疏的对吧?啊ID是稀疏的,那假如说我前边呃,虽然是最小是一,然后最大,比如说是十吧啊,那可能我这中间值你算出来差不多就是啊现在是五吧,五或者六对吧?啊五或六,那可能我前面啊,从一到五,我可能只有一个三。二跟四被删了对吧,那后边呢,我可能有5678小时啊,那边但这个数据可能不均匀啊,不均匀但其实无所谓啊,这个反正就导个数据的事儿啊,咱们也不用呃搞这么细啊,咱们了解一下这个就行啊行,那这就是咱们死库吧,我们去使用的时候呢,最基础的一个这样的,呃,这个参数咱基本上就配完了,就是这么多,当然了还有一些其他参数,后续我再给大家加啊,还有些东西咱们需要考虑啊,那最基础的就是这么多了啊行,然后再现在来说一下啊,这个map的个数它默认是几个啊,默认四个啊,也就是你这个参数如果不配,那会起四个map能理解吧啊那所以说咱们这里根据根据自己的数据量大小去决定这个map克的个数,那我们现在数据量很少对吧,比如说我先把它设成先把它设成一对吧,我就一个麦吧啊一个,然后现在咱们把这个去执行一下CTRLC,你就直接把它粘出来,放到我们词库这边执行就行了啊那现在我们读的是哪张表,User引fo读的哪哪列呢?ID和column name对吧。
22:36
啊,那ID范围是什么呢?是大于等于十小于等于30的,这一共是多少数据啊。十到30多少条,21条对吧,21条21条,那我们现在是一个map吧,对不对,那现在我们直接回车了啊走你啊,其实如果说你的map个数是一的话啊,那这个用写吗。如果是一是不用写下面这个BY的啊,因为它是不是没有没有切呀,对吧啊,这一就不用写它了啊,那咱们写上也不错啊,那我现在会这走。
23:05
报错了啊,呃,他说这个UN有一个什么东西unre argument,这个spli by不识别对吧?那应该是我多加了个S,可能是,那咱们把这个S给它去掉啊啊去掉这人死不利BY把这个参数太多了,记不住了啊,这个岁数大了啊,不行了,来咱们回撤啊啊,这回就没错了啊。这参数呢,其实也没必要记啊,你就是嗯,就知道有啥就行,然后真记不住了,你就试一下呗,你看这刚才这个错了,把S去掉就行了,或者你去官网查也行啊啊咱们等着跑去已经跑完了对吧?啊,一共跑了这个导了21条数据对吧?那现在数据跑哪去了,应该是跑到我们HDFS这个test测路径里边对吧?那咱们去看一眼啊,打开啊这个海多幺零。
24:01
然后呢,来一个这个9870回车啊,那我们找到test的路径啊,找到T这个对吧?啊点开,然后大家看这是不是有一个success标志啊,这是MR成功的标志,它下边有一个文件点开啊,咱们可以看一下,就是预览一下这个文件啊。打开打开之后呢,你看一下这不是从十到。30啊,这就是我们刚才倒过来的数据,一个ID,一个那个呃,Login name对吧,中间一杠P分隔啊,其实就是这样的一个过程,好,那数据到了hfs,那我是不是就可以想办法再把它导到have当中,咱们去分析了呀,啊是这样的啊好,那这是这种方案,那接下来咱们再演示一个啊,咱们不是刚才说了这个有一个关于切片的东西嘛,对吧?那再看一看它切片策略是不是这样的啊,我现在先来一个map等于,比如说等于二吧啊等于二,那我还往这个路径里导啊,还往那倒的话,呃,那我这个路径需要去删吗?不用要他自己会删对吧?啊那所以咱们直接把那改一下就行,CTRLC,那看一看这个两个map是什么样的效果啊来,咱们走你。
25:05
那刚才一个map,我们生成了有一个文件对吧,那么下俩map,你说我们这个文件数应该是什么样。几个文件。俩map几个文件,诶好像又跟之前学的不一样了,好像咱们之前学的是reduce,有几个就有几个文件,对吧,但是我现在没有reduce,那没我几个文件,我的文件数由什么决定呢?那map决定呗,对吧?啊,你没review refuse,那是不是多个map并行跑啊对吧,这个map完成一个一个文件,这个map map完之后一个文件,那就俩文件呗,俩map就俩文件啊,那咱们刷新一下。你看一个两个对吧,那现在我们看一下这个文件的内容。啊,那第一个呃,我的map是从几到几,是从十到这个19啊十到19,那接下来看下一个,那我们点开这个第二一个啊,这个应该是从呃20~30啊一人一半对吧?啊,因为31条嘛,不可能平均分啊,就是一个人一个人11,呃不是三十一一二十一啊,一个人十条,一个一个人11条啊就这样行,这就是咱们S库的这个导数据的这个基本使用啊就这些啊行,那我把视频录一下。
我来说两句