Apache Spark:零输入的任务需要很长时间才能完成
火花2.2 我有一个spark任务,它从HDFS读取压缩数据,应用ETL逻辑并将输出写回HDFS。但是,当我在spark UI中看到任务级数据时,有些任务的输入记录/大小标记为0.0B/6(即0.0B/N,其中N<100)。此外,该阶段中具有XX MB等输入的所有其他任务在某个时间内成功完成,但输入为0.0B的任务将永远运行,从而使spark作业永远运行 我知道数据倾斜会使1个分区比其他分区大,并导致任务混乱。然而,我看到了相反的行为——输入为100MB/500MB的任务正在完成,而输入为0.0B的任务则处于挂起状态 你见过这种行为吗?我应该如何调试和解决该问题?感谢您的帮助。谢谢大家! 例如Spark用户界面数据:Apache Spark:零输入的任务需要很长时间才能完成,apache,apache-spark,apache-spark-sql,bigdata,Apache,Apache Spark,Apache Spark Sql,Bigdata,火花2.2 我有一个spark任务,它从HDFS读取压缩数据,应用ETL逻辑并将输出写回HDFS。但是,当我在spark UI中看到任务级数据时,有些任务的输入记录/大小标记为0.0B/6(即0.0B/N,其中N应用UDF和过滤器-->写为parquet@SaurabhAgrawal嗯,你说这是标准的,但你看到的是你以前从未见过的东西。如果没有代码(至少用于读取)和数据在磁盘上的布局描述(文件数量、格式),我只能说我在上面做了什么。
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
通常情况下,这是因为spark在开始实际读取数据之前做了很长时间的工作。通常,您可以通过递归搜索一个非常大的文件系统或枚举速度较慢的文件系统来触发这种行为。类似地,等待非集群数据库可能会导致这种行为。没有看到你的代码,很难说更多 试着在单核上运行代码进行调试,可能是因为您没有使用线程安全的代码,而您的作业处于争用状态。类似这样的内容:谢谢您的评论。代码中没有什么特别之处,它的标准数据工程读取原始数据(~100GB压缩)->应用UDF和过滤器-->写为parquet@SaurabhAgrawal嗯,你说这是标准的,但你看到的是你以前从未见过的东西。如果没有代码(至少用于读取)和数据在磁盘上的布局描述(文件数量、格式),我只能说我在上面做了什么。