我使用以下规范启动EMR群集:
Spark作业已关联。它从S3读取数据并在S3中保存输出数据。
经过多次尝试,似乎每次Spark作业都会在大约1小时15分钟内终止(我可以看到在Spark Web UI中完成的作业,我可以看到S3中的输出是好的)。但EMR集群在关闭之前会持续20到30分钟。总的来说,需要1小时45分钟。
为什么EMR集群在上次完成任务后需要花费很长时间才能终止?
答案 0 :(得分:0)
我们有一个类似的问题-在代码末尾称为spark.stop()和System.exit(),该工作已完成(正在观看它在终端中的运行),Web UI关闭,_SUCCESS令牌为编写,但应用程序只是坐在那里,仅在10-40分钟后在Hadoop Resource Manager中标记为已完成。
最终成为网络问题,我通过增加以下内容解决了该问题:
--conf spark.rpc.message.maxSize=512 (default: 128)
--conf spark.network.timeout=600 (default: 120s)
--conf spark.executor.heartbeatInterval=30s (default: 10s)
一种快速的检查方法是重复执行程序日志-我们看到了一堆以下警告提示我
yarn logs -applicationId <app_id> | grep WARN
...
WARN Executor: Issue communicating with driver in heartbeater