日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hadoop之MapTask工作机制

發布時間:2024/2/28 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hadoop之MapTask工作机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hadoop之MapTask工作機制


目錄

  • 并行度決定機制
  • MapTask工作機制

  • 1. 并行度決定機制

  • 問題引出
    maptask的并行度決定map階段的任務處理并發度,進而影響到整個job的處理速度。那么,mapTask并行任務是否越多越好呢?
  • MapTask并行度決定機制
    一個job的map階段MapTask并行度(個數),由客戶端提交job時的切片個數決定,如下圖所示。

  • 2. MapTask工作機制

    MapTask工作機制如下圖

  • Read階段:Map Task通過用戶編寫的RecordReader,從輸入InputSplit中解析出一個個key/value。

  • Map階段:該節點主要是將解析出的key/value交給用戶編寫map()函數處理,并產生一系列新的key/value。

  • Collect收集階段:在用戶編寫map()函數中,當數據處理完成后,一般會調用OutputCollector.collect()輸出結果。在該函數內部,它會將生成的key/value分區(調用Partitioner),并寫入一個環形內存緩沖區中。

  • Spill階段:即“溢寫”,當環形緩沖區滿后,MapReduce會將數據寫到本地磁盤上,生成一個臨時文件。需要注意的是,將數據寫入本地磁盤之前,先要對數據進行一次本地排序,并在必要時對數據進行合并、壓縮等操作。
    溢寫階段詳情:

  • 利用快速排序算法對緩存區內的數據進行排序,排序方式是,先按照分區編號partition進行排序,然后按照key進行排序。這樣,經過排序后,數據以分區為單位聚集在一起,且同一分區內所有數據按照key有序。
  • 按照分區編號由小到大依次將每個分區中的數據寫入任務工作目錄下的臨時文件output/spillN.out(N表示當前溢寫次數)中。如果用戶設置了Combiner,則寫入文件之前,對每個分區中的數據進行一次聚集操作。
  • 將分區數據的元信息寫到內存索引數據結構SpillRecord中,其中每個分區的元信息包括在臨時文件中的偏移量、壓縮前數據大小和壓縮后數據大小。如果當前內存索引大小超過1MB,則將內存索引寫到文件output/spillN.out.index中。
  • Combine階段:當所有數據處理完成后,MapTask對所有臨時文件進行一次合并,以確保最終只會生成一個數據文件。

    當所有數據處理完后,MapTask會將所有臨時文件合并成一個大文件,并保存到文件output/file.out中,同時生成相應的索引文件output/file.out.index。
    在進行文件合并過程中,MapTask以分區為單位進行合并。 對于某個分區,它將采用多輪遞歸合并的方式。每輪合并io.sort.factor(默認100)個文件,并將產生的文件重新加入待合并列表中,對文件排序后,重復以上過程,直到最終得到一個大文件。
    讓每個MapTask最終只生成一個數據文件,可避免同時打開大量文件和同時讀取大量小文件產生的隨機讀取帶來的開銷。

  • 總結

    以上是生活随笔為你收集整理的Hadoop之MapTask工作机制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。