Spark 消费kafka时,抛出异常
“java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)Vat
原因:
应用在执行时对数据解码(反序列化)时,使用了默认的lz4解压缩算法,在spark-core中依赖的lz4版本是1.4,而kafka-client中依赖的lz4版本是1.3版本,在生成解压器时,版本不兼容异常。
解决方法:
可参考网上修改源码解决,也可通过设置"spark.io.compression.codec","snappy"或其他压缩算法规避。鉴于修改源码重新打包替换较为繁琐,建议设置其他压缩算法规避。
举例如下:
conf = SparkConf().set("spark.io.compression.codec", "snappy") sc = SparkContext(master="local[4]", appName="SparkStreamingKafkaLog",conf=conf) sc.setLogLevel("error") ssc = StreamingContext(sc, 10)