You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS EMR集群启动正常但Spark任务提交失败:userData.json无法读取

解决AWS EMR集群Livy提交Spark任务失败:无法读取userData.json的问题

从你贴的报错栈来看,核心卡点是Livy触发Spark任务时,EMR内置的Hadoop文件系统组件读不到/var/aws/emr/userData.json——这个文件是EMR启动时自动生成的内部元数据文件,用来存储集群IAM凭证、配置参数等关键信息,一旦它出问题(缺失、权限不对),Spark任务就没法正常访问S3这类AWS资源,自然提交失败。

下面给你一步步排查和解决的思路:

1. 先确认文件本身的状态

登录集群主节点(或者有问题的任务节点),先看看这个文件在不在、权限对不对:

ls -l /var/aws/emr/userData.json
  • 如果文件不存在:说明EMR初始化过程中出了异常,没生成这个文件。先试试重启EMR的Hadoop文件系统服务:
    sudo systemctl restart emr-hadoop-fs
    
    重启后再检查文件是否出现,如果还是没有,大概率得重建集群——毕竟这是EMR内部生成的核心文件,手动创建很容易留坑。
  • 如果文件存在:重点看权限,正常情况是root拥有,权限至少是644(其他用户能读)。要是权限不对,调整一下:
    sudo chmod 644 /var/aws/emr/userData.json
    

2. 验证Livy用户的读取权限

Livy默认是以livy用户运行的,得确保这个用户能读这个文件:

sudo -u livy cat /var/aws/emr/userData.json

如果执行报错,说明livy没权限,先把目录权限放开:

sudo chmod 755 /var/aws/emr

3. 检查集群IAM角色配置

userData.json里存着集群的STS凭证信息,如果集群的服务角色(EMR_DefaultRole)或实例配置文件(EMR_EC2_DefaultRole)权限不足,也可能导致文件生成异常或者读不出内容:

  • 确认EMR服务角色有AmazonEMRFullAccess或者足够的权限来生成和访问内部元数据
  • 确认实例配置文件有AmazonS3ReadOnlyAccess以及EMR相关的权限,保证能正常获取STS凭证

4. 排查任务节点的文件同步情况

你的集群有7台任务节点,可能部分节点上的userData.json没同步好。登录几个任务节点重复第一步的检查,确认每个节点都有这个文件且权限正确。如果是同步问题,可以从主节点手动复制:

# 主节点执行,替换成你的任务节点IP
scp /var/aws/emr/userData.json hadoop@<任务节点IP>:/var/aws/emr/
# 然后在任务节点上调整权限
sudo chmod 644 /var/aws/emr/userData.json

5. 用最简任务验证集群状态

先排除任务本身的问题,提交一个最简单的Spark任务测试:

curl -X POST --data '{"file": "/usr/lib/spark/examples/src/main/python/pi.py", "args": ["10"]}' http://<你的EMR主节点IP>:8998/batches

如果这个任务能成功运行,那问题可能出在你原本提交的任务的资源路径上;如果还是失败,那肯定是集群内部的元数据或权限问题,回到前面的步骤再排查。

内容的提问来源于stack exchange,提问作者Normal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:40:57