0

コンピューターにHadoopを疑似分散モードでセットアップしました。「Hadoop-ADefinitiveGuide」の付録Aの指示に従って、Hadoopを疑似分散モードでセットアップしました。

ただし、次のプログラムの出力から、Hadoopがスタンドアロンモード(つまりローカルモード)で実行されていると推測しても安全です。

public static void main(String[] args) {
    Configuration conf = new Configuration();
    System.out.println(conf);
    System.out.println(conf.get("fs.default.name"));
}

出力:

Configuration: core-default.xml, core-site.xml
file:///

出力はfile:///の代わりになりhdfs://localhostます。ただし、のプロパティcore-site.xmlは適切に設定されています。

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://localhost/</value>
        </property>
</configuration>

また、Eclipseからテストジョブを送信すると、jobTrackerブラウザーUIに表示されません。これは、Hadoopがローカルモードで実行されていることが原因であるとどこかで読みました。

構成の何が問題になっているのか、疑似分散モードを有効にする方法を教えてください。fs.default.nameデフォルトのXMLファイルのプロパティをファイルで指定したプロパティでオーバーライドできないのはなぜcore-site.xmlですか?

4

1 に答える 1

1

プログラムをどのように立ち上げていますか?bin / hadoopスクリプトを使用していない場合、conf / *。xml内の構成ファイルはクラスパス上にないため、それらの値はすべて無視されます。

ToolRunnerランチャーも使用する必要があります。

public class MyJobDriver extends Configured implements Tool {
  public static void main(String args[]) {
    ToolRunner.run(new MyJobDriver(), args);
  }

  public int run(String args[]) {
    Job job = new Job(getConf());
    Configuration conf = job.getConfiguration();

    System.out.println(conf);
    System.out.println(conf.get("fs.default.name"));

    return 0;
  }
}

このコードから注意すべき他のいくつかのポイント:

  • getConf()によって提供される構成を使用してジョブを作成することを忘れないでください。これにより、汎用オプションパーサーを使用して、いくつかの一般的なコマンドラインスイッチ(-files、-jt、-fs、= Dkey = valueなど)を解析できます。
  • いくつかのカスタムパラメータを設定するための構成が必要な場合-job.getConfiguration()を使用してジョブコピーを取得します-ジョブはそれを構築するときにディープコピーを作成し、ジョブの実行時に元の変更は適用されません

次に、bin/hadoopスクリプトを使用してジョブが実行されていることを確認します。

#> bin/hadoop MyApp.jar a.b.c.MyAppDriver

Eclipseから起動する場合は、$ HADOOP_HOME / confフォルダーがクラスパス上にあることを確認し、構成オブジェクトがToolRunnerによって作成されるときにxmlconfファイルがクラスパス上にあることを確認します。

于 2012-07-14T11:49:06.513 に答える