spark的shuffle read和shuffle write有什么区别?

时间:2016-03-06 01:46:51

标签: apache-spark apache-spark-sql

我需要运行一个包含大量数据的spark程序。我正在尝试优化火花程序并通过spark UI并尝试减少Shuffle部分。

提到了几个组件,shuffle read和shuffle write。我可以根据他们的术语理解差异,但我想了解它们的确切含义以及spark的shuffle读/写哪一个会降低性能?

我在互联网上搜索过,但找不到有关它们的详细信息,所以想知道是否有人可以在这里解释一下。

2 个答案:

答案 0 :(得分:9)

从UI工具提示

随机阅读

  

总洗牌字节和读取的记录(包括本地读取的数据和从远程执行器读取的数据

随机发送

  

写入磁盘的字节和记录,以便在未来阶段通过随机播放进行阅读

答案 1 :(得分:2)

我最近开始使用Spark。我一直在寻找同样问题的答案。

当来自一个阶段的数据通过网络混洗到下一阶段时,处理下一阶段的执行者通过tcp从第一阶段的进程中提取数据。我注意到每个阶段的随机“写入”和“读取”指标都显示在特定作业的Spark UI中。阶段也可能具有“输入”大小(例如,来自HDFS或hive表扫描的输入)。

我注意到,从一个阶段进入另一个阶段的shuffle写入大小与那些阶段shuffle读取大小不匹配。如果我没记错的话,在将shuffle数据作为优化传输到下一个阶段/执行者之前,可以对shuffle数据执行reducer类型操作。也许这会导致规模差异,从而导致报告这两个值的相关性。