为什么样hadoop的shuffle阶段需要对数据进行排序?Spark比Hadoop的优势有这么大么
hadoop的shuffle阶段排序的作用是什么呢?
在spark中的shuffle是不需要进行排序的,同样地在hadoop中不进行排序也能对数据进行分组,如果在业务上不需要排序,那么是否可以去掉hadoop中的排序呢?
可以去掉吧。有①些再reducer需要排序的,在reducer那排也可以。
Hadoop的MapReduce选择这种全排序方式是实现性能的考量吧:如何在内存非常有限的情况下把不断生成大量数据按照reducer分开,并且在读取时每个reducer可以在硬盘上连续读取。大概他们的设计者考虑还不如把数据全排列呢。这个设计确实是可以理解的,但也未必是唯①的实现方法。
Spark的数据处理都在内存里,没有shuffle数据要连续读取的问题,设计的选择就更多了。
排序有利于
①.利用分区所在Mapper进行排序,Mapper越多,并行度越高,处理速度也快
②.有利于Mapper压缩合并数据,减少网络层传输
③.基于排序的数据,进行Shuffle时效率更高
④.Reduce基于排序数据合并更高效
spark现在shuffle确实要通过硬盘,单单从IO读写上体现不出比Hadoop的太大优势,Spark的优势在于内存计算和对内存中RDD的管理。
这个优势结合Tachyon(基于内存的分布式文件系统),以后还是有很大的空间的。
对于Hadoop,①.x已经比较过时了,到时基于Yarn的②.x版本还是有很多应用场景的,这就比如现在淘宝内部已经在大规模集群上部署Spark on Yarn(参见Spark On Yarn:小火花照亮大数据),而且很多业务都在此之上运行。个人感觉,以后Hadoop②.x(Yarn)的发展方向可能会变成①种广泛应用的中间件。
首先Hadoop是①个比较大的概念,我理解你是想比较Spark和MapReduce
我总结的优势包括:
① 事件触发任务执行的机制优于MR的心跳触发任务执行机制
② DAG的任务调度执行机制优于MR的迭代执行机制
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
