在map之前,根據輸入檔案建立inputsplit
➢輸入分片儲存的是分片長度和記錄資料位置的陣列
block和split的區別
1、block是資料的物理表示
2、split是塊中資料的邏輯表示
3、split劃分是在記錄的邊界處
4、split的數量應不大於block的數量(一般相等)
maptask並行度由客戶端提交job時的切片個數決定
maptask工作機制:read讀取階段->map處理階段->collect收集階段->spill溢寫階段->combine階段
*reducetask的數量可以直接手動設定:job.setnumreducetasks(num);
1、reducetask=0 ,表示沒有 reduce 階段,輸出檔案個數和 map 個數一致
2、reducetask 預設值就是 1,所以輸出檔案個數為乙個
3、如果資料分布不均勻,就有可能在 reduce 階段產生資料傾斜
4、如果分割槽數不是1,但是reducetask為1,不執行分割槽過程
*reducetask工作機制:copy階段->merge階段->sort階段->reduce階段
1、client向resourcemanager提交任務申請,rm找到nodemanager並啟動乙個
和reducetask;
2、在maptask上讀取檔案,由textinputformat指定讀取規則,呼叫recordreader
方法按行讀取,將行號和每行資料組成檔案塊進行返回,返回的longwritable和text
3、每次獲取的行的偏移量和每一行內容通過map()方法進行邏輯運算形成新的鍵值
對,通過context物件寫到outputcollector中;
4、outputcollector把收集到的鍵值對傳送到環形緩衝區,就進入了shuffle過程.
環形緩衝區的預設大小為100m,當資料累計到其大小的80%,就會觸發溢位;
5、spill溢位前是需要對資料進行分割槽和排序的,如果沒有設定分割槽器,就會呼叫系統
預設的分割槽方法,對環形緩衝區的每個鍵值對hash乙個partition值,相同值得分為同
乙個區,分割槽數跟numreducetasks相關。然後再對key值進行公升序排序;
6、環形緩衝區中分割槽排序後的資料溢位到檔案中,如果map階段處理的資料量較大,
則會溢位多個小檔案。如果設定了combiner,相同key的value值相加,當處理資料量
較大時,目的是讓盡可能少的資料寫入到磁碟,提高執行效率,否則檔案中將存在多個
相同的key;
7、多個溢位的小檔案會被歸併排序為乙個大檔案,大檔案中的資料仍然是分割槽且分
區有序的;
區號去每個不同的map task節點上去取相同分割槽的資料,然後將取過來的資料在進行
merge合併成乙個大檔案,大檔案是按照k有序的,此時,shuffle過程結束;
9、在reduce task運算過程中,首先呼叫groupingcomparator對大檔案的資料進行
分組,每次取出一組鍵值,通過自定義的reduce()方法進行邏輯處理,然後根據
outputformat指定的輸出格式將資料寫到hdfs檔案中。輸出檔案的個數與reduce
個數一致。
public
class
extends }}
public
class
wordreducer
extends
reducer
count.
set(sum)
; context.
write
(key,count);}
}
public
class
wordtest
}
Mapreduce工作原理及流程
乙個mapreduce作業在hado上執行的整個過程可以分為4個實體 1 客戶端,提交mapreduce作業 在客戶端上使用runjob 方法來新建jobclient例項和呼叫它的submitjob 方法。提交作業後,runjob將每秒輪詢作業的進度,如果發現與上乙個記錄不同,便把報告顯示到控制台。...
MapReduce工作原理
本文的目錄 1.mapreduce作業執行流程 2.map reduce任務中shuffle和排序的過程 mapreduce作業詳細的執行流程 流程分析 1.在客戶端啟動乙個作業。2.向jobtracker請求乙個job id。3.將執行作業所需要的資源檔案複製到hdfs上,包括mapreduce程...
map reduce工作原理
下面的圖來自南京大學計算機系黃宜華老師開設的mapreduce課程的課件,這裡稍作整理和 總結。本文旨在對接觸了mapreduce之後,但是對mapreduce的工作流程仍不是很清楚的人員,當然包括博主自己,希望與大家一起學習。mapreduce借鑑了函式式程式語言lisp中的思想,lisp lis...