我有一個場景,我不確定減少處理器位置的位置。Hadoop減速器:如何確保減速器均勻地運行在多個節點上
ⅰ)我有一個輸入的文本文件,它具有整數的1000的以平衡取值範圍爲1和4
ⅱ)讓我們假設有一個4節點集羣12個槽的每個節點之間其中4個被分配爲減速器 - 給我們總共16個減少插槽
三)我已經設置在駕駛員減速的數量:
jobConf.setNumReduceTasks(4);
III)和最後給我一個分區方法是
public class MyPartitioner extends Partitioner<Text,Text>{
@Override
public int getPartition(Text key, Text value, int numPartitions) {
return Integer.parseInt(key.toString());
}
}
1) i。 如何強制它在每個節點上使用1個縮減器(使其他3個本地縮減器處於空閒狀態)而不是在每個節點上運行多個縮減器來處理縮減IE如何確保不在一個節點上使用4個插槽節點並且在節點上有12個空閒空閒。
ii。 Hadoop MR管理資源說:「節點X是最空閒的,我會在那裏產生一個reducer ...」
2)如果你有一個關鍵歪斜,但打算分組,那麼你能產生該密鑰的多個reducer,例如,將一個隨機整數添加到值爲「4」的種子值,並使用分區器在reducer 4,5,6和7中添加3個額外的reducer以處理值「4」?
jobConf.setNumReduceTasks(7);
和
public class MyPartitioner2 extends Partitioner<Text,Text>{
@Override
public int getPartition(Text key, Text value, int numPartitions) {
int p = Integer.parseInt(key.toString());
if (p == 4){return p + (new Random()).nextInt(4);}//extra 3 partitions...
return p;
}
}
但願歪斜的工作?
很好的參考 - 我錯過了這些聲明的含義,最初由於突出了這一點。我假設這是可以減少密鑰對的簡單減少 – rupert160
是 - 身份映射器沒有自定義分區器和您當前使用的同一個reducer –