(spark消費kafka有jar包衝突)java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.

zhenzi_PeppaPig發表於2018-11-24

 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)

 

相關文章