1. 程式人生 > 其它 >HDFS原理深入理解

HDFS原理深入理解

1.HDFS概述

1)資料量越來越多,在一個作業系統管轄的範圍存不下了,那麼就分配到更多的作業系統管理的磁碟中,但是不方便管理和維護,因此迫切需要一種系統來管理多臺機器上的檔案,這就 是分散式檔案管理系統

2)是一種允許檔案通過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。

3)通透性。讓實際上是通過網路來訪問檔案的動作,由程式與使用者看來,就像是訪問本地的磁碟一般。

4)容錯。即使系統中有某些節點宕機,整體來說系統仍然可以持續運作而不會有資料損失【通過副本機制實現】。

5)分散式檔案管理系統很多,hdfs只是其中一種,不合適小檔案。

2.hdfs架構

NameNode

NameNode是整個檔案系統的管理節點。它維護著整個檔案系統的檔案目錄樹,檔案/目錄的元資訊和每個檔案對應的資料塊列表。接收使用者的操作請求。

檔案包括:

  fsimage:元資料映象檔案。儲存某一時段NameNode記憶體元資料資訊。

  edits:操作日誌檔案,namenode啟動後一些新增元資訊日誌。

  fstime:儲存最近一次checkpoint的時間

以上這些檔案是儲存在linux的檔案系統中。

hdfs-site.xml的dfs.namenode.name.dir屬性

secondary namenode

DataNode

提供真實檔案資料的儲存服務。

檔案塊(block):最基本的儲存單位。對於檔案內容而言,一個檔案的長度大小是size,那麼從檔案的0偏移開始,按照固定的大小,順序對檔案進行劃分並編號,劃分好的每一個塊稱一個Block。2.0以後HDFS預設Block大小是128MB,以一個256MB檔案,共有256/128=2個Block.

hdfs-site.xml中dfs.blocksize屬性

不同於普通檔案系統的是,HDFS中,如果一個檔案小於一個數據塊的大小,並不佔用整個資料塊儲存空間 Replication。多複本。預設是三個。

hdfs-site.xml的dfs.replication屬性

3.HDFS寫資料流程

1)客戶端通過Distributed FileSystem模組NameNode請求上傳檔案,NameNode檢查目標檔案是否已存在,父目錄是否存在。

2NameNode返回是否可以上傳。

3)客戶端請求第一個 Block上傳到哪幾個DataNode伺服器上。

4NameNode返回3DataNode節點,分別為dn1、dn2、dn3。

5)客戶端通過FSDataOutputStream模組請求dn1上傳資料,dn1收到請求會繼續呼叫dn2,然後dn2呼叫dn3,將這個通訊管道建立完成。

6dn1、dn2、dn3逐級應答客戶端。

7)客戶端開始往dn1上傳第一個Block(先從磁碟讀取資料放到一個本地記憶體快取),以Packet (64K)為單位,dn1收到一個Packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答佇列等待應答

8)當一個Block傳輸完成之後,客戶端再次請求NameNode上傳第二個Block的伺服器。(重複執行3-7步)。

4.HDFS讀資料流程

1)客戶端通過DistributedFileSystemNameNode請求下載檔案,NameNode通過查詢元資料,找到檔案塊所在的DataNode地址。

2)挑選一臺DataNode(就近原則,然後隨機)伺服器,請求讀取資料

3DataNode開始傳輸資料給客戶端(從磁盤裡面讀取資料輸入流,以Packet為單位來做校驗),先讀距離最近的,然後一次讀,序列讀

4)客戶端以Packet為單位接收,先在本地快取,然後寫入目標檔案。

5. NameNode和SecondaryNameNode工作機制

1)第一階段:NameNode啟動

1)第一次啟動NameNode格式化後建立Fsimage和Edits檔案。如果不是第一次啟動,直接載入編輯日誌和映象檔案到記憶體。

2客戶端對元資料進行增刪改的請求

3NameNode記錄操作日誌,更新滾動日誌

4NameNode在記憶體中對資料進行增刪改

2)第二階段:Secondary NameNode工作

通常情況下,SecondaryNameNode每隔一小時執行一次。

[hdfs-default.xml]

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600s</value>
</property>

1Secondary NameNode詢問NameNode是否需要CheckPoint直接帶回NameNode是否檢查結果。

2Secondary NameNode請求執行CheckPoint

3NameNode滾動正在寫的Edits日誌

4)將滾動前的編輯日誌和映象檔案拷貝到Secondary NameNode

5Secondary NameNode載入編輯日誌和映象檔案到記憶體,併合並。

6生成新的映象檔案fsimage.chkpoint

7拷貝fsimage.chkpointNameNode

8NameNodefsimage.chkpoint重新命名成fsimage

6DataNode工作機制

1)一個資料塊在DataNode上以檔案形式儲存在磁碟上,包括兩個檔案,一個是資料本身,一個是元資料包括資料塊的長度,塊資料校驗和,以及時間戳

2DataNode啟動後向NameNode註冊,通過後,週期性(1小時NameNode上報所有的塊資訊。

3)心跳是每3一次,心跳返回結果帶有NameNode給該DataNode的命令如複製塊資料到另一臺機器,或刪除某個資料塊如果超過10分鐘沒有收到某個DataNode的心跳,則認為該       節點不可用。

4)叢集執行中可以安全加入和退出一些機器