AWS Glue PySpark作业报Input path does not exist错误执行停滞咨询
问题排查解决步骤
1. 修正路径拼接错误
这是最直接的问题:
- 报错日志中的路径出现格式异常:
s3:///AWSLogs//CloudTrail/...存在三个斜杠的错误前缀(缺失存储桶名)、路径中间连续双斜杠的问题,说明代码中的<foldername>(存储桶名)、<accountID>(AWS账号ID)占位符没有被替换为真实值,导致实际运行时拼接出来的路径和真实S3路径完全不匹配。 - CloudTrail日志的标准路径格式为:
s3://<你的存储桶名称>/AWSLogs/<你的AWS账号ID>/CloudTrail/<区域>/<年>/<月>/<日>/,你可以直接在S3控制台定位到对应日期的文件夹,复制完整路径替换代码中的占位符即可。 - Glue环境原生支持
s3://前缀,不需要额外使用s3a://前缀,避免不必要的兼容性问题。
2. 检查Glue执行角色的IAM权限
如果路径确认正确后仍然报错,需要检查Glue作业绑定的执行角色是否有对应S3路径的访问权限:
- 需要给执行角色添加
s3:ListBucket(存储桶级权限)和s3:GetObject(对象级权限),示例IAM策略如下:
{ "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::<你的存储桶名称>", "arn:aws:s3:::<你的存储桶名称>/*" ] }
如果存储桶开启了KMS加密,还需要额外给执行角色添加对应KMS密钥的解密权限。
3. 过滤临时隐藏文件
你报错中提到的不存在文件均为下划线开头的_CloudTrail_xxx.json.gz文件,这类是CloudTrail写入过程中的临时文件,写入完成后会自动重命名去掉开头的下划线,如果Spark读取刚好发生在CloudTrail写入过程中,就会先列举到这些临时文件,等实际读取时文件已经被重命名,就会触发路径不存在错误。
- 可以添加配置让Spark直接忽略下划线开头的隐藏/临时文件,修改读取代码如下:
df = spark.read.option("multiline", "true") \ .option("spark.hadoop.mapreduce.input.fileinputformat.exclude.pattern", "^_.*") \ .json("s3://替换为你的真实路径")
4. 添加容错配置
如果业务允许少量文件缺失不影响作业运行,可以添加容错配置避免单个文件错误导致整个作业失败:
df = spark.read.option("multiline", "true") \ .option("ignoreMissingFiles", "true") \ .option("ignoreCorruptFiles", "true") \ .json("s3://替换为你的真实路径")
内容的提问来源于stack exchange,提问作者Abhishek Tirkey
相关产品推荐
相关产品推荐

