MR的分⽚机制
分⽚机制
分⽚简介
Hadoop将MapReduce的MapReduce的输⼊数据划分为等长的⼩数据块,
称之为输⼊分⽚(inputSpilt)或者简称“分⽚”Hadoop为为⼀个分⽚构建⼀
个单独的map任务,并由该任务来运⾏⽤户⾃定义的map⽅法,从⽽处理分⽚的每⼀条数据
分⽚⼤⼩的选择
1.拥有许多分⽚,每个分⽚所需时间⼩于整体的时间
2.并⾏处理分⽚,且每个分⽚⽐较⼩,负载均衡,好的计算机处理更快,可以腾出时间做其他计算
3.分⽚太⼩,管理分⽚的时间和构建map的时间将会决定整个作业执⾏使时间
4.分⽚跨数据块会使占⽤带宽效率更低
5.最佳分⽚⼤⼩应该和HDFS的块⼤⼩⼀致。hadoop2.x默认128M
创建分⽚的过程
1.获取⽂件的位置以及⼤⼩
2.判断⽂件是否可以分⽚(压缩格式有的可以分⽚,有的不⾏)
3.获取分⽚⼤⼩
4.剩余⽂件的⼤⼩/分⽚的⼤⼩>1.1时循环封装分⽚的信息,
1.封装⼀个分⽚的信息(包含路径,分⽚的起使偏移量,要处理的⼤⼩,分⽚包含的块信息,分⽚中包含的块在那些机器上)
2.剩余⽂件<1.1且不为零形成⼀个分⽚,hadoop分⽚允许10%的冗余
读取分⽚的细节:如果有多个分⽚
第⼀个分⽚读到末尾再多读⼀⾏
因为⼀般来说读到最后⼀⾏的时候有很⼤可能不是正好⼀⾏结束因此可以⼀般要多读取⼀⾏。
既不是第⼀个分⽚也不是最后⼀个分⽚第⼀⾏数据舍弃,末尾多读⼀⾏
舍弃是因为上⼀个块已经读过了
最后⼀个分⽚舍弃第⼀⾏,末尾多读⼀⾏
MapTask的执⾏流程
1.根据分⽚机制将⽂件分为多个⽚每个分⽚对应⼀个container,map调⽤FileInputFormat的
getRecordReader读取分⽚数据
k每次读取数据,读取⼀⾏返回⼀个
3.将K,V对叫给MapTask处理,每读取⼀⾏就要进⾏⼀次MapTask
4.每对键值对调⽤⼀次map(K,V,context)⽅法,然后使⽤(K,V)写出
5.写出的数据通过收集器tor()处理
6.写到环形缓冲区中(环形缓冲区默认⼤⼩为100M,缓冲区中存储的有原始数据从顺时针⽅向写⼊
,将原始数据的偏移量,结束位置,分⽚请况等逆时针写⼊环形缓冲区中)
7.当到达阈值默认是80%时开始开始溢写到磁盘,溢写到磁盘时会进⾏⼀定的排序)⽅便使⽤,并且继续写⼊剩余的20%若是写满则阻
塞。
8默认的分区规则是hashpatitioner,即key的hash%reduceNum
9.默认的排序规则是key的字典顺序,使⽤的是快速排序
10.溢写会形成多个⽂件,在maptask读取完⼀个分⽚数据后,先将环形缓冲区数据刷写到磁盘
11将数据多个溢写⽂件进⾏合并,分区内排序(外部排序===》归并排序)
reduce
Task通过数据分区规则抓取相应的数据到reducetask(通过HTTP协议)
若是数据⼩则放在内存暂时存储等待处理,若是抓取的数据过多则需要溢写在磁盘溢写前会进⾏合,溢写可能会形成多个⽂件,最终
要将⽂件合并,合并时默认最后合并⼗个⽂件
将多个maptask的数据进⾏合并,排序
3.按照key相同分组()
4.⼀组数据调⽤⼀次reduce(k,iterablevalues,context)
5.处理后的数据交由reducetask
task调⽤FileOutputFormat组件
tputFormat组件中的write⽅法将数据写出
本文发布于:2022-11-26 20:39:36,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/26463.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |