Hadoopは初めてです。マッパークラスのmap関数内のmain関数(Javaプログラム)からコマンドライン引数にアクセスしたい。これを行う方法を提案してください。
Hadoop 0.2 、新しいMR APIが導入されました。新しい(oahmapreduceパッケージ)と古いMR API(oahmapred)の機能に大きな違いはありませんが、マッパーとレデューサー内でデータを取得できる点が異なります。新しいAPI。 Arnonが言及しているのは、古いAPIです。
新旧のAPIを使用してパラメーターを渡すには、これを確認してください article 。
構成にパラメーターをぶら下げることで、パラメーターを渡すことができます
JobConf job = new JobConf(new Configuration(), TheJob.class);
job.setLong("Param Name",longValue)
Configurationクラスにはいくつかのsetメソッド(Long、Int、Stringsなど)があるため、いくつかのタイプのパラメーターを渡すことができます。マップジョブでは、コンテキスト(getConfiguration)から構成を取得できます。
最近の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回呼び出されることに注意してください。