apache-spark - 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
解决方案
尝试在单核上运行您的代码进行调试,您可能没有使用线程安全代码并且您的作业陷入竞争状态。像这样的东西:链接
推荐阅读
- pandas - 添加到绘图时出现 Matplotlib 和 pandas 错误?
- javascript - 创建反应包
- ruby-on-rails - 在 Ruby 中发送带有 SOAP 请求的文件
- alexa - Alexa 跳到 stopIntent 而不是 AgreeIntent 用于澳大利亚和加拿大语言
- android - 未获得新令牌谷歌授权
- apache-camel - 集中式 EhCache
- powershell - 使用 PowerShell 在远程机器上执行命令
- java - CGLIB 如何代理 String 或其他 final 类?
- javascript - 如何将文件下载到本地机器而不是量角器中的网格节点
- .net - MSBuild DeployOnBuild=true 忽略 C# WCF 服务到文件共享