Hadoop學習日記(十三) Shuffle機制

2021-09-24 22:49:53 字數 1268 閱讀 4483

2019.07.03

學習過程主要參考段海濤大資料p35

map任務與資料儲存的資料中間有一層「切片(split)」的概念。

對於小檔案處理,可使得乙個split對應多個實際的資料塊;當檔案較大被分成多個128m的塊時,乙個split可對應乙個塊。

1.每個map有乙個環形記憶體緩衝區,用於儲存任務的輸出。預設大小100mb(io.sort.mb屬性),一旦達到閥值0.8(io.sort.spill.percent),乙個後台執行緒把內容寫到(spill)磁碟的指定目錄(mapred.local.dir)下的新建的乙個溢位寫檔案。

2.寫磁碟前,要partition,sort。如果有combiner,combine排序後資料。

3.等最後記錄寫完,合併全部溢位寫檔案為乙個分割槽且排序的檔案。

1.reducer通過http方式得到輸出檔案的分割槽。

2.tasktracker為分割槽檔案執行reduce任務。複製階段把map輸出複製到reducer的記憶體或磁碟。乙個map任務完成,reduce就開始複製輸出。

3.排序階段合併map輸出。然後走reduce階段。

關於shuffle在具體生產中的調優可考慮調整記憶體緩衝區大小等。

在之前的內容裡,沒有提到的就是inputformat和outputformat。

map接收的資料來自inputformat,reduce的輸出由outputformat寫到指定地點(預設是到hdfs上儲存)。

如果不做設定,inputformat(抽象類)預設是fileinputformat(實現了inputformat)的子類textinpuformat(多種不同檔案型別,還有keyvaluetextinputformat等等),讀取文字檔案。除了fileinputformat,還有dbinputformat(資料庫相關)等等。

當然,outputformat也有很多態別。inputformat和outputformat應該根據應用需求選擇具體的實現類。

這一小節主要參考段海濤大資料p37

Hadoop學習日記(一)

2019.02.27 1.客戶端上傳檔案時,nn首先往edits log檔案中記錄元資料操作日誌 2.客戶端開始上傳檔案,完成後返回成功資訊給nn,nn就在記憶體中寫入這次上傳操作的新產生的元資料資訊 3.每當edits log寫滿時,需要將這一段時間的新的元資料刷到fsimage檔案中去 將edi...

Hadoop學習日記(九) Yarn框架

2019.07.01 學習過程主要參考段海濤大資料p26 1.runjar程序向resourcemanager申請執行乙個job 2.resourcemanager返回job相關資源的提交路徑staging dir和為本job產生的jobid 3.向hdfs提交資源 4.匯報提交結果 5.將本job...

舔狗日記(十三)

2020年10月16日 天氣 陰 最近心情很不好,今天在上班的時候,又遲到了五分鐘,被老闆罰去打掃女廁所,在開啟馬桶準備刷的時候,裡面有一根又長又粗的粑粑,我整個人愣住了,這是擊潰的我脆弱心靈最後的一把利劍。看著這根粑粑,眼淚瞬間忍不住往外流,失聲痛哭起來,萬萬沒想到平時外表那麼可愛俏皮香香的小仙女...