最近我一直在调整一些大型、重洗牌的作业的性能。查看spark UI,我注意到在附加度量部分下有一个名为"Shuffle Read Blocked Time"的选项。
这种"无序读取阻塞时间"似乎占了大量任务持续时间的50%以上。
虽然我可以凭直觉推断出这意味着什么,但我找不到任何解释它实际代表什么的文档。不用说,我也没能找到任何缓解策略的资源。
有人能提供一些关于我如何减少无序读取阻止时间的见解吗?
"Shuffle Read Blocked Time"是阻塞任务等待从远程机器读取Shuffle数据的时间。它提供的确切度量是shuffleReadMetrics.etchWaitTime.
在不知道你试图读取什么数据或从什么类型的远程机器读取数据的情况下,很难对缓解策略进行输入。但是,请考虑以下内容:
- 检查您与正在读取数据的远程机器的连接
- 检查你的代码/作业,以确保你只读取完成作业绝对需要读取的数据
- 在某些情况下,您可以考虑将作业拆分为多个并行运行的作业,只要它们彼此独立即可
- 也许您可以升级集群以拥有更多的节点,这样您就可以将工作负载划分得更精细,从而使总体等待时间更短
关于指标,本文档应该对其进行一些说明:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-webui-StagePage.html
最后,我也发现很难找到关于Shuffle Read Blocked Time的信息,但如果你在谷歌搜索中引用"Shuffle Read-Blocked Time"之类的话,你会发现一些不错的结果。