在javahadoop中使用keyfieldbasedpartitioner和二级排序类似于hadoop流

yrefmtwq  于 2021-05-29  发布在  Hadoop
关注(0)|答案(0)|浏览(353)

使用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

我想在我的java中也做同样的事情 main() 方法。排序可以这样实现:

job.setSortComparatorClass(KeyFieldBasedComparator.class);    
KeyFieldBasedComparator.setKeyFieldComparatorOptions(job, "-k 1,2");

方法 .setKeyFieldPartitionerOptions 在班上 KeyFieldBasedPartitioner 然而,事实并非如此 static :

KeyFieldBasedPartitioner partitioner = new KeyFieldBasedPartitioner();
partitioner.setKeyFieldPartitionerOptions(job, "-k 1,2");

在job对象中,我只能设置一个类,但是:

job.setPartitionerClass(KeyFieldBasedPartitioner.class);

在这种情况下,如何设置上述选项?当然,我可以实现自己的partitioner类,但是如果有一个简单的方法,为什么还要这么努力呢?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题