MapReduce程式執行流程
為了方便理解,先用作圖的方式進行闡述:
MapReduce程式的執行過程分為兩個階段:Mapper階段和Reducer階段。
其中Mapper階段可以分為6個步驟:
第一階段:先將HDFS中的輸入檔案file按照一定的標準進行切片,預設切片的類為FileInputFormat,通過切片輸入檔案將會變成split1、split2、split3……;隨後對輸入切片split按照一定的規則解析成鍵值對<k1,v1>,預設處理的類為TextInputFormat。其中k1就是我們常說的起始偏移量,v1就是行文字的內容。
第二階段:呼叫自己編寫的map邏輯,將輸入的鍵值對<k1,v1>變成<k2,v2>。在這裡要注意:每一個鍵值對<k1,v1>都會呼叫一次map函式。
第三階段:按照一定的規則對輸出的鍵值對<k2,v2>進行分割槽:分割槽的規則是針對k2進行的,比如說k2如果是省份的話,那麼就可以按照不同的省份進行分割槽,同一個省份的k2劃分到一個區。注意:預設分割槽的類是HashPartitioner類,這個類預設只分為一個區,因此Reducer任務的數量預設也是1.
注意:如reduce要求得到的是全域性的結果,則不適合分割槽!
第四階段:對每個分割槽中的鍵值對進行排序。注意:所謂排序是針對k2進行的,v2是不參與排序的,如果要讓v2也參與排序,需要自定義排序的類,具體過程可以參看博主文章。
第五階段:排序完之後要進行分組,即相同key的value放到同一個集合當中,例如在WordCount程式中的<hello,{1,1}>執行的就是這個步驟,但是要注意:分組也是針對key進行的,經過分組完之後,就得到了我們熟悉的鍵值對<k2,v2s>.
第六階段(可選):對分組後的資料進行歸約處理。通過歸約處理鍵值對<k2,v2s>變成了<k2,v2>,經過這一階段,傳送到Reducer任務端的資料量會減少。但是規約的使用是有條件的,所以這一階段是可以選擇的。
上面的三四五:分割槽排序分組三個階段可以歸結為shuffle階段,在shuffle階段對鍵值對<k2,v2>處理後變成了<k2,v2s>.
Mapper任務處理完之後,就進入到了我們的Reducer階段:
Reducer任務的執行過程可以分為3個階段:
第一階段:對多個Mapper任務的輸出,按照不同的分割槽,通過網路拷貝到不同的Reducer節點上進行處理,將資料按照分割槽拷貝到不同的Reducer節點之後,對多個Mapper任務的輸出在進行合併,排序。例如:在WordCount程式中,若一個Mapper任務輸出了<hello,{1,1}>,另外一個Mapper任務的輸出為<hello,{1,1,1}>,經過在次合併之後變為<hello,{1,1,1,1,1}>.
第二階段:呼叫自己的reduce邏輯,將鍵值對<k2,v2s>變為<k3,v3>.在這裡注意:每一個鍵值對<k2,v2s>都會呼叫一次reduce函式。
第三階段:將Reducer任務的輸出儲存到指定的檔案中。
經過上面的具體分析之後,我們在通過WordCount業務進行具體的說明,假設輸入檔案的內容為:
在這裡我們通過第一條記錄“helloyou”進行具體的說明MapReduce程式的執行過程,注:預設一個分割槽,整個過程處理如下:
到此,MapReduce程式的流程大致就講述完了,其實從巨集觀上來看,無非就是對鍵值的不斷處理。
相關文章
- MapReduce執行流程
- MapReduce的執行流程概述
- MapReduce如何作為Yarn應用程式執行?Yarn
- 使用MapReduce執行WordCount案例
- MapReduce 執行全過程解析
- hadoop的mapreduce串聯執行Hadoop
- WEB程式執行的基本流程Web
- Facades 原理 (程式碼執行流程分析)
- MyBatis執行流程MyBatis
- Mysql 執行流程MySql
- HA執行流程
- SpringMVC執行流程SpringMVC
- for 迴圈執行流程
- Dapr Outbox 執行流程
- Ansible playbook 執行流程
- 「MySQL」 MySQL執行流程MySql
- javaWeb的執行流程JavaWeb
- MapReduce入門及核心流程案例
- 在Docker容器中使用Hadoop執行Python MapReduce作業DockerHadoopPython
- 深入理解執行緒池的執行流程執行緒
- Spark學習(一)——執行模式與執行流程Spark模式
- eBPF 執行原理和流程eBPF
- 執行流程原始碼分析原始碼
- SQL 解析與執行流程SQL
- PHP執行流程回顧PHP
- 框架執行流程總結框架
- thinkphp3.2 執行流程PHP
- SpringMvc - SpringMvc的執行流程SpringMVC
- 大資料學習開發技術:MapReduce執行原理大資料
- 微信小程式執行流程看這篇就夠了微信小程式
- Seata的AT模式的執行流程模式
- Ansible ad-hoc 執行流程
- 深入Mybatis原始碼——執行流程MyBatis原始碼
- Mybatis執行流程原始碼分析MyBatis原始碼
- 【java學習】控制執行流程Java
- 執行緒池的工作流程執行緒
- Servlet基本概念及執行流程Servlet
- Java類初始化執行流程Java