大数据之Hadoop_MapReduce处理数据内部基本流程

MR处理数据内部基本流程

一.任务切分

1.根据文件的大小,及文件的个数进行任务切分,如:有一个文件200M,还有另一个文件100M,就会先将200M的文件按数据切块(hdfs默认128M,本地默认32M)的原理分成两块,然后这两个文件就会被划分成三个任务,这就叫数据切块,和任务切分

2.任务切分后,就会去找LineRecordReader读取数据, 在LineRecordReader就会使用readLine()读取数据,每次读取一行,每读一行,就会生成一个key(偏移量LongWriable)和一个value(读取到的一行数据Text).然后就会将k,v给到map端

二.map端流程

1.map端有四个方法:map/setup/cleanup/run . 其中map方法每来一组k,v就会执行一次,setup方法在整个任务中只执行一次,在map方法执行之前执行,cleanup也是在整个任务中只执行一次,但是是在map方法之后执行. run方法负责判断是否还有下一个kv传输过来,有就调用一次map方法.

2.map(k,v,context)方法中可以书写我们想执行的逻辑,如:将读取的一行数据进行切割,然后拿到我们想要获取的新的k和v,然后使用context.write(k.v)方法将新的k,v写出去,此方法会在本任务数据未读取完之前一直循环执行,每行数据执行一次.

3.map方法写出去的k,v会去到MapOutputBuffer(缓存区)中,在MapOutputBuffer中有个collect(k,v,partition)方法(收集传输过来的k,v),这里面有一个partition参数(分割)会去调用一个HashPartition组件.

4.HashPartition.getPartition(k,v)就会执行k.hashcode%numberReduceTask(reduce端的任务数量)得到一个区号,将此区号给到partition,此时partition就相当一个区号.

5.MapOutPutBuffer中的collect(k,v,partition)拿到区号后,就会将数据写入到环形缓存区中,环形缓存区就是一个环形数组,然后就会在环形缓存区中放入许多kv数据(除了kv还有元数据),且在环形缓存区中还会采用快排的方式在缓存区内进行按kv的索引进行排序.

6.当环形缓存区的数据写到80%的时候(环形缓存区默认大小100M),就会溢出,此时会使用Spiller(溢出)组件往磁盘中写,且写入磁盘时会按区将数据分开,溢出的次数是至少一次.如果有多次溢出,就使用Merger组件将多次溢出的数据进行归并排序.变成按区划分的完整的数据.然后通过TextOutputFormat将归并后的数据分区写入到本地磁盘(并提供一个http下载服务).

7.其他几个任务可在其他节点上重复并发的运行以上map端的步骤,就会生成三个归并后的分区数据.

三.reduce端

1.reduce端会先从不同的maptask的本地磁盘中拉取属于自己的数据(按区号分开的数据),如果数据在不同的机器上,就会需要走网络,这个过程就叫做shuffle

2.拉取数据的组件为Fecher(抓取器),将不同节点上的数据拉取过来之后,会再次用到Merger组件进行归并排序,并写入到磁盘中.

3.然后会用到GroupingComparator(分组)组件,这个组件会使用compareTo(preK,postK)方法,比较前一个K和后一个k是否相同,如果key相同,就会将相同的key放入到一个迭代器中.

4.然后将key和迭代器交给reduce(k,Iterable<>,context)方法,此方法每来一组数据就会执行一次,在方法中我们可以做聚合操作,生成新的k,v,再使用TextOutputFormat将k,v写出去 context.write(k,v) .可以写到本地磁盘,也可以写到hdfs中,

5.其他的reduce任务重复以上操作即可得到我们想要的数据分析结果.

基本流程图

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值