web-dev-qa-db-ja.com

Hadoopのマップ関数にパラメーターを渡す

Hadoopは初めてです。マッパークラスのmap関数内のmain関数(Javaプログラム)からコマンドライン引数にアクセスしたい。これを行う方法を提案してください。

19
Pooja N Babu

Hadoop 0.2 、新しいMR APIが導入されました。新しい(oahmapreduceパッケージ)と古いMR API(oahmapred)の機能に大きな違いはありませんが、マッパーとレデューサー内でデータを取得できる点が異なります。新しいAPI。 Arnonが言及しているのは、古いAPIです。

新旧のAPIを使用してパラメーターを渡すには、これを確認してください article

19
Praveen Sripati

構成にパラメーターをぶら下げることで、パラメーターを渡すことができます

 JobConf job = new JobConf(new Configuration(), TheJob.class);
 job.setLong("Param Name",longValue)

Configurationクラスにはいくつかのsetメソッド(Long、Int、Stringsなど)があるため、いくつかのタイプのパラメーターを渡すことができます。マップジョブでは、コンテキスト(getConfiguration)から構成を取得できます。

14

最近のHadoop(例:> = 0.2から2.4+まで)では、ジョブの構成中にこの種のオプションを設定します。

_conf = new JobConf(MyJarClass);
conf.set("myStringOption", "myStringValue");
conf.set("myIntOption", 42);
_

そして、mapper/reducerクラスのconfigure()メソッドでこれらのオプションを取得します。

_public static class MyMapper extends MapReduceBase implements Mapper<...> {

    Integer myIntegerOption;
    String myStringOption;

    @Override
    public void configure(JobConf job) {
        super.configure(job);
        myIntegerOption = job.getInt("myIntOption", -1); 
        // nb: last arg is the default value if option is not set
        myStringOption = job.get("myStringOption", "notSet");
    }

    @Override
    public void map(... key, ... value, 
                    OutputCollector<..> output, Reporter reporter) throws IOException {
        // here you can use the options in your processing
        processRecord(key, value, myIntOption, myStringOption);
    }

}
_

configure()は、レコードがマップまたはリデュースに渡される前に1回呼び出されることに注意してください。

4
oDDsKooL