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

Airflow调度AWS EMR作业PostgreSQL连接器缺失问题咨询

问题根因说明

  • 第一种方案失败原因:① 配置参数写错,spark.jar是无效参数,正确参数为复数形式spark.jars;② 代码中配置里的S3路径变量不一致,一处用s3_folder一处用s3_path,导致jar包路径错误无法加载。
  • 第二种方案失败原因:① spark.executor.extraClassPath填写了Maven坐标而非本地路径,无法识别;② $HOME变量在Spark集群运行环境中无法被正确解析;③ 自定义classPath时没有按照规范配置,导致Spark内置的JSON解析依赖包加载异常,触发_corrupt_record报错。

可行方案(二选一即可)

方案1:直接使用S3存储的jar包(无需修改bootstrap脚本,推荐)

将postgresql的jdbc jar包上传到S3对应目录后,仅需修改JOB_FLOW_OVERRIDES中的Configurations配置即可,无需调整其他逻辑:

"Configurations": [
    {
        "Classification": "spark-defaults",
        "Properties": {
            "spark.jars": "s3://{{ var.value.s3_folder }}/scripts/postgresql-42.2.5.jar",
            "spark.driver.extraClassPath": "./postgresql-42.2.5.jar",
            "spark.executor.extraClassPath": "./postgresql-42.2.5.jar"
        }
    }
]

说明:spark.jars会自动将S3上的jar包同步到driver和executor的工作目录,对应classPath写相对路径即可识别,不会覆盖原有默认依赖,不影响JSON文件读取。

方案2:通过bootstrap脚本预安装jar包

直接把jar包下载到Spark默认加载依赖的目录,无需额外配置classPath,完全不会影响原有依赖加载:

  1. 修改bootstrap脚本内容:
#!/bin/bash -xe
sudo pip3 install -U \
    boto3 \
    typing
# 直接将jar包下载到Spark默认的依赖加载目录,所有节点启动时自动加载
sudo wget https://jdbc.postgresql.org/download/postgresql-42.2.5.jar -P /usr/lib/spark/jars/
  1. 删除JOB_FLOW_OVERRIDES中Configurations里所有和classPath、spark.jars相关的配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:54:03