Hadoop ストリーミングを使用する場合、パーティショナーとソーターは次のように設定および構成できます。
hadoop jar /opt/hadoop/hadoop-2.7.1/share/hadoop/tools/lib/hadoop-streaming-2.7.1.jar \
-D mapreduce.map.output.key.field.separator=. \
-D stream.map.output.field.separator= \
-D stream.num.map.output.key.fields=2 \
-D num.key.fields.for.partition=2 \
-D mapreduce.job.output.key.comparator.class=org.apache.hadoop.mapreduce.lib.partition.KeyFieldBasedComparator \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
main()
Javaメソッドでも同じことをしたいと思います。並べ替えは次のように実行できます。
job.setSortComparatorClass(KeyFieldBasedComparator.class);
KeyFieldBasedComparator.setKeyFieldComparatorOptions(job, "-k 1,2");
ただし、.setKeyFieldPartitionerOptions
クラスのメソッドはそうではありません:KeyFieldBasedPartitioner
static
KeyFieldBasedPartitioner partitioner = new KeyFieldBasedPartitioner();
partitioner.setKeyFieldPartitionerOptions(job, "-k 1,2");
ただし、ジョブ オブジェクトではクラスしか設定できません。
job.setPartitionerClass(KeyFieldBasedPartitioner.class);
この場合、上記のオプションをどのように設定できますか? もちろん、独自のパーティショナー クラスを実装することもできますが、簡単な方法が必要な場合、なぜその努力をするのでしょうか?