问题
- Hadoop shuffle阶段为什么要排序?
- Spark Shuffle为什么从最初的Hash Shuffle改成了Sort Shuffle?
排序
对于数学运算来说,加减乘除是基本的运算符。而对于计算机计算处理数据来说,排序、查找等就是它的基本运算符。
列一些排序的应用:
- 查找某个元素在数组中的位置。可以将数组排序,之后二分查找
- 找出两个数组都包含的元素。可以将两个数组排序,然后循环对比
- ……
在数据处理时,基于有序数据的处理会比无序数据快很多。but,排序是需要时间和空间的。
所以涌现了很多优秀的排序算法,降低排序的代价。
Hadoop shuffle为什么要排序?
MapReduce在shuffle阶段会有两个地方发生排序:
- map端溢写磁盘前会根据key排序
- reduce端拉取分区数据后进行排序
reduce端排序
Reduce端需要对数据进行分组,将key相同的放在一起规约。为达到目的,有两种算法:hashmap和sort,前者太耗内存,而排序可以通过外排对任意数据量分组,只要磁盘数据量够大就行。
map端排序
map端排序是为了减轻reduce端排序的压力。
关于这个问题,更多的讨论可查看: