如下圖流程mr工作詳細執行流程
步驟詳細說明
1、獲取待處理檔案資訊,得到檔案大小,檔案儲存位置
2、根據切片引數,準備檔案切片資訊,如上假設按照預設塊大小切片
0-128m
129-200m
兩個資料片
3、切片完成有由客戶端向yarn提交:job資訊、split切片資訊、jar包
5、開啟的maptask按照切片資訊載入資料,預設是textinputformat所以資料載入規則是一次讀取一行,預設key是位元組偏移量,value為當前行資料
7、將運算後的k,v資料寫出到環形快取區。–shuffle開始位置
8、環形快取區預設100m,當資料達到80%對資料溢寫到本地檔案;
快取區大小可自行設定,如果伺服器配置高可提高大小,減少資料溢寫過程
9、從環形緩衝區不斷溢位本地磁碟檔案,可能會溢位多個檔案,在溢位過程及合併的過程中,都要呼叫partitioner進行分割槽和針對key進行排序;
10、當溢寫檔案達到一定數量後,多個溢位檔案會被合併成大的溢位檔案並排序,最後在map處理資料完畢後會將磁碟上所有檔案進行歸併排序合併成乙個大檔案,(減少reducetask讀取時的小檔案問題);
這裡使用歸併排序,因為資料本身已經有序,所以使用歸併效率高。
11、combiner合併:這步是自行設定的預設沒有,可以在不影響最終結果的情況下,在map段進行一次資料合併,也就是reduce計算。(切記不能影響最終結算結果的情況下使用),提前合併計算,會減少資料在網路中傳輸時間。
------以上時maptask端進行
12、所有maptask任務完成後,啟動相應的reducetask個數,非特殊情況下應將reducetask個數設定與分割槽個數一樣。
13、reducetask任務執行,每個reducetask根據自己的分割槽號,去各個maptask機器上拷貝相應的結果分割槽資料,如果檔案大小超過一定閾值,則溢寫到檔案上,如果磁碟上檔案數目達到一定閾值,則進行一次歸併排序、合併生成乙個更大的檔案,如果記憶體中的檔案大小或者數目超過一定閾值,則進行一次合併後將資料溢寫到磁碟上。當所有maptask上所有需要的資料拷貝完後,reducetask統一對記憶體與磁碟上的所有資料進行 一次歸併排序,合併成大檔案
14-15、對檔案內資料按照key分組,並且一次讀取一組資料到自己編寫的reduce邏輯運算函式中;
運算邏輯開始前資料分組後是:shuffle的結束過程
16、將reduce運算結果寫出到本地檔案中,預設是textoutputformat,reduce對檔案中分組資料運算結束後,整個mr任務工作流程結束。
shuffle機制:位於map向快取區中寫資料,到reduce將所有資料取到排序分組後,執行reduce方法前的乙個過程就是shuffle過程
MapReduce的工作流
如何將資料處理問題轉化為mapreduce模型 資料處理問題更複雜,通常是因為有更多的mapreduce作業,而不是更複雜的map函式和reduce函式,換而言之,通常是增加更多的作業,而不是增加作業的複雜度。對於更複雜的問題,可考慮比mapreduce更高階的語言,例如pig hive spark...
Python Signal 訊號 (二十一)
常用訊號型別sigint 終止程序 中斷程序,不可通過signal.signal 捕捉 相當於ctrl c sigterm 終止程序 軟體終止訊號,可通過signal.signal 捕捉 預設訊號,當os.kill 沒有指明訊號型別時,預設的是該訊號 sigkill 終止程序 殺死程序,不可捕捉 相...
C primer 二十一 模板
模板定義以關鍵字template開始,後跟乙個模板引數列表 template parameter list 這是乙個逗號分隔的乙個或多個模板引數 template parameter 的列表,用小於號 包圍起來。模板引數列表的作用很像函式引數列表。函式引數列表定義了若干特定型別的區域性變數,但並末指...