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