EMR主节点instance-controller服务启动失败,寻求解决方法
解决EMR instance-controller服务反复重启且无法启动的问题
问题现象
- EMR控制台出现验证错误
- 执行
sudo systemctl status instance-controller.service时,服务状态在running和auto-restart之间频繁切换 - 主节点系统日志抛出核心错误:
java.lang.RuntimeException: LocalStartupState is FAILED, so not allowing instance controller to start at aws157.instancecontroller.common.InstanceConfigurator.hasAlreadyBeenConfigured(InstanceConfigurator.java:124) at aws157.instancecontroller.common.InstanceConfigurator.<init>(InstanceConfigurator.java:100) at aws157.instancecontroller.InstanceController.<init>(InstanceController.java:223) at aws157.instancecontroller.Main.runV1Framework(Main.java:239) at aws157.instancecontroller.Main.main(Main.java:222) - 多次执行
sudo systemctl start instance-controller.service重启服务、重启节点均无效;集群任务运行正常,但无法推送应用日志至S3或在EMR控制台查看日志
解决方案
1. 重置LocalStartupState状态标记
Instance Controller会读取/emr/instance-state/下的状态文件,当标记为FAILED时会阻止启动,执行以下命令重置状态:
# 停止instance-controller服务 sudo systemctl stop instance-controller.service # 删除失败状态标记文件 sudo rm -f /emr/instance-state/startup-state # 重新启动服务 sudo systemctl start instance-controller.service
2. 修复日志目录权限
确保hadoop用户拥有Instance Controller日志目录的读写权限:
sudo chown -R hadoop:hadoop /var/log/aws/emr/instance-controller/ sudo chmod -R 755 /var/log/aws/emr/instance-controller/
3. 验证EC2实例元数据访问
Instance Controller依赖EC2实例元数据获取配置信息,检查访问是否正常:
curl http://169.254.169.254/latest/dynamic/instance-identity/document
若无法访问,需检查实例IAM角色权限、安全组规则或路由配置是否阻止了元数据访问。
4. 强制初始化Instance Controller
若上述步骤无效,执行强制初始化脚本:
sudo /usr/bin/instance-controller --initialize sudo systemctl restart instance-controller.service
5. 检查Log Pusher服务状态
日志推送至S3依赖logpusher服务,确认其运行状态:
sudo systemctl status logpusher.service
若服务异常,重启logpusher:
sudo systemctl restart logpusher.service
验证操作
执行以下命令确认服务稳定运行:
# 查看服务状态 sudo systemctl status instance-controller.service # 实时监控Instance Controller日志 tail -f /var/log/aws/emr/instance-controller/instance-controller.log
观察日志无新错误后,检查EMR控制台是否能正常查看日志,以及S3目标路径是否有日志文件生成。
内容的提问来源于stack exchange,提问作者Swapnil
相关产品推荐
相关产品推荐

