Hadoop的shuffle过程:
Hadoop的shuffle过程就是从map端输出到reduce端输入之间的过程。是Hadoop中最核心的部分。
Map端:map过程的输出是写入本地磁盘而不是HDFS,但是一开始数据并不是直接写入磁盘而是缓冲在内存中,缓存的好处就是减少磁盘I/O的开销,提高合并和排序的速度。在编写map函数的时候要尽量减少内存的使用,为shuffle过程预留更多的内存,因为该过程是最耗时的过程。
Ruduce端:当Reducer的输入文件确定后,整个Shuffle操作才最终结束。之后就是Reducer的执行了,最后Reducer会把结果存到HDFS上。
hadoop的shuffle阶段分为map端的shuffle、reduce端的shuffle
map端的shuffle阶段
spill:将map方法输出的结果写入环形缓冲区,当写入到环形缓冲区的数据到达阈值(80%)就会将这部分数据溢写到磁盘上,在写入磁盘之前会对数据进行分区,并按照key进行排序(快排),分区内部有序
merge:spill阶段会形成若干个小文件,将小文件合并并且分区按照key排序(归并排序),形成一个大的文件
reduce端的shuffle阶段:
copy:reduceTask会在不同的map端最终文件copy拉取属于自己分区的数据
merge:将不同map端拉取过来的数据进行排序
分组:将数据按照key进行分组,相同key不同value形成一个迭代器