0

私はEclipseでMapReduceプログラムを構築しており、jarを独自の実行構成で実行可能なjarとしてエクスポートしようとしています。実行構成で、メイン クラスを指定し、エクスポートされた jar を取得して、hadoop/playground フォルダーにドロップします。このコマンドで実行しようとすると:

hadoop jar playground/MyProg.jar "packageinfo" "input" "output"

入力パスが存在しないという PrivilegedAccessException が常に発生します。パッケージ構造と「入力」パスと「出力」パスの両方を確認しました。エクスポートされたjarの構造に関係していると思われます。

次の 2 つのコマンドを使用するのは非常に不便です。

$ javac -classpath *:lib/* -d playground/classes playground/src/WordCount.java
$ jar -cvf playground/WordCount.jar -C playground/classes/ .

これは、私の MapReduce プログラムが複雑になるにつれて特に当てはまります。

PrivilegedAccessExceptionを取得しないように、適切なディレクトリ構造でEclipseからjarをエクスポートする特定の方法があるかどうか疑問に思っていました。私にとって MapReduce 自体の開発は容易になってきていますが、デバッグ、デプロイ、テストは、特にすべてのターミナルとファイル システムのコマンドが非常に難解な Linux 環境では非常に困難であることが判明しています。このプロセスを理解するのに役立つすべての情報に感謝します。

MyJob.jar という名前のアプリケーションを実行しようとしたときのサンプル エラー メッセージは次のとおりです。

 hadoop jar playground/MyJob.jar src.main.myjob.MyJob /usr/root/MyJob/cite75_99.txt /usr/root/MyJob/cite75_99OUT.txt
Warning: $HADOOP_HOME is deprecated.

13/09/28 15:20:13 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
13/09/28 15:20:14 INFO util.NativeCodeLoader: Loaded the native-hadoop library
13/09/28 15:20:14 WARN snappy.LoadSnappy: Snappy native library not loaded
13/09/28 15:20:14 INFO mapred.JobClient: Cleaning up the staging area hdfs://localhost:9000/tmp/hadoop-root/mapred/staging/root/.staging/job_201309281443_0007
13/09/28 15:20:14 ERROR security.UserGroupInformation: PriviledgedActionException as:root cause:org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/root/src.main.myjob.MyJob
Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/root/src.main.myjob.MyJob
    at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:197)
    at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:208)
    at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:1081)
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:1073)
    at org.apache.hadoop.mapred.JobClient.access$700(JobClient.java:179)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:983)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:936)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:936)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:910)
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1353)
    at src.main.myjob.MyJob.run(MyJob.java:87)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at src.main.myjob.MyJob.main(MyJob.java:94)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:160)
4

0 に答える 0