即使 Spark 作业完成后,EMR 任务仍保持在 RUNNING 状态

问题描述 投票:0回答:1

我在 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 分钟后停止它:

有人知道是什么原因导致这个问题吗?

amazon-web-services apache-spark amazon-emr emr-serverless
1个回答
0
投票

通常,如果 EMR 作业没有结束,则可能存在处于活动状态的线程。这不一定是 Spark 代码(Scala/python)的一部分。

对于上面的示例,您仅共享了 Spark 部分代码。除此之外,如果您查看代码完成后仍然存在的任何现有线程,您应该能够抓住罪魁祸首。

© www.soinside.com 2019 - 2024. All rights reserved.