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

本地AWS Glue 4.0 Docker加载S3文件触发AWSBadRequestException排查

AWS Glue 4.0 Docker镜像本地加载S3文件报错问题

问题描述

我一直在使用AWS Glue 4.0 Docker镜像进行ETL任务的本地开发与测试,处理DynamoDB导出数据时一切正常,但加载S3上的文件时遇到问题。

我有一批从AWS CloudWatch导出的文件需加载到数据湖,配置的DynamicFrame代码如下:

df_raw = glueContext.create_dynamic_frame_from_options(
    connection_type="s3",
    connection_options={
        "paths": [
            f"s3://{audit_logs_source_bucket}/exports/aws-cloudwatch/logs/audit/access-logs/api/apigw/",
        ],
        "recurse": True,
        "exclusions": json.dumps([
            "aws-logs-write-test",
        ]),
    },
    format="grokLog",
    format_options={
        "logFormat": r"%{NOTSPACE:timestamp}%{SPACE}%{GREEDYDATA:msg}",
    },
    transformation_ctx="load_new_logs",
)

执行代码时(训练账号已配置管理员权限)出现如下异常:

Py4JJavaError: An error occurred while calling o72.getDynamicFrame.
: org.apache.hadoop.fs.s3a.AWSBadRequestException: getFileStatus on s3://bucket-operators-data-export-eu-west-1-rnd/exports/aws-cloudwatch/logs/audit/access-logs/api/apigw: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request

相同代码在AWS Glue交互式会话中可正常运行,请问哪里操作有误?


排查与解决方向

1. 本地Docker环境的AWS认证问题

虽然账号有管理员权限,但本地Glue Docker镜像的认证逻辑和交互式会话不同:

  • 检查本地环境变量是否正确设置AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY,使用临时凭证时还需添加AWS_SESSION_TOKEN
  • 确认启动Docker容器时是否挂载了本地AWS配置目录,让容器能读取~/.aws/credentials和~/.aws/config:
    docker run -v ~/.aws:/root/.aws ... <glue-4.0-image>
    

2. S3端点与区域配置不匹配

Glue Docker镜像默认的S3端点可能和你的bucket所属区域(eu-west-1)不一致:

  • 在代码中显式指定S3区域对应的端点:
    from pyspark.context import SparkContext
    sc = SparkContext.getOrCreate()
    hadoop_conf = sc._jsc.hadoopConfiguration()
    hadoop_conf.set("fs.s3a.endpoint", "s3.eu-west-1.amazonaws.com")
    
  • 也可以在启动Docker容器时通过环境变量指定区域:-e AWS_REGION=eu-west-1

3. Hadoop S3A客户端兼容性配置

Glue 4.0对应的Hadoop版本在处理部分S3请求时需额外配置:

  • 如果bucket名称包含特殊字符,添加路径式访问配置:
    hadoop_conf.set("fs.s3a.path.style.access", "true")
    

4. 路径与排除规则格式验证

  • 尝试将exclusions参数直接传入列表(部分Glue版本支持直接传列表而非JSON字符串):
    "exclusions": ["aws-logs-write-test"]
    
  • 验证S3路径是否正确,可尝试去掉路径末尾的斜杠进行测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:25:13