hadoop元資料合併過程 hadoop各種流程

2021-10-16 14:02:29 字數 3760 閱讀 3862

元資料合併流程

hdfs的讀寫過程

shuffle過程

job提交流程

元資料合併流程 checkpoint

edits:日誌的元資料

fsimage :映象的元資料

1)snn會向namenode傳送元資料是否合併的檢查 1min檢查一次

2)namenode需要元資料合併 會向snn進行相應

3)snn向namenode傳送元資料合併的 請求

4)namenode將正在編輯的元資料的日誌檔案進行回滾 變成乙個歷史日誌檔案,同時會

生成乙個新的正在編輯的日誌檔案

5)snn將fsimage檔案和edits檔案拉取到snn的本地

6)snn將上面的檔案載入到記憶體中進行合併 根據edits的操作日誌修改fsimage檔案

7)合併完成,將合併完成的檔案傳送給namenode,重新命名,生成最新的fsiamge檔案 本地也會儲存乙個

hdfs讀寫資料流程

寫資料1、 client 發寫資料請求

2、 namenode 相應請求,然後做一系列校驗,如果能上傳該資料,則返回該檔案的所有切

塊應該被存在哪些 datanode 上的 datanodes 列表

blk-001:hadoop02 hadoop03

blk-002:hadoop03 hadoop04

3、 client 拿到 datanode 列表之後,開始傳資料

4、 首先傳第一塊 blk-001, datanode 列表就是 hadoop02,hadoop03, client 就把 blk-001 傳到

hadoop02 和 hadoop03 上

5、 ……… 用傳第乙個資料塊同樣的方式傳其他的資料塊

6、 當所有的資料塊都傳完之後, client 會給 namenode 返回乙個狀態資訊,表示資料已全

部寫入成功,或者是失敗的資訊

7、 namenode 接收到 client 返回的狀態資訊來判斷當次寫入資料的請求是否成功,如果成

功,就需要更新元資料資訊

讀資料1、使用 hdfs 提供的客戶端 client,向遠端的 namenode 發起 rpc 請求;

2、 namenode 會視情況返回檔案的全部 block 列表,對於每個 block, namenode 都會返回有

該 block 拷貝的 datanode 位址;

3、客戶端 client 會選取離客戶端最近的 datanode 來讀取 block;如果客戶端本身就是 datanode,

那麼將從本地直接獲取資料;

佳的 datanode;

5、當讀完列表 block 後,且檔案讀取還沒有結束,客戶端會繼續向 namenode 獲取下一批的

block 列表;

6、讀取完乙個 block 都會進行 checksum 驗證,如果讀取 datanode 時出現錯誤,客戶端會

通知 namenode,然後再從下乙個擁有該 block 拷貝的 datanode 繼續讀

shuffle過程maptask-------reducetask之間

maptask的資料----收集器----環形緩衝區(100m 0.8)資料:原始 元(分割槽 key的起始 value的起始 value的長度)---

進行排序(快速排序) 溢寫檔案-----歸併 排序---乙個最終溢寫檔案 分割槽 key排好序

---歸併排序---分組----reducetask之間

shuffle階段又可以分為map端的shuffle和reduce端的shuffle。

一、map端的shuffle

map端會處理輸入資料並產生中間結果,這個中間結果會寫到本地磁碟,而不是hdfs。每個map的輸出會先寫到記憶體緩衝區中,當寫入的資料達到設定的閾值時,系統將會啟動乙個執行緒將緩衝區的資料寫到磁碟,這個過程叫做spill。

在spill寫入之前,會先進行二次排序,首先根據資料所屬的partition進行排序,然後每個partition中的資料再按key來排序。partition的目是將記錄劃分到不同的reducer上去,以期望能夠達到負載均衡,以後的reducer就會根據partition來讀取自己對應的資料。接著執行combiner(如果設定了的話),combiner的本質也是乙個reducer,其目的是對將要寫入到磁碟上的檔案先進行一次處理,這樣,寫入到磁碟的資料量就會減少。最後將資料寫到本地磁碟產生spill檔案(spill檔案儲存在指定的目錄中,map任務結束後就會被刪除)。

最後,每個map任務可能產生多個spill檔案,在每個map任務完成前,會通過多路歸併演算法將這些spill檔案歸併成乙個檔案。至此,map的shuffle過程就結束了。

二、reduce端的shuffle

reduce端的shuffle主要包括三個階段,copy、sort(merge)和reduce。

首先要將map端產生的輸出檔案拷貝到reduce端,但每個reducer如何知道自己應該處理哪些資料呢?因為map端進行partition的時候,實際上就相當於指定了每個reducer要處理的資料(partition就對應了reducer),所以reducer在拷貝資料的時候只需拷貝與自己對應的partition中的資料即可。每個reducer會處理乙個或者多個partition,但需要先將自己對應的partition中的資料從每個map的輸出結果中拷貝過來。

接下來就是sort階段,也成為merge階段,因為這個階段的主要工作是執行了歸併排序。從map端拷貝到reduce端的資料都是有序的,所以很適合歸併排序。最終在reduce端生成乙個較大的檔案作為reduce的輸入。

最後就是reduce過程了,在這個過程中產生了最終的輸出結果,並將其寫到hdfs上。

job提交過程

(1)作業提交

第 0 步:client 呼叫 job.waitforcompletion 方法,向整個集群提交 mapreduce 作業。

第 1 步:client 向 rm 申請乙個作業 id。

第 2 步:rm 給 client 返回該 job 資源的提交路徑和作業 id。

第 3 步:client 提交 jar 包、切片資訊和配置檔案到指定的資源提交路徑。

(2)作業初始化

第 5 步:當 rm 收到 client 的請求後,將該 job 新增到容量排程器中。

第 6 步:某乙個空閒的 nm 領取到該 job。

(3)任務分配

第 10 步 :rm 將執行 maptask 任務分配給另外兩個 nodemanager,另兩個 nodemanager

分別領取任務並建立容器。

(4)任務執行

第 11 步:mr 向兩個接收到任務的 nodemanager 傳送程式啟動指令碼,這兩個nodemanager 分別啟動 maptask,maptask 對資料分割槽排序。

第 13 步:reduce task 向 maptask 獲取相應分割槽的資料。

第 14 步:程式執行完畢後,mr 會向 rm 申請登出自己。

(5)進度和狀態更新

yarn 中的任務將其進度和狀態(包括 counter)返回給應用管理器, 客戶端每秒(通過

mapreduce.client.progressmonitor.pollinterval 設定)向應用管理器請求進度更新, 展示給使用者。

(6)作業完成

除了向應用管理器請求作業進度外, 客戶端每 5 分鐘都會通過呼叫 waitforcompletion()

來檢查作業是否完成。時間間隔可以通過 mapreduce.client.completion.pollinterval 來設定。作

業完成之後, 應用管理器和 container 會清理工作狀態。作業的資訊會被作業歷史伺服器儲存

以備之後使用者核查。

Hadoop 元資料持久化

檔案系統元資料的持久化 namenode儲存hdfs的元資料。對於任何對檔案元資料產生修改的操作,namenode都使用乙個稱為editlog的事務日誌記錄下來。例如,在hdfs中建立乙個檔案,namenode就會在editlog中插入一條記錄來表示 同樣,修改檔案的replication因子也將往...

大資料實戰(下) 搭建hadoop2 HA

hadoop1.x 兩大核心hdfs mapredure,這兩個都存在乙個單點問題。hadoop2.0的ha 機制有兩個namenode,乙個是active namenode,狀態是active 另外乙個是standby namenode,狀態是standby。兩者的狀態是可以切換的,但不能同時兩個...

Hadoop元資料儲存 載入 恢復

1.元資料載入 為了保證互動速度,hdfs檔案系統的metadata是被load到namenode機器的記憶體中的。並會將記憶體中的這些資料儲存到磁碟進行持久化儲存,但對塊的位置資訊不進行持久化儲存,在datanode向namenode進行註冊時動態載入。當namenode啟動時,它從硬碟中讀取ed...