0

データを s3 からローカル hdfs に移動するために distcp を実行しているときに、データをコピーするために起動された map reduce ジョブ中に次の例外が発生します。

Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster

可能なすべてのオンライン記事をチェックしました。私のyarn-site.xmlファイルには

<property> <name>yarn.application.classpath</name> <value> $HADOOP_CONF_DIR, $HADOOP_COMMON_HOME/*, $HADOOP_COMMON_HOME/lib/*, $HADOOP_HDFS_HOME/*, $HADOOP_HDFS_HOME/lib/*, $HADOOP_MAPRED_HOME/*, $HADOOP_MAPRED_HOME/lib/*, $HADOOP_YARN_HOME/*, $HADOOP_YARN_HOME/lib/*, $HADOOP_HOME/share/hadoop/mapreduce/, $HADOOP_HOME/share/hadoop/mapreduce/lib/ </value> </property> クラスターのすべてのノードについて、私がチェックしたところ、それらの変数が設定され、適切なフォルダーを指しています。実際に$HADOOP_HOME/share/hadoop/mapreduce/それを指してhadoop-mapreduce-client-app-2.7.1.jarいるのは、何か提案が含まれているjarですorg.apache.hadoop.mapreduce.v2.app.MRAppMaster
??

4

3 に答える 3

4

私は同じ問題を抱えていて、解決するのに数日を費やしました. 行方不明の問題がありました

<property>
    <name>mapreduce.application.classpath</name>
    <value>
       $HADOOP_MAPRED_HOME/*,
       $HADOOP_MAPRED_HOME/lib/*,
       $MR2_CLASSPATH,
       $CDH_MR2_HOME
    </value>
</property>

mapred-site.xml で

これが私が通過しなければならなかった全体のパスです(誰かが同様の問題を調査する必要がある場合に備えて):ジョブの実行後、クライアントログに次のようなエラーが表示されました:

コンテナ起動からの例外:

org.apache.hadoop.util.Shell$ExitCodeException: 
    org.apache.hadoop.util.Shell$ExitCodeException: 
        at org.apache.hadoop.util.Shell.runCommand(Shell.java:505)
        at org.apache.hadoop.util.Shell.run(Shell.java:418)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
        at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:744)

    Container exited with a non-zero exit code 1

また、ジョブ実行ログでエラー: メイン クラス org.apache.hadoop.mapreduce.v2.app.MRAppMaster が見つからないかロードできませんでした。

把握するには、yarn 構成のhadoop.log.dirオプションで定義されたNodeManagerホストのログ ディレクトリに移動します (私の場合は /var/log/cloudera_logs/hadoop-yarn/です)。そこにファイルhadoop-cmf-yarn-NODEMANAGER*が表示されます。スクリプトの実行や./containerディレクトリ内のクリーンアップ プロセスなど、すべてのワークフローに従うのに役立ちます。ここで、スクリプトdefault_container_executor.shに注目してください。このスクリプトは通常、ジョブを起動する前にすべてのシステム変数をエクスポートします。私の場合、$HADOOP_MAPRED_*に関連するものはすべて欠落していました。

次に、サーバー構成オプションを調べて、すでに適切な変数を指しているmapreduce.application.classpathオプションを見つけました。何らかの理由で、ジョブの実行中に適用できませんでした。

この後、クライアント側で同じ変数をmapred-site.xmlに追加しようとしましたが、うまくいきました。

$HADOOP_MAPRED_HOMEは、org.apache.hadoop.mapreduce.v2.app.MRAppMasterがパッケージ化されたhadoop-mapreduce-client-app-.jarの有効な場所を指す必要があることに注意してください。欠落しているクラスがどの jar に属するかわからない場合は、MAVEN CENTRAL で高度な検索を使用してください。

私の推測では、何らかの形でyarn.nodemanager.env-whitelistオプションに関連している可能性があります。Clouderaによると、「コンテナがNodeManagerのデフォルトを使用するのではなく上書きする可能性のある環境変数」ですが、それについてはわかりません。

于 2016-01-14T17:27:26.953 に答える