2017-03-25 21 views
1

私はEclipseからエクスポートされたjarファイルを持っています(Runnable JAR >>必要なライブラリをサブフォルダにコピーしてください)。あなたがメインクラスを設定しなかった場合は、jarファイル内の別のメインクラスを実行したい場合はHadoopのjava jarファイルからクラスを実行するには?

java -jar MyTest.jar arguments 

のか:あなたはmanifest.xmlにでメインクラスを設定している場合

Javaでは、あなたは実行することができますmanifest.xmlで次のコマンドを実行します。

のHadoopで
java -cp MyTest.jar MyOtherMainClass arguments 

をメインクラスは、あなたが実行できるのmanifest.xmlに設定されている場合:

hadoop jar MyTest.jar arguments 

あなたが入力した場合:

hadoop jar MyTest.jar MyOtherMainClass arguments 

それはjarファイルのオリジナルのメインクラスの「引数」配列の引数(クラスは実行しないよう)としてMyOtherMainClassを検討します。

jarファイルで別のメインクラスを実行する場合は、何を入力しますか?

は、私は次のように何かを期待する:

hadoop java -cp MyTest.jar MyOtherMainClass arguments 

をそれは与える:

Error: Could not find or load main class java 

お知らせ:私はから "Hadoopの" を削除した場合 "のHadoopのjava -cp MyTest.jar MyOtherMainClass引数" を正常に起動します

答えて

1

問題はEclipseからjarファイルのメインクラスを設定し、それであなたが望むクラスを実行できないようにします。 http://www.roman10.net/2012/07/26/specify-the-main-class-in-a-jar-file-for-hadoop/

が、私は場合に同じテキストを入力:

hadoop jar MyTest.jar MyOtherMainClass arguments 

はこちらをご覧ください:あなたがしなければならないのは、jarファイルのManifest.xmlファイルからメインクラスを削除し、実行しています削除されたURL:

JADファイルのHadoopサポートの実行。通常のJava実行で実行可能なjarファイルについては、前の記事で説明したように、メインクラスをコマンドラインで指定することができます。jarファイルのメインクラスを切り替えます。

ただし、hadoopで実行される実行可能なjarファイルでは、ルールが少し異なります。

jarファイルにマニフェストファイルで指定されたメインクラスが含まれている場合、コマンドが別のメインクラスを指定していても、hadoopはメインクラスを取得します。これは、マニフェストファイル内のメインクラスを上書きするメインクラスを指定できる通常のJava実行とは異なります。 jarファイルにマニフェストファイルのメインクラスが含まれていない場合、hadoopはmainクラスを指定することを許可します。 eclipseでは、プロジェクトを実行可能なjarファイルとしてエクスポートすると、起動時にメインクラスが常に要求されます。

選択したメインクラスがマニフェストファイルに配置されます。以下は、META-INF/MANIFESTの内容です。メインクラスがHelloWorldに設定されているhelloworldプロジェクトのMFファイル。

マニフェスト - バージョン:1.0 クラスパス:。 メインクラス:hello.HelloWorld ファイル抽出プログラムを使用してjarファイルをブラウズし、ファイルエディタを使用してマニフェストファイルを開き、最後の行を削除してメインクラス設定を削除し、jarファイルに変更を保存することができますプロンプトが表示されたらこれによりメインクラスなしで実行可能なjarファイルが作成されます。以下のサンプル・コマンドに示すように変更したJARファイルは、その後、ユーザ供給されたメインクラス構成でHadoopのに使用することができる

$のHadoopのジャーhello.jar hello.HelloWorld

+0

こんにちは、私は非常にばかげた問題で、私は在庫がある。 私はそれをローカルに.jarに変換して問題なくローカルに実行できるシンプルな(ちょうど印刷用の世界の).classファイルをローカルに持っています。しかし、私がhadoopクラスタに入れたとき、私は愚かなバグに直面する:JARは存在しないか、通常のファイルではない:/usr/reihan/test.jar 私はhadoop-builtin-例は問題なく単語カウントのようですが、私は自分自身の瓶を走らせたいときにこの問題に直面します。何か案が? –

+0

まず、jarファイルを適切に生成しているかどうかを確認してください。アドバイスはeclipseを使用して生成します。次に、jarファイルのフルパスを使用して、HDFSにすでに格納されているかどうかを試してみてください。第3に、マニフェストファイルにメインクラスを設定してください。最後に、うまくいかない場合は、使用しているコマンドのコメントとjarファイルへのリンクを書きます。 –

関連する問題