amazon-web-services - Amazon EMR - 上次作业完成后终止集群所用的时间
问题描述
我启动了一个具有以下规格的 EMR 集群:
- 1 个主节点 m4.4xlarge,带 EBS 存储 32 GB
- 10 个核心节点 m4.4xlarge 与 EBS 存储 1024 GB
- 上次作业完成后自动终止
关联一个 Spark 作业。它从 S3 读取数据并将输出数据保存在 S3 中。
经过几次尝试,似乎每次 Spark 作业都会在大约 1 小时 15 分钟后终止(我可以在 Spark Web UI 中看到作业已完成,并且可以在 S3 中看到输出,这很好)。但 EMR 集群在关闭前会挂起 20 到 30 分钟。因此,总的来说,它需要 1 小时 45 分钟。
为什么 EMR 集群在最后一个作业完成后需要这么长时间才能终止?
解决方案
我们有一个类似的问题 - 在代码末尾调用 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
推荐阅读
- php - 脚本无法找到或执行文件夹文件
- azure - Azure Durable Functions 中的依赖项调用失败
- google-cloud-platform - 我们如何为 Google Cloud Functions 代码动态部署更新版本的代码?
- c# - C# - 将 RTF 格式的字符串获取到 RichTextBox
- tensorflow - Python - 一种训练 softmax keras 模型的方法?
- java - Recyclerview 项目没有以相同的高度显示
- javascript - 如何在js中找到具有预定值的变量?
- c# - 没有为实体类型字符串找到合适的构造函数
- jmeter - 由于我们没有记录请求和响应正文,我们如何从哪个错误中确定请求在性能测试期间失败了?
- perl - 在 Windows 和 Linux 下调用 Perl 中的外部程序并实时打印它正在做的事情