spark 3.0.0 中的 CBORFactory NoClassDefFoundError 异常

Posted

技术标签:

【中文标题】spark 3.0.0 中的 CBORFactory NoClassDefFoundError 异常【英文标题】:CBORFactory NoClassDefFoundError exception in spark 3.0.0 【发布时间】:2020-11-17 16:07:34 【问题描述】:

我正在使用 kinesis 并在 EMR 6.0.0 中运行 Spark 流应用程序, 它在本地运行良好,但是在部署到 AWS EMR 时它一直失败 NoClassDefFoundError异常

20/11/17 15:26:56 INFO Client: 
     client token: N/A
     diagnostics: User class threw exception: java.lang.NoClassDefFoundError: com/fasterxml/jackson/dataformat/cbor/CBORFactory
    at com.amazonaws.protocol.json.SdkJsonProtocolFactory.getSdkFactory(SdkJsonProtocolFactory.java:123)
    at com.amazonaws.protocol.json.SdkJsonProtocolFactory.createGenerator(SdkJsonProtocolFactory.java:54)
    at com.amazonaws.protocol.json.SdkJsonProtocolFactory.createGenerator(SdkJsonProtocolFactory.java:74)
    at com.amazonaws.protocol.json.SdkJsonProtocolFactory.createProtocolMarshaller(SdkJsonProtocolFactory.java:64)
    at com.amazonaws.services.kinesis.model.transform.DescribeStreamRequestProtocolMarshaller.marshall(DescribeStreamRequestProtocolMarshaller.java:52)
    at com.amazonaws.services.kinesis.AmazonKinesisClient.executeDescribeStream(AmazonKinesisClient.java:861)
    at com.amazonaws.services.kinesis.AmazonKinesisClient.describeStream(AmazonKinesisClient.java:846)
    at com.amazonaws.services.kinesis.AmazonKinesisClient.describeStream(AmazonKinesisClient.java:887)
    at com.gartner.tn.datafeed.application.PositionStreamApplicationV4.getJavaDStream(PositionStreamApplicationV4.java:240)

【问题讨论】:

这个问题是如何为您解决的? 【参考方案1】:

我遇到了完全相同的问题,我通过消除 Kinesis 对 CBOR 的依赖解决了这个问题。我不确定这是否适合您,但它对我有用。

有几种方法可以做到这一点,但是,在本地模式下运行时,我将以下代码放在流式 Spark 应用程序的主类开头;

System.setProperty(SDKGlobalConfiguration.AWS_CBOR_DISABLE_SYSTEM_PROPERTY, "true");

在集群模式下运行时,按如下方式启动您的 spark 提交;

spark-submit --deploy-mode cluster \
--conf spark.driver.extraJavaOptions='-Dcom.amazonaws.sdk.disableCbor=true' \
--conf spark.executor.extraJavaOptions='-Dcom.amazonaws.sdk.disableCbor=true' 

在集群上以客户端模式运行时,这样启动;

spark-submit --deploy-mode client \
--driver-java-options '-Dcom.amazonaws.sdk.disableCbor=true' \
--conf spark.executor.extraJavaOptions='-Dcom.amazonaws.sdk.disableCbor=true' 

这个问题让我找到了答案; Getting an AmazonKinesisException Status Code: 502 when using LocalStack from Java

【讨论】:

对我来说......在集群模式下,它不尊重参数。仍然给出这个错误。

以上是关于spark 3.0.0 中的 CBORFactory NoClassDefFoundError 异常的主要内容,如果未能解决你的问题,请参考以下文章

在 EMR 集群上引导 Spark 3.0.0

在数据集中拆分字符串 Apache Spark

Spark特性|Apache Spark 3.0.0正式版终于发布

java.lang.ClassNotFoundException:用于 Spark 3.0.0 的 org.apache.spark.sql.sources.v2.DataSourceV2

Hadoop-3.0.0 与旧版本 Hive、Pig、Sqoop 和 Spark 的兼容性如何

spark 预编译安装