当我执行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
...
提前致谢。
答案 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来设置配置属性。