2011-12-23 4 views
1

私はHadoopストリーミングを実行するとき。マッパー(Key、Value)の出力があります。 キーは空白で区切られた単語シーケンスです。キーの最初の2つの単語のためのHadoopのパーティショナー

最初の2つの単語のハッシュ値を返すパーティショナーを使用したいと思います。だから、

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 
... 

よう設定を変更する感謝を使用して、方法があります。

答えて

2

Hadoopストリーミングを実行するとき。 mapper(Key、Value)の出力があります。このキーは空白で区切られた単語列です。

私の質問がある構成を使用して内蔵のHadoopのライブラリと修正することにより方法があるような

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

組み込みのHadoopライブラリはJavaに基づいており、ストリーミングの目的はSTDIO/STDOUTと通信するJava以外の言語を使用することです。

Javaを使用して構築されたHadoop APIを使用してストリーミング関連のプロパティを変更する目的はありません。

BYW、Configuration#setを使用して、設定ファイルとコマンドプロンプトから設定プロパティを設定することができます。

関連する問題