MapReducec執行過程分幾個階段

2021-09-19 15:21:03 字數 1054 閱讀 1110

此階段,每個輸入檔案被分片輸入到map。如乙個檔案有200m,缺省會被分成2片,因為每片的預設最大值和每塊的預設值128m相同。

如果輸入為大量的小檔案,則會造成過多的map數,導致效率下降,可採用壓縮輸入格式combinefileinputformat

此階段,執行map任務。map數由分片決定,若要增加map數,可增大mapred.map.tasks,若減少map數,可增大mapred.min.split.size

此階段,將map的輸出經過「整理」後給到reduce,也稱為「混洗」。分為map端操作和reduce端操作。

在map端,map的輸出先寫入快取,當每次快取快滿時,由快取「溢寫」至磁碟,每次溢寫都先進行「分割槽」,並對每個分割槽的資料進行「排序」和「合併」(可選)。一般會產生多個溢寫的檔案,這些檔案會在map端先被「歸併」為乙個大的磁碟檔案,通知reduce任務來領取自己的分割槽。

在reduce端,每個reduce任務會從多個map任務領取檔案,然後將這些檔案進行「歸併」,交給reduce任務。

合併(combine)和歸併(merge)的區別:對於兩個鍵值對和,如果合併,會得到,即復用reduce的邏輯(也可以自己實現combiner類);如果歸併,會得。combine為可選,可通過呼叫job.setcombinerclass(myreduce.class)設定這一操作。
執行reduce任務。reduce數量由分割槽數決定,結果檔案的數量也由此決定,且記錄預設按key公升序排列。reduce數量可通過mapred.reduce.tasks設定,或在**中呼叫job.setnumreducetasks(int n)方法。

mysql 執行過程 MySQL的執行流程分析

mysql的執行流程 那麼,要知道我們平時常說的優化sql到底是在優化些什麼,就必須弄懂mysql的執行流程。而這個專題將系統化的由淺到深講解mysql一些高階用法。打算先講很多人關注的使用方式 增刪改查以及其優化 然後就講資料庫和表的操作 很多我們學習忽略的地方 接著就是引擎還有更高階的查詢等等。...

init執行過程

一。init init是核心啟動後執行的第乙個應用程式,主要工作就是完成對一系列作業系統啟動時就需要執行的應用程式的呼叫。init的原始碼在sysvinit包中,可以從http freshmeat.net projects sysvinit 獲得更多資訊。當然在linux世界裡,還有其它型別的ini...

程式執行過程

要理解乙個程式的執行過程,首先要理解什麼是編譯器。我們用c語言寫的程式,計算機只能識別機器語言 二進位制指令 計算機並不能理解。因此,必須 將c語言轉換為機器語言。編譯器就是用來實現這一功能的。編譯器將源 檔案按照一定的對應規則映射程計算機能夠識別的二進位制指令 關於原始檔 目標檔案和可執行檔案 原...