mapreduce運行的5個階段


mapreduce在運行的過程中大致概括為5個步驟
1. [input階段]獲取輸入數據進行分片作為map的輸入
2. [map階段]過程對某種輸入格式的一條記錄解析成一條或多條記錄
3. [shffle階段]對中間數據的控制,作為reduce的輸入
4. [reduce階段]對相同key的數據進行合並
5. [output階段]按照格式輸出到指定目錄

 

 

 

1、input階段

input階段主要是從節點上反序列化數據,讀取后切片,供map階段使用
序列化格式和inputformat格式可以自定義設置
只有支持分片的壓縮格式可以分片
記錄格式:如serse 用正則表達式來轉換文本hive

 具體的步驟順序如下:
1. 訪問datanode中的數據反序列化數據並進行切片,為每一個切片分配一個map任務
2. 並發的執行這些任務
3. 通過recordReader讀取切片中的每一條記錄,按照記錄格式讀取,偏移值作為map的key,記錄行作為value,當做map方法的參數

 

此階段,每個輸入文件被分片輸入到map。如一個文件有200M,默認會被分成2片,因為每片的默認最大值和每塊的默認值128M相同。

如果輸入為大量的小文件,則會造成過多的map數,導致效率下降,可采用壓縮輸入格式CombineFileInputFormat

map階段

通過對輸入記錄的處理,轉換成一個或多個中間記錄

 

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

shuffle階段

需要注意:
1. shuffle階段會對中間值進行優化,並且將分區的數據分發給各個reduce處理

  1. map任務的輸出默認是放在本地磁盤的臨時緩沖目錄中的

  2. 分區,排序,combiner過程可自定義

  3. 由於受限於集群可用帶寬,通常會對中間數據做壓縮,combiner處理,減少網絡帶寬消耗

  4. 分區的作用就是決定根據map 輸出的key值由哪個reduce處理

  5. mapper實現類讀取配置文件屬性,可以在配置中指定壓縮的格式

  6. 每一個分組的后台線程對輸出結果的key進行排序,在排序的過程中,有combine函數則會進行調用

  1. map數據會先輸出到內存緩沖區中,到達默認的80%的閥值后,會像map任務本地寫數據,每次寫都會生成一個小文件。
  2. 在寫到本地的過程中,會經歷分區,排序,combiner(可選)的過程
  3. 當最后一個文件溢寫到本地磁盤中的時候,區與區的文件就是合並,排序,壓縮(可選)
  4. 經過分區的排序的大文件會按照不同的分區被拷貝到相應的reduce中處理
  5. reduce端通過http network復制map端傳來的數據
  6. 將輸入的數據排序后合並,經過2次排序后會返回一個value的迭代器
  7. 分組將相同key的value放到一起作為一個value集合,作為reduce的輸入

 

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

在map端,map的輸出先寫入緩存,當每次緩存快滿時,由緩存“溢寫”至磁盤,每次溢寫都先進行“分區”,並對每個分區的數據進行“排序”和“合並”(可選)。一般會產生多個溢寫的文件,這些文件會在map端先被“歸並”為一個大的磁盤文件,通知reduce任務來領取自己的分區。

在reduce端,每個reduce任務會從多個map任務領取文件,然后將這些文件進行“歸並”,交給reduce任務。

合並(combine)和歸並(merge)的區別:對於兩個鍵值對<“a”,1>和<“a”,1>,如果合並,會得到<“a”,2>,即復用reduce的邏輯(也可以自己實現combiner類);如果歸並,會得到<“a”,<1,1>>。combine為可選,可通過調用 job.setCombinerClass(MyReduce.class)設置這一操作。

reduce階段

處理<key,list<value>>對,對每個key產生一個結果

output階段

對輸出數據通常會做壓縮,節省磁盤空間

將reduce結果按照輸出的格式寫入文件中

    1. 按照輸出文件的格式,將每個鍵值對結果輸出一行,中間分隔符默認是‘\t’.默認調用鍵值對對象的toString()方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM