优化Shuffle
2017-01-13 11:53:40 0 举报
Shuffle是一种常见的数据预处理操作,用于将数据集重新洗牌。为了优化Shuffle,可以采取以下措施:首先,使用合适的随机数生成器来保证洗牌的均匀性;其次,避免频繁地洗牌,可以通过设置洗牌次数或者合并小批量数据来进行优化;此外,可以考虑使用并行化的方式进行洗牌,以提高效率;最后,对于大规模数据集,可以考虑使用分布式计算框架来实现高效的洗牌操作。通过以上优化措施,可以提高Shuffle的效率和稳定性,从而更好地支持后续的数据分析和机器学习任务。
作者其他创作
大纲/内容
ShuffleMapTask
ResultTask
缓存
Bucket
一个ShuffleMapTask将数据写入ResultTask数量的本地文件,这个不会变,但是当下一个ShuffleMapTask运行的时候,可以直接将数据写入之前的ShuffleMapTask的本地文件,对多个ShuffleMapTask的输出进行合并,从而大大减少了本地磁盘文件的数量。这个东西,叫做一组ShuffleGroup,每个文件中,都存储了多个ShuffleMapTask数据,每个ShuffleMapTask的数据叫做一个segment,此外会通过一些索引,来标记每个ShuffleMapTask的输出在ShuffleBlockFile中的索引,以及偏移量等等,来进行多个ShuffleMapTask数据的区分
ShuffleBlockFile
并行执行的ShuffleMapTask,写入的文件,一定是不同的,当一批并行执行的ShuffleMapTask运行完之后,那么新的一批ShuffleMapTask启动起来并行执行的时候,优化机制就开始发挥作用了
new SparkConf().set(\"spark.shuffle.consolidateFiles\
在Spark新版本中,引入了Consolidation机制,也就是说,提出了ShuffleGroup的概念
假设在一个节点上运行了4个ShuffleMapTask,节点上只有两个Cpu Core
在没有开启Consolidation机制的时候,shuffle write的性能,是比较低下的,而且会影响到Shuffle read的性能,也会比较低下。因为shuffle map端创建的磁盘文件太多了!导致shuffle write要耗费大量的性能在磁盘文件的创建,以及磁盘io上;对于shuffle read也是一样的,每个result task可能都需要同构磁盘io读取多个文件的数据,导致shuffle read性能可能也会受到影响。最主要还是shuffle write,因为要写的磁盘文件太多了。
0 条评论
下一页