簡體   English   中英

運行本地hadoop map-reduce不會按預期對數據進行分區

[英]Running a local hadoop map-reduce does not partition data as expected

我有一個map-reduce程序,可以計算每十年Google ngrams中出現的雙字母組的數量。
我的分區是:

public static class PartitionerClass extends Partitioner<Bigram, IntWritable> {
    public int getPartition(Bigram key, IntWritable value, int numPartitions) {
        String combined=key.getFirst().toString()+key.getSecond().toString()+key.getDecade().toString();
        return combined.hashCode()%numPartitions;
    }
}

我添加了一個斷點,但是該程序沒有執行該代碼。
我的主要:

Configuration conf = new Configuration();
Job job = new Job(conf, "first join");
job.setJarByClass(WordCount.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setPartitionerClass(PartitionerClass.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));    ///SHOULD BE DECIDED
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
job.setMapOutputKeyClass(Bigram.class);
job.setMapOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true) ? 0 : 1);

代碼未按預期運行,某些數據已正確處理,而某些數據未正確處理。
我真的不知道該如何調試。
有任何想法嗎?

根據給定的分區數量,分區程序定義將哪個鍵分配給哪個分區。 它的工作不是設置分區的數量,而是設置其內容。 然后,每個縮減任務將處理一個分區,因此最后,分區數=縮減任務數=輸出文件數(正在使用默認設置,而不是MultipleOutputs)。

為了設置分區數,您應該使用:

job.setNumReduceTasks(n); ,其中n是您想要的數字。

有關如何設置此數字的說明(經驗法則,無嚴格要求),您可以閱讀此文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM