MapReduce過程簡析

本文主要講述hadoop中MapReduce數據處理的過程。

MapReduce處理流程

MapReduce處理流程

過程簡析:

? MapReduce的作業流程大致可分為4個步驟:input、maper、shuffle、reducer。下面以這四個階段為基礎來對MapReduce進行說明。

1.input

? input為MapReduce從HDFS中讀取數據階段,在input階段,主要會對要讀入的數據進行InputFormat和InputSplit處理,然后通過RecordReader,將符合要求數據提供Mapper使用。
? 其中:
? ? InputFormat:決定讀取數據的格式,可以是文件或數據庫等。
? ? InputSplit:將輸入文件進行邏輯分片,一個InputSplit分配一個獨立Map任務。
? 注: a.Split的個數將決定Map的數量,大量的Mapper Task的創建開銷是巨大的。所以應盡量避免小文件。InputSplit可以通過調用CombineFileInputFormat將若干個Split打包成一個Split。
? b.通常一個split就是一個block(FileInputFormat僅僅拆分比block大的文件),這樣做的好處是使得Map可以在存儲有當前數據的節點上運行本地的任務,而不需要通過網絡進行跨節點的任務調度。

2.maper

? maper的主要功能是對輸入的數據,根據需求進行處理,并將處理結果寫入本地磁盤。maper階段可以細分為:map、partition、buffer、spill、merge五個階段。

? 2.1 map

? mapReduce框架會對inputSplit中的每個鍵值對調用一次map,經map處理后,會得到一個新的(key,value)鍵值對。根據需求,需重寫map函數。

? 2.2 partition:分區

? partition的作用就是根據map輸出的key和value以及reduce的數量來決定當前這對輸出數據最終由哪個reduce task來處理。默認的處理方式:對key hash后再對reduce task數量取模。也可根據要求,重寫Partitioner函數。

? 2.3 buffer:內存緩沖區

? 當數據經map、partition處理之后,產生的結果不會直接寫入本地磁盤,而是寫入一個環形內存緩沖區。每個map都會對應一個內存緩沖區。默認100M。
? 注:寫入內存緩沖去的內容不僅包括map解析出的鍵值對,還包括Partitioner操作得到的分區元數據。

? 2.4 spill 溢寫

? 當內存緩沖區內的數據達到閾值80M(可設)時,將啟動一獨立線程來將緩沖區數據寫入本地磁盤,此過程成為溢寫。此時并不影響往剩余20M的內存緩沖區里繼續寫入數據。
? 在執行spill的過程中,還會執行sort和combiner過程(combiner可選)。先對需要spill的數據進行排序,然后如果配置了combiner,則還會執行數據的合并。(combiner可以有效減小寫入本地磁盤的數據量)。

? 2.5 merge

? 當本節點的map任務處理完成后,本地磁盤中可能會存在很多的溢寫文件。所以需要將多份溢寫文件合并成一份,在次過程中,如果開啟combiner,會再次對文件中相同的key值進行數據合并。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容