maptask執行流程:
執行流程文字表述:1、maptask呼叫fileinputformat的createrecordreader讀取分片資料。
2、每行資料讀取一次,返回乙個,其中k是offset,v是這一行的內容。
3、將交給maptask處理。
4、每對呼叫一次map方法,然後呼叫context.write(k,v)將資料寫出。
5、寫出的資料交給資料收集器outputcollector.collector()處理。
6、將資料寫入環形緩衝區,並記錄寫入的起始偏移量和終止偏移量,環形緩衝區預設大小為100m。
7、預設寫到80%的時候,要溢寫到磁碟,溢寫磁碟的過程中,資料繼續寫入剩餘的20%。
8、溢寫磁碟前要先進行分割槽然後分區內排序。
9、預設的分割槽是hashpartitioner,即key的hash % reudcenum。
10、預設的排序規則是key的字典順序,使用的是快速排序的演算法。如果有必要,可以在排序後,溢寫前呼叫combine(功能類似於reduce)函式進行計算,來達到減少資料的目的。
11、溢寫會形成多個檔案,當溢寫檔案數量大於3時,可以再次呼叫combiner函式來減少資料,溢寫檔案數量小於3時,則不呼叫。在maptask讀取完乙個分片資料後,先將環形緩衝區資料刷寫到磁碟。
12、將資料的多個溢寫檔案進行合併,分區內排序(歸併排序)。
13、合併的最終溢寫檔案可以使用壓縮技術來達到節省磁碟空間和減少向reduce階段傳輸資料的目的。
執行流程文字描述:1、reduce階段通過http協議抓取屬於自己分割槽的所有map的輸出資料(預設執行緒數是5,可以併發抓取)。
2、如果資料量小,會將抓取到的資料存在記憶體中,若資料量大,當達到本地記憶體的閾值時,會進行溢寫操作,溢寫前會進行合併和排序,這個過程中如果你設定有combiner,也是會啟用的,之後寫到磁碟中。
3、溢寫檔案可能會產生多個,因此在進入reduce之前會再次合併(合併因子是10),最後一次合併要滿足10這個因子,同時輸入給reduce函式,而不是產生合併檔案。
4、按照key對資料進行分組
5、對每一組資料reducetask都會呼叫reduce方法,進行聚合操作(人為設定聚合),之後在呼叫context.write(key,value)方法將結果寫出。
6、driver類中呼叫fileoutputformat.set()可以設定輸出路徑,一般設定為hdfs上。
下方來自:
shuffle即:map階段的輸出到reduce階段的輸入。Python之流程管理
條件判斷 if 條件表示式 塊else 塊if 條件表示式 塊elif 條件表示式 塊elif 條件表示式 else 塊num int input 請輸入你的分數 if num 90 print 優秀 elif 80input 函式 while迴圈 while 條件表示式 塊else 塊while ...
Linux之流程判斷
if 條件 then 執行動作 else 執行動作 fi root sr vim if test.sh bin bash if ls root dev null then echo hello world else echo error fi用於檢測某個條件是否成立 可以進行數值 字元 檔案三個方面...
MapReduce執行流程
mapreduce的大體流程是這樣的,如圖所示 由可以看到mapreduce執行下來主要包含這樣幾個步驟 1.首先對輸入資料來源進行切片 2.master排程worker執行map任務 3.worker讀取輸入源片段 4.worker執行map任務,將任務輸出儲存在本地 5.master排程work...