sparkアプリケーションにおけるjacksonバージョンの競合の解決
sparkプログラムではjacksonを用いてscalaオブジェクトのjsonシーケンス化と逆シーケンス化を行う.実行時にjavaが表示されます.lang.NoClassDefFoundErrorとjava.lang.AbstractMethodErrorエラーは、jackson/guavaとspark自体が持っているバージョンの競合であることがネット上で検索されました.
1.ideaでは、modulesで依存する優先順位を調整することで、すぐに問題を解決しました.Edit->File Structure->Modules->Dependences
2.Sparkクラスタにパブリッシュすると、何らかの理由で最初はmavenでプロジェクトを管理していなかったため、サードパーティ製ライブラリへの依存順位を調整することで解決したいと考えています.
しかし、エラーは相変わらずです.
助けを求めるしかない.mavenのshadeプラグインの使用:まず依存項目を追加し、デフォルトのcompile scopeを使用します.
次にmaven-shade-pluginを追加します
Done!
1.ideaでは、modulesで依存する優先順位を調整することで、すぐに問題を解決しました.Edit->File Structure->Modules->Dependences
2.Sparkクラスタにパブリッシュすると、何らかの理由で最初はmavenでプロジェクトを管理していなかったため、サードパーティ製ライブラリへの依存順位を調整することで解決したいと考えています.
spark-submit --class noc.train.Train --master yarn-client --num-executors 10 --executor-cores 2 --driver-memory 10g --executor-memory 12g --conf spark.yarn.executor.memoryOverhead=2048 \
--conf spark.executor.extraClassPath=./guava-15.0.jar:./jackson-annotations-2.4.4.jar:./jackson-core-2.4.4.jar:./jackson-databind-2.4.4.jar:./jackson-module-scala_2.10-2.4.4.jar \
--conf spark.driver.extraClassPath=/home/ck/lib/guava-15.0.jar:/home/ck/lib/jackson-annotations-2.4.4.jar:/home/ck/lib/jackson-core-2.4.4.jar:/home/ck/lib/jackson-databind-2.4.4.jar:/home/ck/lib/jackson-module-scala_2.10-2.4.4.jar \
--jars /home/ck/lib/guava-15.0.jar,/home/ck/lib/jackson-annotations-2.4.4.jar,/home/ck/lib/jackson-core-2.4.4.jar,/home/ck/lib/jackson-databind-2.4.4.jar,/home/ck/lib/jackson-module-scala_2.10-2.4.4.jar \
/home/ck/noc_scala.jar
しかし、エラーは相変わらずです.
18/09/12 09:46:47 INFO scheduler.TaskSetManager: Lost task 198.0 in stage 7.0 (TID 897) on executor host-9-136: java.lang.NoClassDefFoundError (Could not initialize class noc.grid.Grid$) [duplicate 1]
18/09/12 09:46:47 WARN scheduler.TaskSetManager: Lost task 58.0 in stage 7.0 (TID 890, host-9-136): java.lang.AbstractMethodError: noce.grid.Grid$$anon$1.com$fasterxml$jackson$module$scala$experimental$ScalaObjectMapper$_setter_$com$fasterxml$jackson$module$scala$experimental$ScalaObjectMapper$$typeCache_$eq(Lorg/spark-project/guava/cache/LoadingCache;)V
at com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper$class.$init$(ScalaObjectMapper.scala:50)
助けを求めるしかない.mavenのshadeプラグインの使用:まず依存項目を追加し、デフォルトのcompile scopeを使用します.
com.fasterxml.jackson.core
jackson-core
2.4.4
com.fasterxml.jackson.core
jackson-databind
2.4.4
com.fasterxml.jackson.core
jackson-annotations
2.4.4
com.fasterxml.jackson.module
jackson-module-scala_2.10
2.4.4
次にmaven-shade-pluginを追加します
org.apache.maven.plugins
maven-shade-plugin
3.1.0
package
shade
com.fasterxml.jackson
noc.com.fasterxml.jackson
com.google.guava
noc.com.google.guava
Done!