小编Iro*_*arf的帖子

在Java Hadoop中使用KeyFieldBasedPartitioner和Secondary Sorting类似于Hadoop Streaming

使用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    
Run Code Online (Sandbox Code Playgroud)

我想在我的Java main()方法中做同样的事情.排序可以像这样实现:

job.setSortComparatorClass(KeyFieldBasedComparator.class);    
KeyFieldBasedComparator.setKeyFieldComparatorOptions(job, "-k 1,2");
Run Code Online (Sandbox Code Playgroud)

但是,.setKeyFieldPartitionerOptions该类中的方法KeyFieldBasedPartitioner不是static:

KeyFieldBasedPartitioner partitioner = new KeyFieldBasedPartitioner();
partitioner.setKeyFieldPartitionerOptions(job, "-k 1,2");
Run Code Online (Sandbox Code Playgroud)

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

job.setPartitionerClass(KeyFieldBasedPartitioner.class); 
Run Code Online (Sandbox Code Playgroud)

在这种情况下如何设置上述选项?当然,我可以实现我自己的分区器类,但为什么要付出一个简单的方法?

java hadoop partitioner

6
推荐指数
0
解决办法
474
查看次数

标签 统计

hadoop ×1

java ×1

partitioner ×1