kafka jar包_org/apache/kafka/common/.../ByteArrayDeserializer

使用Spark-2.4.4的结构化流读取Kafka中的主题,遇到如下这样的错误:

java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/ByteArrayDeserializer

思考一下,原因在于Spark需要集成Kafka,需要第三方的依赖包。在启动pyspark时,没有添加依赖,所以出现这个错误,意思是找不到类"org/apache/kafka/common/serialization/ByteArrayDeserializer"。

那好,重新启动pyspark shell,使用--packages参数指定要加载的资源包:

$ ./bin/pyspark --master spark://hadoop:7077 --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.4

执行很顺利,提示依赖包已经下载,如下图:

3d56df2ea256ae2fc7920c74ee69dd39.png

然后执行下面的Kafka流加载语句:

>>> df = spark.readStream.format("kafka").option("kafka.bootstrap.servers", "localhost:9092").option("subscribe", "topic1").load()

但是,让人惊讶的是,错误信息依旧,如下图:

64b513c8d39209700f4ae1b63d0c83d7.png

然后,是种种Google搜索,但都不解决问题。

苦苦思索,想起来前不久刚从Spark-2.4.3升为Spark-2.4.4。在Spark-2.4.3时,我这样的代码是完全正常的。难道...?

然后,我把启动pyspark时加载的依赖包版本换为2.4.3,奇迹发生了:

$ ./bin/pyspark --master spark://hadoop:7077 --packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.3

注意:这里指定的参数是"--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.3",虽然我的Spark是2.4.4。

顺便说一下,使用"--packages org.apache.spark:spark-sql-kafka-0-10_2.11:2.4.3"下载的jar包放在哪里了呢?缓存在了用户主目录下的".ivy2/jars/"目录下。例如,我的下载包地址是"/home/hduser/.ivy2/jars"。

补充另一种方法

如果因为某些原因,电脑无法联网下载,怎么办?

这个时候,可以先把以下两个包下载下来:

  • spark-sql-kafka-0-10_2.11-2.4.3.jar
  • kafka-clients-2.4.1.jar

例如,把这两个包放在"/home/hduser/software/"目录下。那么可以在启动pyspark时,通过--jars参数来指定加载这两包(包路径之间用逗号分隔)。如下所示:

$ ./bin/pyspark --master spark://hadoop:7077 --jars /home/hduser/software/spark-sql-kafka-0-10_2.11-2.4.3.jar,/home/hduser/software/kafka-clients-2.4.1.jar
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值