我在 EKS 上的 AWS EMR 上运行 PySpark 作业(使用 Apache Hudi),驱动程序代码如下:
with (SparkSession.builder
.appName(f"App")
.config('spark.serializer', 'org.apache.spark.serializer.KryoSerializer')
.config('spark.sql.extensions', 'org.apache.spark.sql.hudi.HoodieSparkSessionExtension')
.getOrCreate()) as spark:
# Add a new column to my Hudi table
spark.sql('alter table my_table add columns (my_date date)')
# Merge a data set into my Hudi table
spark.sql('merge into _mytable ...')
spark.stop()
print('FINISH')
sys.exit(0)
该作业在 EMR 中保持为
RUNNING
状态,但实际作业已完成并退出。我可以在 Spark UI 中看到工作已经完成。在输出日志中,我可以看到脚本最后一行打印的 FINISH
。另外,我检查了S3,数据修改已经完成。但 EMR 中该任务的状态仍然保持 RUNNING
,除非我手动取消。
Spark History Server 显示此作业在 2.3 分钟内完成。但在 AWS EMR 控制台中,它仍然继续运行,直到我在 50 分钟后停止它:
有人知道是什么原因导致这个问题吗?
通常,如果 EMR 作业没有结束,则可能存在处于活动状态的线程。这不一定是 Spark 代码(Scala/python)的一部分。
对于上面的示例,您仅共享了 Spark 部分代码。除此之外,如果您查看代码完成后仍然存在的任何现有线程,您应该能够抓住罪魁祸首。