为什么 Spark 提交作业会离开在集群 (EMR) 主节点上运行的进程?



我正在通过 AWS lambda 函数向 Livy 提交一个 Spark 作业。作业运行到驱动程序的末尾,但随后不会关闭。

如果将 spark.stop() 或 sc.stop() 添加到驱动程序的末尾,则 spark 作业在 YARN 资源管理器上完成,Livy 将报告成功。但是,主节点上仍然有一个 livy 进程在运行,占用大约 1.5Gb 的内存。如果提交了多个作业,则最终会使用并保存所有主节点内存。

工作:

  • 从配置单元表中提取记录

  • 在主节点上收集这些记录,然后使用 apache pdfbox 将它们写入 pdf 文件

  • 将生成的 PDF 上传到 S3

直接在集群上运行 spark-submit 会产生相同的结果,但是如果我在 spark-submit 作业运行时按 ctrl+c,则主节点上的进程将结束。

我们期望作业在驱动程序结束时自行完成。如果不是这样,则在调用 spark.stop() 时应该调用关闭钩子。

您是否尝试在Spark配置上启用此标志?spark.yarn.submit.waitAppCompletion=false

我观察到的是 livy 执行火花提交命令。上面的标志确保一旦 yarn 应用程序创建应用程序 ID 命令就完成

最新更新