web-dev-qa-db-ja.com

jarファイルをhadoopで実行する方法は?

Java from this blog を使用して次のステートメントを使用してjarファイルを作成しました

javac -classpath /usr/local/hadoop/hadoop-core-1.0.3.jar -d /home/hduser/dir Dictionary.Java

/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir

今私はこのjarをhadoopでさまざまなコマンドのヒットとトライアルで実行してみました

1hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar

出力:

Warning: $HADOOP_HOME is deprecated.

RunJar jarFile [mainClass] args...  

2 .hduser@ubuntu:~$ /usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary

出力:

Warning: $HADOOP_HOME is deprecated.

Exception in thread "main" Java.lang.ClassNotFoundException: Dictionary
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:423)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:356)
at Java.lang.Class.forName0(Native Method)
at Java.lang.Class.forName(Class.Java:264)
at org.Apache.hadoop.util.RunJar.main(RunJar.Java:149)

Jarをhadoopで実行するにはどうすればよいですか?私のプログラムの必要に応じて、適切なDFSロケーションがあります。

11
Arihant

私はあなたの問題を再現することができました。問題は、jarを作成する場所です。

基本的に、jarにパッケージ化しているディレクトリは、メインクラスファイルを見つける際にjarファイルを混乱させています。代わりにあなたがやってみると:

/usr/lib/jvm/jdk1.7.0_07/bin/jar cf Dictionary.jar /home/hduser/dir/Dictionary.class

つまり、クラスファイルを具体的にjarにパッケージ化してから実行します。

/usr/local/hadoop/bin/hadoop jar Dictionary.jar Dictionary

辞書と呼ばれるクラスにメイン関数がある場合、問題なく動作します。

問題は、jar内に完全なディレクトリをパッケージ化する場合、jarもクラスファイルを見つけるためにディレクトリ構造を認識する必要があることです。このためには、クラスの場所を定義するために、明確に定義されたパッケージ階層が必要です。そのため、/home/hduser/dir/をjarにパッケージ化する場合、jarはこのディレクトリ構造の奥にあるクラスファイルの場所を認識しません。このためには、ディレクトリ構造に従って.Javaファイルにパッケージ名を追加する必要があります。たとえば、home.hduser.dir、およびhadoop jarコマンドの実行中に、パッケージ構造でクラス名を指定します。たとえば、home.hduser.dir.Dictionary

20
Abhishek Jain

以下のコマンドを使用して、hadoop jarファイルを[〜#〜] cli [〜#〜]から実行します。

hadoop jar <jarFileName> <mainClassname> <AnyCommandLineArguements>
7
Kumar Basapuram

私も同じ問題に遭遇し、コンソールには多くの情報は表示されませんが、

RunJar jarFile [mainClass] args ...

パッケージフォルダーの場所のjarを確認してください。直接的なアプローチは、パッケージがcom.company ...で始まることを試してください...

Jarファイルを解凍すると、「com」フォルダが最初のレベルのフォルダになります

1
Anirudh