天天看點

hdfs架構分析

hdfs介紹

hadoop的分布式檔案系統hdfs是依據谷歌的GFS論文來實作的,它是一個被設計成為運作在廉價的通用硬體之上,具有容錯性的檔案系統。hdfs的設計使得它能夠提供很高的吞吐量,很适合大規模的資料集合。

hdfs架構

hdfs的設計如下圖所示

hdfs架構分析

hdfs由Namenode和Datanode組成,Namenode和Datanode可以在任何異構的機器上運作。hdfs由java語言開發,這些機器上都安裝jvm虛拟機,是以都可以很輕松的部署Namenode或Datanode。比較典型的部署場景是一台機器上隻運作一個Namenode執行個體,而叢集中的其它機器分别運作一個Datanode執行個體。這種架構并不排斥在一台機器上運作多個Datanode,隻不過這樣的情況比較少見。

叢集中單一Namenode的結構大大簡化了系統的架構。Namenode是所有HDFS中繼資料的仲裁者和管理者,這樣,使用者資料永遠不會流過Namenode,極大的緩解了中心節點namenode的壓力。

hdfs具有高可用的特點,即使一台機器當機,存在hdfs裡的資料也不會丢失,這就要歸功于hdfs的副本的特點了。HDFS被設計成能夠在一個大叢集中跨機器可靠地存儲超大檔案。它将每個檔案存儲成一系列的資料塊,除了最後一個,所有的資料塊都是同樣大小的。為了容錯,檔案的所有資料塊都會有副本。每個檔案的資料塊大小和副本系數都是可配置的。應用程式可以指定某個檔案的副本數目。副本系數可以在檔案建立的時候指定,也可以在之後改變。

Namenode全權管理資料塊的複制,它周期性地從叢集中的每個Datanode接收心跳信号和塊狀态報告(Blockreport)。接收到心跳信号意味着該Datanode節點工作正常。塊狀态報告包含了一個該Datanode上所有資料塊的清單。

如下圖所示

hdfs架構分析

hdfs讀寫

hdfs的讀檔案流程如下

hdfs架構分析

用戶端首先通路namenode,得到檔案的塊的存儲位置,然後去datanode讀取對應的資料塊,然後再告知namenode關閉檔案。

hdfs寫檔案的流程如下

hdfs架構分析

用戶端首先通路namenode,得到檔案的配置設定到的塊所在的datanode的伺服器位置,然後寫資料到第一個datanode,然後datanode依次向其他副本所在的datanode寫入資料,等待所有的資料都寫好了,九傳回用戶端寫入成功,最終告知namenode關閉用戶端。

繼續閱讀