2

システムパラメーター (-Dmy_param=XXX など) を渡して、hadoop map reduce フレームワークの関数をマップする方法はありますか? Hadoop クラスターへのジョブの送信は、.setJarByClass() を介して行われます。マッパーでは構成を作成する必要があるため、構成可能にしたいので、プロパティファイルを介した標準的な方法で問題ないと思いました。プロパティが設定されているパラメータを渡すのに苦労しています。別の方法は、提出された jar にプロパティ ファイルを追加することです。誰かがそれを解決する方法を経験していますか?

4

1 に答える 1

8

ジョブでこれをまだ使用していない場合は、Hadoop ジョブを実行するために GenericOptionsParser、Tool、および ToolRunner を試すことができます。

注: MyDriver は Configured を拡張し、Tool を実装します。そして、あなたの仕事を実行するには、これを使用します

hadoop -jar somename.jar MyDriver -D your.property=value arg1 arg2

詳細については、このリンクを確認してください

私が用意したサンプルコードは次のとおりです。

public class MyDriver extends Configured implements Tool {

  public static class MyDriverMapper extends Mapper<LongWritable, Text, LongWritable, NullWritable> {

    protected void map(LongWritable key, Text value, Context context)
      throws IOException, InterruptedException {
      // In the mapper you can retrieve any configuration you've set
      // while starting the job from the terminal as shown below

      Configuration conf = context.getConfiguration();
      String yourPropertyValue = conf.get("your.property");
    }
  }

  public static class MyDriverReducer extends Reducer<LongWritable, NullWritable, LongWritable, NullWritable> {

    protected void reduce(LongWritable key, Iterable<NullWritable> values, Context context) 
      throws IOException, InterruptedException {
      // --- some code ---
    }
  }

  public static void main(String[] args) throws Exception {
    int exitCode = ToolRunner.run(new MyDriver(), args);
    System.exit(exitCode);
  }

  @Override
  public int run(String[] args) throws Exception {
    Configuration conf = getConf();
    // if you want you can get/set to conf here too.
    // your.property can also be file location and after
    // you retrieve the properties and set them one by one to conf object.

    // --other code--//
    Job job = new Job(conf, "My Sample Job");
    // --- other code ---//
    return (job.waitForCompletion(true) ? 0 : 1);
  }
}
于 2013-07-20T08:47:37.660 に答える