【发布时间】:2019-04-09 13:58:02
【问题描述】:
我正在通过 AWS lambda 函数向 Livy 提交 Spark 作业。作业运行到驱动程序的末尾,但没有关闭。
如果将 spark.stop() 或 sc.stop() 添加到驱动程序的末尾,则 spark 作业在 YARN 资源管理器上完成,并且 Livy 将报告成功。但是,在主节点上仍然有一个活跃的进程在运行,它需要大约 1.5Gb 的内存。如果提交了许多作业,这最终会使用并保存所有主节点内存。
工作:
从配置单元表中提取记录
在主节点上收集这些记录,然后使用 apache pdfbox 将它们写入 pdf 文件
将生成的 PDF 上传到 S3
在集群上直接运行 spark-submit 会产生相同的结果,但是如果在 spark-submit 作业运行时我 ctrl+c ,则主节点上的进程将结束。
我们希望在驱动程序结束时自动完成这项工作。如果不是这样,则应在调用 spark.stop() 时调用关闭挂钩。
【问题讨论】:
-
我确定您已经找到了解决方案或继续前进,但我遇到了类似的问题。在我的情况下,火花作业正在写入一个返回 java 未来的 aws 队列,并且在作业终止之前未来尚未完成(context.stop() 等),因此驱动程序挂起。一旦我改为阻塞调用,一切都按预期工作。希望这能给你一些线索
标签: apache-spark amazon-emr livy