2017-04-26 15 views
2

sbtで作成されたスパーク・ストリーミング・アプリケーションを作成しました。それはローカルで完璧にうまく動作しますが、クラスタにデプロイした後は、fat jar(jar tvfを使用して確認)で明確に書いたクラスについて不平を言います。以下は私のプロジェクト構造です。NoClassDefFoundError:スパーク・スタンドアロン・クラスタにデプロイした後にXXXクラスを初期化できませんでした

$SPARK_HOME/bin/spark-submit \ 
    --class mainMethodEntryObject \ 
    --master REST_URL\ 
    --deploy-mode cluster \ 
    hdfs:///FAT_JAR_PRODUCED_BY_SBT_ASSEMBLY 

具体的なエラーメッセージ:

java.lang.NoClassDefFoundError: Could not initialize class XXX 
+0

ジョブを起動するコマンドを追加できますか? 'jar tvf'を実行したときに返される応答は? –

+0

@techsquids確かに、上記を参照してください –

+0

'jar tvf'それはjarのルートにpackagenameを記載していますか? –

答えて

0

それは、コードなしで言うのは難しいのですが、それはのように見えるXXXオブジェクトは、火花を約

src 
`-- main 
    `-- scala 
     |-- packageName 
     | `-- XXX object 
     `-- mainMethodEntryObject 

私のコマンドを発行し文句一つですあなたのXXXオブジェクトのシリアル化の問題。私は完全に理由を理解しているとは言えませんが、オブジェクトがエグゼキュータに送られていないという点があります。

私にとってうまくいくソリューションは、オブジェクトをSerializableに拡張されたクラスに変換し、必要な場所でインスタンス化することです。私は間違っていないんだのであれば基本的に、あなたはあなたのメインの中test.fooとして使用される

object test { 
    def foo = ... 
} 

は持っているが、あなたは最初にval test = new Testを持って、あなたのメインの中で、最小

class Test extends Serializable { 
    def foo = ... 
} 

で必要と以上です。

関連する問題