2016-08-25 4 views
2

​​でジョブを実行しようとしています。スパーク作業員のSLF4Jロガーがありません

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/Logger 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2625) 
    at java.lang.Class.getMethod0(Class.java:2866) 
    at java.lang.Class.getMethod(Class.java:1676) 
    at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) 
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 6 more 

それが重要わからない場合、私はMesos上ドッカーコンテナ内で、このジョブを実行しようとしています:

この仕事から得られるエラーです。 Sparkは1.61、Mesosは0.27.1、Pythonは3.5、Dockerは1.11.2です。私はクライアントモードで実行しています。ここで

は私​​声明の要旨です:

export SPARK_PRINT_LAUNCH_COMMAND=true 
./spark-submit \ 
    --master mesos://mesos-blahblahblah:port \ 
    --conf spark.mesos.executor.docker.image=docker-registry:spark-docker-image \ 
    --conf spark.mesos.executor.home=/usr/local/spark \ 
    --conf spark.executorEnv.MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.dylib \ 
    --conf spark.shuffle.service.enabled=true \ 
    --jars ~/spark/lib/slf4j-simple-1.7.21.jar \ 
    test.py 

test.pyの要旨は、それは寄木細工からデータをロードすることで、特定の列でそれをソートして、寄木細工にそれを書き戻します。また

私は - 私は(私はそれを見つけるために、各Mesosタスクからの標準エラー出力を見てMesosフレームワークをナビゲートし、エラーが私のドライバーに表示されていません)というエラーを取得保管するとき

私は --jarsラインを追加しました私はそれを上から​​を実行したときに、私は気づいたので、出力

INFO SparkContext: Added JAR file:~/spark/lib/slf4j-simple-1.7.21.jar at http://some.ip:port/jars/slf4j-simple-1.7.21.jar with timestamp 1472138630497

--conf spark.executor.extraClassPath=http:some.ip:port/jars/slf4j-simple-1.7.21.jar

を追加します試してみましたしかし、エラーは変わりません。何か案は?

私が見つけたのはthis linkなので、バグだと思います。しかし、その人はどんな解決策も投稿していません。

+0

私は糸に申請書を提出する場合通常、私は '--jars'と' --files'設定パラメータの組み合わせを使用し、それはそうです働く –

+0

このエラーを解決しましたか? – FGreg

+0

@FGregいいえ私はしませんでした。 –

答えて

0

だから、例外が正しいか - ORG/SLF4J/Loggerは述べ、 "SLF4J - シンプル-1.7.21" jarファイルに存在しない:

└── org 
└── slf4j 
    └── impl 
     ├── SimpleLogger$1.class 
     ├── SimpleLogger.class 
     ├── SimpleLoggerFactory.class 
     ├── StaticLoggerBinder.class 
     ├── StaticMDCBinder.class 
     └── StaticMarkerBinder.class 

は、(適切なjarファイルを含めるSLF4J-API-1.7を試してみてください.21.jar)

(ヒント - あなたは単にそれを解凍したjarファイルの内容を確認することができます)

0

私はこれと同じ問題を抱えていたともドッカーにMesos /スパーク/ Pythonの実行しようとしていました。

最後に私のために修正したのは、spark.executor.extraClassPath設定オプションを使用して、hadoop classpathの出力をSparkエグゼキュータのクラスパスに追加することでした。

私は仕事にそれを得るために走った完全なコマンドは以下のとおりであった:

MESOS_NATIVE_JAVA_LIBRARY=/usr/local/lib/libmesos.so \ 
${SPARK_HOME}/bin/pyspark --conf spark.master=mesos://mesos-master:5050 --driver-class-path $(${HADOOP_HOME}/bin/hadoop classpath) --conf spark.executor.extraClassPath=$(${HADOOP_HOME}/bin/hadoop classpath) 
関連する問題