首页 > 解决方案 > Spark:零输入的任务需要永远完成

问题描述

火花 2.2

我有一个从 HDFS 读取压缩数据、应用 ETL 逻辑并将输出写回 HDFS 的 spark 作业。但是,当我在 spark UI 中看到任务级别数据时,某些任务的输入记录/大小标记为 0.0B/6(即 0.0B/N,其中 N < 100)。此外,阶段中具有 XX MB 等输入的所有其他任务在某个时候成功完成,但以 0.0B 作为输入的任务将永远运行,从而使 spark 作业永远运行。

我知道数据倾斜会使 1 个分区比其他分区大,并导致任务散乱。但是,我看到了相反的行为 - 输入为 100MB/500MB 的任务正在完成,而输入为 0.0B 的任务被挂起。

你见过这样的行为吗?我应该如何调试和解决问题?任何帮助表示赞赏。谢谢你!

例如 Spark UI 数据:

Task ID ▴   Address         Status          Input Size / Records  Task Duration
 1          machine:xxxx     Completed         37.0 MB / 63106       2Min 5Sec
 2          machine:xxxx     Running           0.0 B / 64068         20Hrs 50Sec
 3          machine:xxxx     Running           0.0 B / 65045         20Hrs 50Sec
 4          machine:xxxx     Completed         38.1 MB / 64255       3Mins 7Sec
 5          machine:xxxx     Completed         52.3 MB / 82091       9Mins 3Sec
 6          machine:xxxx     Completed         49.1 MB / 79232       10Mins 6Sec
 7          machine:xxxx     Running           0.0 B / 48337         20Hrs 50Sec
 8          machine:xxxx     Running           0.0 B / 59438         20Hrs 50Sec

标签: apache-sparkapache-spark-sqlbigdata

解决方案


尝试在单核上运行您的代码进行调试,您可能没有使用线程安全代码并且您的作业陷入竞争状态。像这样的东西:链接


推荐阅读