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

 

DataNode工作機制

 

 

 

1)一個數據塊在DataNode上以文件形式存儲在磁盤上,包括兩個文件,一個是數據本身,一個是元數據包括數據塊的長度,塊數據校驗和,以及時間戳

 

2DataNode啟動后向NameNode注冊,通過后,周期性(1小時NameNode上報所有的塊信息。

 

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

 

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

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM