當前位置: 首頁 / 技術分享 / 正文
MapReduce的運行流程(二)

2022-11-17

數據 文件 鍵值 進行

  Map階段

  MapTask進程啟動之后,會根據對應的輸入分片來處理數據,每一個分片分配一個MapTask來處理。

  使用客戶端指定的InputFormat來讀取數據,常用的就是LineRecordReader對象。它會逐行讀取分片中的數據,并形成一個鍵值對。鍵為行偏移量,值為行記錄。我們通常稱為

  將讀取到的鍵值對數據輸入到map方法中,進行用戶自己的邏輯處理。并輸出鍵值對,我們稱為

  map方法輸出的鍵值對,會被搜集進環形緩沖區。環形緩沖區是內存中的一個字節數組,默認的大小是100M。

  當環形緩沖區中被寫入了80%的數據的時候,會將這80%的部分進行分區、排序,并溢寫到磁盤,生成一個文件。在這個過程中,如果上游還有數據產生,將存儲在剩余的20%的空間內。如果上游產生數據的速度非???,剩余的20%也被填充滿,并且80%的數據還沒有溢寫完成,此時任務將阻塞,上游不再讀取數據,直到溢寫文件完成。最終可能會生成多個溢寫的磁盤文件。

  將每一個溢寫的磁盤文件合并成為一個文件,在合并的過程中,依然會按照分區、Key進行排序。最終,每一個MapTask生成一個磁盤文件。至此,MapTask執行結束。

  Reduce階段

  每一個ReduceTask需要去處理一個分區的數據,因此ReduceTask需要到每一個MapTask所在的節點去fetch自己分區的數據。

  拉取到的數據,如果比較小,會直接保存在內存中,在內存中完成排序,直到達到內存閾值,將其溢寫到文件中;如果比較大,會直接以文件的形式保存起來。

  數據拉取完成后,會按照設定好的合并因子進行合并。

  按照Map階段輸出的的鍵進行分組,將相同鍵所對應的所有的值聚合到一起,形成一個集合。

  將分組之后的鍵值對>,輸入到Reduce方法中,進行邏輯處理。并輸出最終的結果

  將最終的結果,由客戶端指定的OutputFormat進行輸出。至此ReduceTask結束。

分享: 更多

上一篇:MapReduce的運行流程(一)

下一篇:

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
在線咨詢
試聽
入學教程
立即報名

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

美女裸体黄网站18禁免费_美女裸体黄网站啪啪18禁_美女裸体黄污18禁网站免费下载