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

EMR Serverless使用spark-dynamodb包写入DynamoDB卡壳求助

解决EMR Serverless加载spark-dynamodb包任务卡住问题

1. 核对环境版本兼容性

先确认你的EMR Serverless Spark环境的Scala版本:

  • EMR 6.x系列默认用Scala 2.12,适配你选的com.audienceproject:spark-dynamodb_2.12:1.1.1;
  • 如果是EMR 5.x,Scala版本是2.11,必须换成对应版本的包(比如spark-dynamodb_2.11:1.0.0),版本不匹配会导致类加载失败,任务卡住。

2. 修复包加载逻辑,解决依赖阻塞

EMR Serverless默认可能无法顺畅访问Maven中央仓库,或者依赖下载超时导致任务挂起,试试这两种方案:

方案A:指定Maven仓库地址

在SparkSession配置里明确添加中央仓库地址,确保依赖能正常拉取:

spark = SparkSession.builder.appName("EMR_SERVERLESS")
# ... 其他配置 ...
.config("spark.jars.repositories", "https://repo1.maven.org/maven2/")
.config("spark.jars.packages", "com.audienceproject:spark-dynamodb_2.12:1.1.1")
# ... 其他配置 ...
.getOrCreate()

方案B:上传包到S3直接引用

把spark-dynamodb_2.12-1.1.1.jar及其所有依赖包(比如aws-java-sdk-dynamodb、dynamodb-streams-kinesis-adapter等)上传到S3的某个路径(比如s3://your-bucket/spark-jars/),然后修改配置跳过Maven下载:

spark = SparkSession.builder.appName("EMR_SERVERLESS")
# ... 其他配置 ...
.config("spark.jars", "s3://your-bucket/spark-jars/spark-dynamodb_2.12-1.1.1.jar,s3://your-bucket/spark-jars/aws-java-sdk-dynamodb-1.12.xxx.jar,...")
# ... 其他配置 ...
.getOrCreate()

依赖包可以从Maven中央仓库下载,注意版本要和spark-dynamodb兼容。

3. 查看任务日志定位具体问题

任务卡住但无报错,一定要去EMR Serverless控制台看Driver日志:

  • 搜索ClassNotFoundException:如果出现,说明确实没加载到DynamoDB的类,回到步骤1、2排查;
  • 搜索download或timeout:如果有依赖下载超时/失败的信息,说明网络或仓库访问有问题,需要调整VPC配置或者用方案B;
  • 搜索DynamoDB:看看写入阶段有没有节流、权限相关的隐性报错(虽然你说权限开了,但日志能确认)。

4. 清理无效配置+优化写入参数

  • 移除Yarn相关配置:EMR Serverless不基于Yarn运行,yarn.nodemanager.*这些配置完全没用,删掉避免干扰;
  • 调低targetCapacity:你设置的0.99太接近满容量,很容易触发DynamoDB的写入节流,导致任务无限等待。改成0.7或0.8试试:
    df.write.mode("append")
    .option("tableName", "MYTABLE")
    .option("targetCapacity","0.7")
    .option("region","MYREGION")
    .format("dynamodb")
    .save()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 05:03:34