Hadoop的分区程序,用于密钥的前两个单词

时间:2011-12-23 04:46:56

标签: hadoop mapreduce

当我执行Hadoop流媒体时。有mapper的输出(Key,Value) 关键是用白色空格分隔的单词序列。

我想使用返回前两个字的哈希值的分区器。

所以,实现为

public static class CounterPartitioner extends Partitioner<Text, IntWritable> {
    @Override
    public int getPartition(Text key, IntWritable value, int numPartitions) {
        String[] line = key.toString().split(" ");
        String prefix = (line.length > 1) ? (line[0] + line[1]) : line[0];
        return (prefix.hashCode() & Integer.MAX_VALUE) % numPartitions;
    }
}

我的问题是 有没有办法使用内置的Hadoop库和修改配置,如

mapred.output.key.comparator.class
stream.map.output.field.separator
stream.num.map.output.key.fields
map.output.key.field.separator
mapred.text.key.comparator.options
...

提前致谢。

1 个答案:

答案 0 :(得分:2)

  

当我执行Hadoop流媒体时。有mapper的输出(Key,Value)键是一个用空格分隔的单词序列。

     

我的问题是有没有办法使用内置的Hadoop库和修改配置,如

     

mapred.output.key.comparator.class   stream.map.output.field.separator

内置Hadoop库基于Java,流式传输的目的是使用除Java以外的其他语言与STDIO / STDOUT对话。

我没有看到使用使用Java构建的Hadoop API更改流相关属性的目的。

BYW,除了在配置文件和命令提示符中设置配置属性外,还可以使用Configuration#set来设置配置属性。