先看原始碼:
numpartitions =conf.getnumreducetasks();if (numpartitions > 1)
else
@override
public
int getpartition(k key, v value, int
numpartitions)
//預設分割槽是根據key的hashcode對reducetasks個數取餘得到的,使用者無法控制哪個key儲存到哪個分割槽
public
intgetpartition(k key, v value,
intnumreducetasks)
結論:1.reducetask的數量由job提交時的引數決定:job.setnumreducetasks()。設定為多少,就開啟多少個reducetask,預設為1。設定為0時,則表示沒有reduce階段,只有map階段。生成檔案數量由reducetask數量決定。
2.partitioner的數量由reducetask的數量決定,partitioner數量 =reducetask數量。
其中: 1)若reducetask = 1 ,無論使用者有沒有自定義分割槽規則,都只有乙個分割槽。
2)若設定reducetask >1,則 如果使用者沒有自定義partitioner,則按照預設的hashpartitioner對資料進行劃分。
如果使用者自定義了partitioner,則其中的分割槽的個數不能超過partittion的數量,否則會exception。
Hadoop如何計算map數和reduce數
hadoop在執行乙個mapreduce job之前,需要估算這個job的maptask數和reducetask數。首先分析一下job的maptask數,當乙個job提交時,jobclient首先分析job被拆分的split數量,然後吧job.split檔案放置在hdfs中,乙個job的maptas...
consumer和partition的數量建議
1.如果consumer比partition多,是浪費,因為kafka的設計是在乙個partition上是不允許併發的,所以consumer數不要大於partition數 2.如果consumer比partition少,乙個consumer會對應於多個partitions,這裡主要合理分配consu...
Python高階函式之map與reduce
python為我們提供了多種高階函式,map fun,x 的作用是將fun函式依次作用到x這種iterable型別上,並且返回乙個iterator型別。那麼什麼是iterable和iterator呢?簡單的說,反是可用於for迴圈的物件 諸如list,tuple,dict,str 被稱為iterab...