首页 > 解决方案 > Amazon EMR - 上次作业完成后终止集群所用的时间

问题描述

我启动了一个具有以下规格的 EMR 集群:

关联一个 Spark 作业。它从 S3 读取数据并将输出数据保存在 S3 中。

经过几次尝试,似乎每次 Spark 作业都会在大约 1 小时 15 分钟后终止(我可以在 Spark Web UI 中看到作业已完成,并且可以在 S3 中看到输出,这很好)。但 EMR 集群在关闭前会挂起 20 到 30 分钟。因此,总的来说,它需要 1 小时 45 分钟。

为什么 EMR 集群在最后一个作业完成后需要这么长时间才能终止?

标签: amazon-web-servicesapache-sparkamazon-s3emr

解决方案


我们有一个类似的问题 - 在代码末尾调用 spark.stop() 和 System.exit(),作业完成(在终端中实时观看),Web UI 关闭,_SUCCESS 令牌已写入但该应用程序就在那里,仅在 10 到 40 分钟后在 Hadoop 资源管理器中被标记为完成。

它最终成为一个网络问题,我通过增加以下内容来解决这个问题:

--conf spark.rpc.message.maxSize=512 (default: 128)
--conf spark.network.timeout=600 (default: 120s)
--conf spark.executor.heartbeatInterval=30s (default: 10s)

一种快速检查的方法是 grepping 执行程序日志 - 我们看到了一系列以下警告,这些警告让我失望了

yarn logs -applicationId <app_id> | grep WARN
...
WARN Executor: Issue communicating with driver in heartbeater

推荐阅读