引自[https://www.iteye.com/blog/langyu-992916]
shuffle的意义有三点:
1.把map task端的数据完整传输到reduce task端
2.减少不必要的宽带消耗
3.减少磁盘IO消耗
首先把Shuffle理解为map的shuffle和reduce的shuffle
map task端的shuffle可以分为以下几个步骤:
1.map,对key进行value赋值
2.partitioner,对于不同的key值分配不同的reduce task端,个人理解key/value以及分哪个reduce信息写在一起。
3.spill,写入内存缓冲区后,会造成以溢写,写入磁盘
4.conbiner,溢写文件会相同的key做合并操作
5.merge,对多个溢写文件进行合并,最后每个map task端只有一个溢写文件
reduce task端的shuffle可以分为以下几个步骤:
1.copy,首先根据jobtracker获取map task数据。从不同map task端copy数据过来。
2.merge,将不同map task端的数据合并起来,作为reduce端的输入
3,reduce,得到最终结果
这次回顾,能更深理解其中过程,但仍然觉得有部分地方理解错误,需要继续对其学习。
后面将对spark进行回顾,加强学习。
目前Hadoop中的mapreduce更多已被spark替代。
原文地址:https://www.cnblogs.com/chenshaowei/p/12335110.html
时间: 2024-10-31 02:57:10