2017-03-31 40 views
0

我已經實現了基於我的邏輯的自定義分區,並且我能夠正確地獲取文件。但是由於條件,一些reducer的數據量非常大並導致延遲減速階段。如何在自定義分區程序Hadoop中設置每個reducer的輸出文件號

所以有什麼辦法可以在一個reducer輸出文件中創建很多小文件。

這裏是我的自定義partioner

public class MyPartioner extends Partitioner<Text, IntWritable> { 
    public int getPartition(Text key, IntWritable value, int setNumRedTask) { 
    String str = key.toString(); 
    if (str.contains("Japan|2014")) { 
    return 0; 
    } else if (str.contains("Japan|2013")) { 
    return 1; 
    } else if (str.contains("Japan|2012")) { 
    return 2; 
    } else if (str.contains("Japan|2011")) { 
    return 3; 
    } else 
    return 4; 
    } 

第一種情況有一個像20 GB的數據非常龐大的數量,但最後將有12萬桶。

回答

0

您的輸入集有很多記錄「Japan | 2014」。

最簡單的方法是添加「日本| {月} | 2014」或使用多輸出來實現相同。

+0

是的,我可以使用MultiOutput,但它會創建更多的文件,因爲我從HBase有200個區域讀取記錄,因此它會創建200個輸出文件。但在我的情況下,我需要一個日本輸出文件?2014 。 – SUDARSHAN

相關問題