HDFS体系架构介绍
HDFS體系架構(最全)
參考博客:https://blog.csdn.net/Lord_War/article/details/78727049
匯總:https://www.cnblogs.com/meet/p/5439805.html
NN:http://www.cnblogs.com/zlslch/p/5081112.html
DN:http://www.cnblogs.com/zlslch/p/5081183.html
CLIENT:http://www.cnblogs.com/zlslch/p/5081200.html
輔以:《hadoop中NameNode、DataNode、Secondary、NameNode、ResourceManager、NodeManager 介紹》
?
HDFS總體架構
HDFS 采用Master/Slave的架構來存儲數據,這種架構主要由四個部分組成,分別為HDFS Client、NameNode、DataNode和Secondary NameNode。一個HDFS集群是由一個NameNode和一定數目的DataNode組成的。NameNode是一個中心服務器,負責管理文件系統的名字空間 (Namespace )及客戶端對文件的訪問。集群中的DataNode一般是一個節點運行一個DataNode進程,負責管理它所在節點上的存儲。
?
?
?
HDFS架構解析
?
(1)client
可能會有人有疑問,什么是client,Client是不是就是每位開發人員的電腦?是不是每個作業提交所在節點的機器,是不是....等?很多疑惑。基于此,我來給大家解答迷惑。
?
???? ?HDFS的Client是處于如下的一個位置,當然,這幅圖只是一個引子罷了,不是固定的模板哈。
Client(代表用戶)通過與 NameNode和DataNode 交互訪問HDFS中的文件。Client 提供了一個類似 POSIX 的文件系統接口供用戶調用。
(POSIX 表示可移植操作系統接口(Portable Operating System Interface ,縮寫為 POSIX ),POSIX標準定義了操作系統應該為應用程序提供的接口標準,是IEEE為要在各種UNIX操作系統上運行的軟件而定義的一系列API標準的總稱,其 正式稱呼為IEEE 1003,而國際標準名稱為ISO/IEC 9945。)
? ? ? ?想說的是,在hadoop生態各組件里,分別有其對應的Client。比如,在HDFS里,在分析其原理時,是HDFS Client。同理,在Mapreduce里,是Mapreduce Client。
?
注意:
? ? ???訪問HDFS的程序或HDFS shell命令都可以稱為HDFS的客戶端(client )。這只是部分而已。
????在 HDFS的客戶端中至少需要指定HDFS集群配置中的NameNode地址以及端口號信息,或者通過配置HDFS的core-site.xml配置文件來 指定。一般可以把客戶端和HDFS節點服務器放在同一臺機器上。但其前提是機器資源允許,并且我們能夠接受不可靠的應用程序代碼所帶來的穩定性降低的風 險。
?
重要啊:
????? ?(即HDFS的Client)客戶端是用戶和HDFS進行交互的手段,HDFS提供了各種各樣的客戶端,包括命令行接口、Java API, Thrift接口、C語言庫、用戶空間文件系統〔Filesystem in Userspace,FUSE)等。
?
如master、slave1、slave2這樣的非HA集群 ?+ ?client。
?或者?master1、master2、slave1、slave2、slave3這樣的HA集群 ?+ ?client。
? ? ??HDFS客戶端就是用來訪問這個hadoop文件系統的機器,它可以是裝有hadoop的機器,也可以是沒有裝hadoop的機器。
? ? ? 如果你的機器裝有hadoop,那你這臺機器既是服務器,又是客戶端。
? ? ?有人很好奇會問我,那為什么要這樣來規劃呢?是為了如client單獨來安裝如azkaban、oozie、flume、sqoop等(我這里指的是單節點的這些組件哈),只是為了初學學習罷了。這樣即可以與集群方便管理。
???? ?在實際的開發環境中,在集群環境中開發往往存在很多安全隱患,例如集群文件被誤刪等等,所以一般的開發工作都是本地完成開發的。本地做MR開發時,由于沒有hadoop環境,所以調試工作往往變的很難進行,所以在本地搭建一個hadoop client,不僅能提供本地調試環境,還能從直接從本地訪問到hdfs 數據和提交任務到hadoop環境中。你可以在本地運行MR,不登陸服務器就能查看數據。
?
那之間怎么來連接呢?
????(1)做好ssh免密碼通信
????(2)將如hadoop、spark等這樣的集群,scp一份到client機器上即可。
?
?在windows環境下搭建hadoop client 客戶端模式搭建
http://blog.csdn.net/u013181284/article/details/70172119
?
?
(2)NameNode
NameNode就是HDFS的Master架構,主要負責HDFS文件系統的管理工作,具體包括名稱空間(namespace)管理,文件Block管理。
(1)名稱空間(namespace)管理:它維護著文件系統樹(filesystem tree)以及文件樹中所有的文件和文件夾的元數據(metadata)。管理這些信息的文件有兩個,分別是Namespace 鏡像文件(fsimage)和操作日志文件(edit log),這些信息被Cache在RAM中,當然,這兩個文件也會被持久化存儲在本地硬盤。
(2)文件Block管理:Namenode記錄著每個文件中各個塊所在的數據節點的位置信息(元數據信息),從NameNode中你可以獲得每個文件的每個塊所在的DataNode。但是他并不持久化存儲這些信息,因為這些信息NameNode會在每次啟動系統時動態地重建這些信息。
?
這些元數據信息主要為:
“文件名 -> 數據塊‘’映射
“數據塊 -> DataNode列表”映射
其中,"文件名 -> 數據塊"保存在磁盤上進行持久化存儲,需要注意的是NameNode上不保存‘’數據塊 -> DataNode列表”映射,該列表是通過DataNode上報給NameNode建立起來的。NameNode執行文件系統的名稱空間(namespace)操作,例如打開、關閉、重命名文件和目錄,同時決定文件數據塊到具體DataNode節點的映射。
(3)DataNode
?
HDFS的管理節點是NameNode,用于存儲并管理元數據。那么具體的文件數據存儲在哪里呢?DataNode就是負責存儲數據的組件,一個數 據塊Block會在多個DataNode中進行冗余備份;而一個DataNode對于一個塊最多只包含一個備份。所以可以簡單地認為DataNode上存儲了數據塊ID和數據塊內容,以及它們的映射關系。一個HDFS集群可能包含上千個DataNode節點,這些DataNode定時和NameNode進行通信,接受NameNode的指令,為了減輕NameNode的負擔,NameNode上并不永久保存哪個DataNode上有哪些數據塊的信息,而是通過DataNode啟動時的上報來更新NameNode上的映射表。【這個和上述講解namenode的職責是一樣的】?DataNode和NameNode建立連接后,就會不斷地和NameNode保持聯系,反饋信息中也包含了NameNode對DataNode的一些命 令,如刪除數據庫或者把數據塊復制到另一個DataNode。應該注意的是:NameNode不會發起到DataNode的請求,在這個通信過程中,它們 嚴格遵從客戶端/服務器架構。
當然DataNode也作為服務器接受來自客戶端的訪問,處理數據塊讀/寫請求。DataNode之間還會相互通信,執行數據塊復制任務,同時,在客戶端執行寫操作的時候,DataNode之間需要相互配合,以保證寫操作的一致性。
DataNode是文件系統Worker中的節點,用來執行具體的任務:存儲文件塊,被客戶端和NameNode調用。同時,它會通過心跳(Heartbeat)定時向NameNode發送所存儲的文件塊信息。
?
?
(4)SecondaryNameNode
和NameNode最相關的還有一個概念就是Secondary NameNode,其主要是定時對NameNode的數據snapshots進行備份,這樣可盡量降低NameNode崩潰之后導致數據丟失的風險,其所做的工作就是從NameNode獲得fsimage和edits后把兩者重新合并發給NameNode,這樣,既能減輕NameNode的負擔又能安全地備份,一旦HDFS的Master架構失效,就可以借助Secondary NameNode進行數據恢復。但是輔助Namenode總是落后于主Namenode,所以在Namenode宕機時,數據丟失是不可避免的。通常,Secondary Namenode 運行在一個單獨的物理機上,因為合并操作需要占用大量的CPU時間以及和Namenode相當的內存。
?
3.1NameNode的目錄結構如下:
?
${dfs.name.dir}/current/VERSION
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/edits
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/fsimage
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/fstime
?
3.2Secondary NameNode的目錄結構如下:
?
${fs.checkpoint.dir}/current/VERSION
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?/edits
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?/fsimage
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?/fstime
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???/previous.checkpoint/VERSION
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? /edits
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? /fsimage
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? /fstime
?
?
如上圖,Secondary NameNode主要是做Namespace image和Edit log合并的。
?
那么這兩種文件是做什么的?當客戶端執行寫操作,則NameNode會在edit log記錄下來,(我感覺這個文件有些像Oracle的online redo logo file)并在內存中保存一份文件系統的元數據。
?
Namespace image(fsimage)文件是文件系統元數據的持久化檢查點,不會在寫操作后馬上更新,因為fsimage寫非常慢(這個有比較像datafile)。
?
由于Edit log不斷增長,在NameNode重啟時,會造成長時間NameNode處于安全模式,不可用狀態,是非常不符合Hadoop的設計初衷。所以要周期性合并Edit log,但是這個工作由NameNode來完成,會占用大量資源,這樣就出現了Secondary NameNode,它可以進行image檢查點的處理工作。步驟如下:
(1)? ?? ? Secondary NameNode請求NameNode進行edit log的滾動(即創建一個新的edit log),將新的編輯操作記錄到新生成的edit log文件;
(2)? ?? ? 通過http get方式,讀取NameNode上的fsimage和edits文件,到Secondary NameNode上;
(3)? ?? ? 讀取fsimage到內存中,即加載fsimage到內存,然后執行edits中所有操作(類似OracleDG,應用redo log),并生成一個新的fsimage文件,即這個檢查點被創建;
(4)? ?? ? 通過http post方式,將新的fsimage文件傳送到NameNode;
(5)? ?? ? NameNode使用新的fsimage替換原來的fsimage文件,讓(1)創建的edits替代原來的edits文件;并且更新fsimage文件的檢查點時間。
整個處理過程完成。
Secondary NameNode的處理,是將fsimage和edites文件周期的合并,不會造成nameNode重啟時造成長時間不可訪問的情況。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的HDFS体系架构介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tar解压出错:gzip: stdin:
- 下一篇: No space left on dev