0

Hadoop を使用する Java プログラムを作成しました。「java -jar prog.jar」を使用してコマンド ラインからプログラムを実行すると、スタンドアロン モードで実行されることがわかります。プログラムを正常に実行するために、JobTracker デーモンと TaskTracker デーモンを実行する必要がないため、そのことがわかります。「hadoop jar prog.jar」を使用して (map/reduce デーモンをオフにして) プログラムを実行すると、当然動作しません。

Java プログラムを疑似分散モードで実行したいのですが、設定ファイルが見つからないような気がします。設定ファイルがある場所を指すために「java -cp /usr/hadoop-1.1.1/conf -jar prog.jar」として実行しようとしましたが、まだダイスはありません。

クラスパスが間違っているか何かのような気がします。私は初心者なので、どんな助けも大歓迎です。ありがとう、

mj

これは、構成オブジェクトを使用してコードを開始するジョブのスニペットです。

    Configuration config = new Configuration();     
    Job job = new Job(config);
    job.setJobName("Test");
    job.setJarByClass(MyMapper.class);      

    job.setMapperClass(MyMapper.class);
    job.setReducerClass(MyReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    job.setMapOutputKeyClass(LongWritable.class);
    job.setMapOutputValueClass(Text.class);

    job.setInputFormatClass(MyInputFormat.class);

    FileInputFormat.addInputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName));
    FileOutputFormat.setOutputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName + "-output"));

    job.waitForCompletion(true);
4

1 に答える 1

2

「java -jar prog.jar」を使用してコマンド ラインからプログラムを実行すると、スタンドアロン モードで実行されることがわかります。

本当じゃない。このjava -jarコマンドは、スタンドアロンの Java アプリケーションを実行するために使用されます。Hadoop ジョブを実行するには、hadoop jar前述のコマンドを使用する必要があります。

タスクを実行する前に、環境で Hadoop をセットアップする必要があります。準備ができていない場合は、この投稿または公式ドキュメントの手順に従ってください。Hadoop ディストリビューションで提供されているいくつかの例を実行して、セットアップを確認できます。

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'

上記のコマンドが正常に実行されたら、独自のタスクを試すことができます。

編集:次Runtime.execのように使用して呼び出すことができhadoop jarます:

Process p = Runtime.getRuntime().exec(cmd);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = input.readLine();
while (line != null) {
  // process output of the task
  // ...
}
input.close();
// wait for the task complete
p.waitFor();
int ret = p.exitValue();
// process the task result
// ...
于 2013-02-15T15:29:48.663 に答える