본문 바로가기
빅데이터/spark

[spark] java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V 오류 수정

by hs_seo 2022. 1. 30.

스파크 작업을 실행하는 중에 기본 압축 코덱의 라이브러리가 없을 때 다음 오류가 발생합니다.

 

Job aborted due to stage failure: Task 2 in stage 0.0 failed 4 times, most recent failure: Lost task 2.3 in stage 0.0 (TID 10, hadoop-worker-1.com, executor 2): java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V
at org.apache.spark.io.LZ4CompressionCodec.compressedInputStream(CompressionCodec.scala:122)
at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$6.apply(TorrentBroadcast.scala:304)
at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$6.apply(TorrentBroadcast.scala:304)
at scala.Option.map(Option.scala:146)
at org.apache.spark.broadcast.TorrentBroadcast$.unBlockifyObject(TorrentBroadcast.scala:304)
at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$readBroadcastBlock$1$$anonfun$apply$2.apply(TorrentBroadcast.scala:235)
at scala.Option.getOrElse(Option.scala:121)
at org.apache.spark.broadcast.TorrentBroadcast$$anonfun$readBroadcastBlock$1.apply(TorrentBroadcast.scala:211)
at org.apache.spark.util.Utils$.tryOrIOException(Utils.scala:1326)
at org.apache.spark.broadcast.TorrentBroadcast.readBroadcastBlock(TorrentBroadcast.scala:207)
at org.apache.spark.broadcast.TorrentBroadcast._value$lzycompute(TorrentBroadcast.scala:66)
at org.apache.spark.broadcast.TorrentBroadcast._value(TorrentBroadcast.scala:66)
at org.apache.spark.broadcast.TorrentBroadcast.getValue(TorrentBroadcast.scala:96)
at org.apache.spark.broadcast.Broadcast.value(Broadcast.scala:70)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:84)
at org.apache.spark.scheduler.Task.run(Task.scala:123)
at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Driver stacktrace:

 

해결 방법

하나는 lz4 압축 코덱을 추가하는 것이고, 다른 하나는 압축 설정을 변경하는 것입니다.

 

  • {SPARK_HOME}/jars 디렉토리에 lz4 관련 라이브러리 추가
    • grep -l net.jpountz.lz4.LZ4BlockInputStream * 명령으로 라이브러리 확인
  • yarn.application.classpath
    • yarn-site.xml 설정에 lz4 관련 위치 추가
  • lz4 압축을 사용하는 것이 아니라면 기본 압축 설정 변경
    • --conf spark.io.compression.codec=snappy

 

우지에서 발생

  • 우지에서 해당 문제가 발생하는 경우 다음과 같이 버그일 가능성이 높습니다. lz4 관련 라이브러리를 정리하거나, 기본 압축 설정을 변경하면 문제를 회피할 수 있습니다.

https://issues.apache.org/jira/browse/SPARK-25928

 

[SPARK-25928] NoSuchMethodError net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V - ASF JIRA

I am not sure if this is an Oozie problem, a Spark problem or a user error. It is blocking our upcoming release. We are upgrading from Amazon's EMR 5.7 to EMR 5.17. The version changes are:     oozie 4.3.0 -> 5.0.0     spark 2.1.1 -> 2.3.1 All our Oo

issues.apache.org

 

반응형