0

「Hadoop は、リデューサーに送信される前にマッパーによって出力されたデータを自動的にソートする」と言われているため、キー値をソートするために (Hadoop で) マップのみのジョブを実行します。

入力ファイル

2013-04-15      835352
2013-04-16      846299
2013-04-17      828286
2013-04-18      747767
2013-04-19      807924

Map(second_cloumn, first_column) は、output1 に示すようにこのファイルをソートする必要があると思います。これをローカルマシンで実行すると、実際に実行されました。しかし、これをクラスターで実行すると、出力は output2 のようになります。

出力1ファイル

747767  2013-04-18
807924  2013-04-19
828286  2013-04-17
835352  2013-04-15
846299  2013-04-16

output2 ファイル

835352  2013-04-15
747767  2013-04-18
807924  2013-04-19
828286  2013-04-17
846299  2013-04-16

出力1のように常になるようにするにはどうすればよいですか。2 番目の列で並べ替えるための別の提案をお待ちしています。

マッパー

public class MapAccessTime1 extends Mapper<LongWritable, Text, IntWritable, Text> {

    private IntWritable one = new IntWritable(1);
    private Text word = new Text();

    @Override
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        String line = value.toString();
        int val = 0;
        StringTokenizer tokenizer = new StringTokenizer(line);
        if (!line.startsWith("#")) {
            if (tokenizer.hasMoreTokens()) {
                word.set(tokenizer.nextToken());
            }
            if (tokenizer.hasMoreTokens()) {
                val = Integer.parseInt(tokenizer.nextToken());
                one = new IntWritable(val);
                context.write(one, word);
            }
        }
    }
}
4

1 に答える 1

0

MapOnly ジョブは、シャッフルと並べ替えを行いません。ID レデューサーを使用すると、問題が解決します。

于 2013-08-14T13:28:16.297 に答える