Hadoop原理簡介

Hadoop

Hadoop其實是一個較大的概念,它像是一個巨大的框架,裏面由多個組件去構架而成。我想從三個部分,也是我認爲Hadoop最重要的三個組件hdfs、yarn、Hbase來介紹我所瞭解的Hadoop 。下文我將介紹這三個組件的構架以及基本的運作原理,

HDFS 

Hdfs架構

這個圖是從hdfs官網摘下來的,這個圖很好的演示了hdfs的架構和數據讀寫原理。

下面將簡述一下hdfs的寫原理:

  1. 客戶端會將數據切分成數據塊block(默認128M),然後發送寫請求給NameNode

  2. NameNode接受請求,記錄數據塊信息,告訴客戶端可用的DataNode

  3. 客戶端向DataNode傳送數據,這裏涉及一個機架感知功能( Hadoop默認採取三副本的形式,第一個副本假設在DataNodeA中,那第二個副本則會備份在相同機架上的DataNodeB中,剩下一個副本存放在另外的機架中,這樣有效的提高了集羣數據的容錯性,當DataNodeA故障或者DataNodeB故障時,通過相同的機架去獲取數據能有效的減少帶寬通信,如果整個機架損壞了可以從另外一個機架去獲取數據 )

hdfs的讀原理:

  1. 客戶端向NameNode發送讀請求

  2. 客戶端查看meta表返回匹配的block所在datanode

  3. 去匹配的dataNode查數據

關於hdsf的元數據文件fismage(元數據文件)和editslog(元數據操作日誌文件),對hdfs進行操作時會生成這兩個文件,相關的操作記錄會寫在editslog中,然後定期由secondaryNameNode去合併舊的fsimage和editslog生成新的fsimage

Yarn

Yarn架構

ResourceManager

控制整個集羣並管理應用程序向基礎計算資源的分配,將各個資源部分(計算、內存、帶寬等)精心安排給基礎NodeManager(Yarn的每個節點)。它主要由兩個組件構成:調度器(scheduler)和應用管理器。(Applications Manager),其中調度器(可插拔,後文再做補充)僅根據各個應用程序的資源需求進行資源分配,剩餘的交給ASM來做,如監控跟蹤應用程序執行狀態等。它的一些功能:

A:處理客戶端請求B:啓動或監控ApplicationMasterC:監控NodeManagerD:資源的分配與調度。

ApplicationMaster

管理一個在Yarn內運行的應用程序的每個實例。負責協調來自ResourceManager的資源,並通過NodeManager監視容器的執行和資源使用(CPU、內存的資源分配)。它的一些功能:A:負責數據的切分B:爲應用程序申請資源並分配給內部的任務C:任務的監控與容錯

NodeManager

A:管理yarn中每一個節點,從監督對一個容器的終生管理到監視資源和跟蹤節點健康B:管理單個節點的資源C:處理來自ResourceManager的命令D:處理來自NodeManager的命令

Container

A:是Yarn中的資源抽象,可信息以理解爲該任務所佔用的資源B:對任務運行環境進行抽象,封裝CPU、內存等多維度的資源以及環境變量、啓動命令等任務運行相關的

Yarn的工作原理

  1. 用戶向Yarn提交任務,其中包括ApplicationMaster程序,ResourceManager就會爲這個任務申請一個Container,並交給對應的NodeManager管理,保證這個任務在這個Container中啓動。

  2. 而後ApplicationMaster可以以輪詢的方式通過RPC協議向ResourceManager註冊,申請需求的資源,使得用戶可以通過ResourcrManager去監控它,直到任務結束。

  3. ApplicationMaster申請到資源後,就會與對應的NodeManager通信,要求它啓動任務,NodeManager就會爲任務設置好任務運行環境,將任務寫到一個腳本中,並啓動它。

  4. 各個任務都會通過RPC協議向ApplicationMaster回報自己的狀態和進度,使得ApplicationMaster可以掌握各個任務的狀態,從而可以在任務失敗的時候重新啓動任務,用戶也可以隨時通過RPC去查詢應用程序的狀態。

  5. 最後任務結束,ApplicationMaster會向ResourceManager註銷自己。

Hbase

Hbase架構

首先得介紹一下上圖出現的幾個部件:

Zookeeper:一個節點管理的組件,它用來保證集羣的Hbase-master僅有一個,並且監控Hbase的健康狀態,貯存着meta表信息

HMaster:負責管理RegionServer、實現負載均衡,處理來自客戶端的請求

HRegionServer: 負責數據的存儲,下面介紹一下RegionServer的結構

​ ①正常情況下在集羣中一臺機器會啓動一個RegionServer

​ ②一個RegionServer中會存在多個Region(每個region達到一定閾值後還會實現分裂)

​ ③一個Region由一個HLog(其中記錄了寫入數據的歸屬信息,除了table和region名字外,還同時包括sequence number和timestamp)以及多個HStore組成

​ ④而每一個HStore則會由一個memory store以及多個StoreFile組成,而StoreFile則以Hfile的格式保存在hdfs上

Hbase數據寫入

Hbase讀寫

⒈客戶端與zk通信,獲取meta表信息,告知客戶端數據應該存儲在哪些RegionServer中

⒉而後發送請求到匹配的RegionServer中,數據將先寫入WAL文件中,用作容災備份

⒊數據繼而寫入memoryStore中,當數據量達到128M時就會被flush成HFile文件存儲在hdfs上

Hbase讀取數據

⒈客戶端與zk通信,獲取meta表信息,告知客戶端數據應該存儲在哪些RegionServer中

⒉根據zk所返回的RegionServer信息,客戶端會將該元數據表加載到本地並進行緩存。然後在表中確定待檢索rowkey所在的RegionServer信息。

⒊根據數據所在RegionServer的訪問信息,客戶端會向該RegionServer發送真正的數據讀取請求。

 


作者:蛋撻

日期:2018-11-12

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章