2016-05-11 1 views
3

問題:スパークと予測IO:依存関係にもかかわらず、NoClassDefFoundErrorが、既存の

私はスパーク1.6.1とPredictionIO 0.9.5を使用して予測IOプロジェクトを訓練しようとしていますが、ジョブエグゼキュータがし始めた直後に失敗しました作業。これは、スタンドアローンスパーククラスタとMesosクラスタの両方で発生します。どちらの場合も、リモートクライアントからクラスタに展開しています。つまり、pio train -- --master [master on some other server]を実行しています。

症状:ドライバのログで

  • 、まもなく最初の[Stage 0:> (0 + 0)/2]メッセージの後、執行が調査java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.protobuf.ProtobufUtil

に起因する死ぬ:実測

  • クエストのクラスpio-assembly瓶内のイオン:提出する際

    jar -tf pio-assembly-0.9.5.jar | grep ProtobufUtil 
    org/apache/hadoop/hbase/protobuf/ProtobufUtil$1.class 
    org/apache/hadoop/hbase/protobuf/ProtobufUtil.class 
    
  • 、このjarファイルをプロジェクトに展開されているとpio train--jars pio-assembly-0.9.5.jarを追加する
  • が持つユーバーjarを作成する問題が解決しない執行
  • 以内に見つけることができますpio build --clean --uber-jarpio-assembly-0.9.5.jarのローカルコピーに奴隷にSPARK_CLASSPATHの設定に問題
  • が解決しないことはは、問題を解決しない

私が知っている限り、SPARK_CLASSPATHは推奨されていません。提出する際には--jarsに置き換えてください。私はむしろ廃止された機能に依存しないだろう。 pio trainまたは私のインフラストラクチャを呼び出すときに私が紛失しているものはありますか?エグゼキュータがドライバから依存関係をフェッチする際に欠陥(競合状態など)がありますか?

答えて

1

java.lang.NoClassDefFoundError: Could not initialize classは、実際には依存関係が存在しないことを意味するのではなく、むしろ名前の付いていない例外であり、実際の問題はクラスローダーがクラスの読み込みに問題があったことです。実際の問題は、java.lang.ExceptionInInitializerErrorの形式で報告され、静的コードブロックからスローされる可能性があります。 java.lang.NoClassDefFoundErrorjava.lang.ClassNotFoundExceptionの違いは分かりませんが、後者は実際に依存関係がないことを意味します(this questionなどが詳細を示しています)。

関連する問題