Hadoop
Hadoop其實是一個較大的概念,它像是一個巨大的框架,裏面由多個組件去構架而成。我想從三個部分,也是我認爲Hadoop最重要的三個組件hdfs、yarn、Hbase來介紹我所瞭解的Hadoop 。下文我將介紹這三個組件的構架以及基本的運作原理,
HDFS
這個圖是從hdfs官網摘下來的,這個圖很好的演示了hdfs的架構和數據讀寫原理。
下面將簡述一下hdfs的寫原理:
-
客戶端會將數據切分成數據塊block(默認128M),然後發送寫請求給NameNode
-
NameNode接受請求,記錄數據塊信息,告訴客戶端可用的DataNode
-
客戶端向DataNode傳送數據,這裏涉及一個機架感知功能( Hadoop默認採取三副本的形式,第一個副本假設在DataNodeA中,那第二個副本則會備份在相同機架上的DataNodeB中,剩下一個副本存放在另外的機架中,這樣有效的提高了集羣數據的容錯性,當DataNodeA故障或者DataNodeB故障時,通過相同的機架去獲取數據能有效的減少帶寬通信,如果整個機架損壞了可以從另外一個機架去獲取數據 )
hdfs的讀原理:
-
客戶端向NameNode發送讀請求
-
客戶端查看meta表返回匹配的block所在datanode
-
去匹配的dataNode查數據
關於hdsf的元數據文件fismage(元數據文件)和editslog(元數據操作日誌文件),對hdfs進行操作時會生成這兩個文件,相關的操作記錄會寫在editslog中,然後定期由secondaryNameNode去合併舊的fsimage和editslog生成新的fsimage
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的工作原理
-
用戶向Yarn提交任務,其中包括ApplicationMaster程序,ResourceManager就會爲這個任務申請一個Container,並交給對應的NodeManager管理,保證這個任務在這個Container中啓動。
-
而後ApplicationMaster可以以輪詢的方式通過RPC協議向ResourceManager註冊,申請需求的資源,使得用戶可以通過ResourcrManager去監控它,直到任務結束。
-
ApplicationMaster申請到資源後,就會與對應的NodeManager通信,要求它啓動任務,NodeManager就會爲任務設置好任務運行環境,將任務寫到一個腳本中,並啓動它。
-
各個任務都會通過RPC協議向ApplicationMaster回報自己的狀態和進度,使得ApplicationMaster可以掌握各個任務的狀態,從而可以在任務失敗的時候重新啓動任務,用戶也可以隨時通過RPC去查詢應用程序的狀態。
-
最後任務結束,ApplicationMaster會向ResourceManager註銷自己。
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數據寫入
⒈客戶端與zk通信,獲取meta表信息,告知客戶端數據應該存儲在哪些RegionServer中
⒉而後發送請求到匹配的RegionServer中,數據將先寫入WAL文件中,用作容災備份
⒊數據繼而寫入memoryStore中,當數據量達到128M時就會被flush成HFile文件存儲在hdfs上
Hbase讀取數據
⒈客戶端與zk通信,獲取meta表信息,告知客戶端數據應該存儲在哪些RegionServer中
⒉根據zk所返回的RegionServer信息,客戶端會將該元數據表加載到本地並進行緩存。然後在表中確定待檢索rowkey所在的RegionServer信息。
⒊根據數據所在RegionServer的訪問信息,客戶端會向該RegionServer發送真正的數據讀取請求。
作者:蛋撻
日期:2018-11-12