Spark阶段 I/O负载高

接下来,再次查看最长阶段的 I/O 统计信息:

长阶段 I/O

高性能 I/O 是什么?

I/O 列中需要多少数据量才能被认为是高? 要弄清楚这一点,首先从任意给定列中的最高数字开始。 然后,考虑在所有工作人员中拥有的 CPU 核心总数。 通常,每个核心每秒可以读取和写入大约 3 MB。

将最大 I/O 列数值除以群集工作核心数,然后将结果除以持续时间秒数。 如果结果约为 3 MB,那么您可能受限于输入/输出操作。 这属于高 I/O 性能。

高输入

如果你在阶段中看到大量输入,这意味着你花了很多时间读取数据。 首先,确定此阶段正在读取的数据。 请参阅 在 Spark 的 DAG 中识别昂贵的读取

确定特定数据后,下面是加快读取速度的一些方法:

高功率

如果你看到阶段中的大量输出,这意味着你花了很多时间写入数据。 以下是解决此问题的一些方法:

高级洗牌

Databricks 建议你设置为 spark.sql.shuffle.partitions=auto 允许 Spark 自动选取最佳随机分区数。 如果你不熟悉混排,是时候 学习了。

无高输入/输出

如果在任一列中看不到高 I/O,则需要深入分析。 查看 具有少量 I/O 的慢速 Spark 阶段