Spark - Shuffle读取被阻止的时间

day*_*man 6 apache-spark apache-spark-sql pyspark

最近我一直在调整一些大型,重复的重型工作的表现.看一下spark UI,我注意到了一个名为"Shuffle Read Blocked Time"的选项,在额外的指标部分下面.

对于大量任务,这种"随机读取阻塞时间"似乎占任务持续时间的50%以上.

虽然我可以直觉了解这意味着什么,我找不到任何解释它实际代表什么的文档.毋庸置疑,我也未能找到任何有关缓解策略的资源.

任何人都可以提供一些有关如何减少随机读取阻塞时间的见解吗?

use*_*181 4

“Shuffle Read Blocked Time”是任务阻塞等待从远程机器读取 shuffle 数据的时间。它提供的确切指标是 shuffleReadMetrics.fetchWaitTime。

如果不真正知道您正在尝试读取哪些数据或您正在从哪种远程计算机读取数据,则很难为缓解该问题的策略提供输入。但是,请考虑以下事项:

  1. 检查与正在读取数据的远程计算机的连接。
  2. 检查您的代码/作业,以确保您只读取完成作业绝对需要读取的数据。
  3. 在某些情况下,您可以考虑将作业拆分为多个并行运行的作业,只要它们彼此独立即可。
  4. 也许您可以升级集群以拥有更多节点,这样您就可以将工作负载拆分得更细,从而整体上缩短等待时间。

至于指标,本文档应该对它们进行一些说明:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-webui-StagePage.html

最后,我确实也发现很难找到有关 Shuffle Read Blocked Time 的信息,但是如果您在 Google 搜索中添加诸如“Shuffle Read Blocked Time”之类的引号,您会发现一些不错的结果。