我需要运行一个拥有大量数据的 Spark 程序。我正在尝试优化 Spark 程序并通过 Spark UI 工作,并试图减少 Shuffle 部分。
提到了几个组件,随机读取和随机写入。我可以理解基于他们的术语的差异,但我想了解它们的确切含义以及 Spark 的哪一个随机读/写会降低性能?
我在互联网上搜索过,但找不到关于它们的可靠深入细节,所以想看看是否有人可以在这里解释它们。
从 UI 工具提示
随机播放读取
随机播放字节和读取记录总数(包括本地读取的数据和从远程执行程序读取的数据
随机写入
写入磁盘的字节和记录,以便在将来的阶段由随机读取
我最近开始使用Spark。我一直在寻找同类问题的答案。
当一个阶段的数据通过网络随机排列到下一阶段时,处理下一阶段的执行者通过 TCP 从第一阶段的进程中拉取数据。我注意到每个阶段的随机"写入"和"读取"指标显示在特定作业的 Spark UI 中。阶段也可能具有"输入"大小(例如,来自HDFS或Hive表扫描的输入)。
我注意到从一个阶段输入到另一个阶段的随机写入大小与阶段随机读取大小不匹配。如果我没记错的话,在将随机数据传输到下一阶段/执行器作为优化之前,可以对 reducer 类型的操作执行这些操作。也许这会导致大小的差异,从而增加报告这两个值的相关性。