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

Spark Streaming读取Kinesis数据时出现NoSuchFieldError: NO_INTS错误求助

问题分析

这个java.lang.NoSuchFieldError: NO_INTS错误的核心原因是Jackson版本冲突:你手动引入的Jackson相关JAR包(比如jackson-dataformat-cbor-2.9.8.jar)和Spark自身内置的Jackson版本,或者AWS SDK依赖的Jackson版本不匹配,导致CBOR解析器类在加载时找不到对应的字段。

Spark 2.4.x系列默认依赖Jackson 2.9.x版本,而AWS SDK的部分版本可能依赖更高(或更低)的Jackson版本,手动指定--jars很容易触发这种版本不兼容问题。

解决方案

我推荐两种解决方式,按优先级排序:

1. 使用--packages自动管理依赖(最省心)

放弃手动指定一堆--jars,改用Spark的--packages参数,它会自动处理依赖冲突,拉取兼容的版本组合。针对你的Spark 2.4.5环境,执行以下命令即可:

spark-submit --packages org.apache.spark:spark-streaming-kinesis-asl_2.11:2.4.5,com.amazonaws:aws-java-sdk-kinesis:1.11.745,com.amazonaws:amazon-kinesis-client:1.13.2 snowplow_spark/src/main.py

Spark会自动拉取所有必要的依赖(包括匹配的Jackson版本),无需你手动逐个指定JAR包。

2. 手动调整依赖并强制加载顺序(如果必须用--jars)

如果你坚持手动管理JAR包,需要做两个关键调整:

  • 移除重复依赖:删掉aws-java-sdk-1.11.745.jar,因为你已经引入了细分的AWS SDK模块(比如aws-java-sdk-kinesis、aws-java-sdk-core),完整包和细分包重复引入会引发冲突。
  • 强制优先加载你的依赖:添加Spark配置参数,让你的自定义JAR包优先于Spark内置依赖加载,确保使用你指定的Jackson 2.9.8版本。

修改后的命令如下:

spark-submit --jars spark-streaming-kinesis-asl_2.11-2.4.5.jar,amazon-kinesis-client-1.13.2.jar,aws-java-sdk-kinesis-1.11.745.jar,aws-java-sdk-core-1.11.745.jar,aws-java-sdk-sts-1.11.745.jar,aws-java-sdk-dynamodb-1.11.745.jar,aws-java-sdk-cloudwatch-1.11.745.jar,jackson-core-2.9.8.jar,jackson-dataformat-cbor-2.9.8.jar,jackson-databind-2.9.8.jar --conf spark.driver.userClassPathFirst=true --conf spark.executor.userClassPathFirst=true snowplow_spark/src/main.py
额外注意事项
  • 确保spark-streaming-kinesis-asl的版本和你的Spark版本完全一致(都是2.4.5),你当前已经做到了这一点,这是避免兼容性问题的基础。
  • 尽量避免手动管理大量JAR包,使用--packages或构建工具(比如Maven/Gradle)来管理依赖,能大幅降低版本冲突的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:53:15