HDFS分佈式文件系統基礎理論指南!

前言

一:必備理論基礎

1.1:什麼是HDFS?有什麼作用?

  • HDFS(Hadoop Distributed File System),是Hadoop的核心子項目,是一個分佈式文件系統,是基於流數據模式訪問和處理超大文件的需求而開發的,可以運行於廉價的商用服務器上,能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用

1.2:HDFS的適用與不適應的場景

  • 1、高容錯性、可構建在廉價機器上
  • 2、適合批處理
  • 3、適合大數據處理
  • 4、流式文件訪問
  • 5,、可移植性
  • 還有以下不適合的場景
  • 1、不支持低延遲訪問
  • 2、不適合小文件存儲
  • 3、不支持併發寫入
  • 4、不支持修改

1.3:HDFS架構圖

  • mark

  • HDFS是一個主/從(Mater/Slave)體系結構,HDFS集羣擁有一個NameNode和一些DataNode。NameNode管理文件系統的元數據,DataNode存儲實際的數據

  • 數據塊

    • HDFS旨在支持非常大的文件。HDFS使用的典型塊大小爲64 MB。因此,HDFS文件被切成64 MB的塊
  • **Client:**HDFS客戶端

    • 1、提供一些命令來管理、訪問 HDFS,比如啓動或者關閉HDFS。
    • 2、與 DataNode 交互,讀取或者寫入數據;讀取時,要與 NameNode 交互,獲取文件的位置信息;寫入 HDFS 的時候,Client 將文件切分成 一個一個的Block,然後進行存儲。
  • **NameNode:**即Master

    • NameNode執行文件系統名稱空間操作,例如打開,關閉和重命名文件和目錄。
    • 它還確定塊到DataNode的映射
    • 配置副本策略
    • 處理客戶端讀寫請求
  • **DataNode:**就是Slave

    • 存儲實際的數據塊

    • 數據節點負責處理來自文件系統客戶端的讀寫請求

1.4:HDFS讀寫數據工作機制

1.4.1:HDFS讀取數據過程
  • mark
  • 1、HDFS客戶端打開要讀取的文件
  • 2、文件系統通過RPC調用namenode獲取數據塊的幾個起始位置
  • 3、客戶端通過反饋的信息,調用read方法
  • 4、客戶端通過read方法向最近的數據塊起始位置讀取信息,使得數據節點將數據傳回客戶端
  • 5、客戶端讀到數據塊的末端的時候,關閉與當前數據塊的連接,繼續讀取下一個數據塊
  • 6、所有的數據庫都讀完了,客戶端會關閉連接
1.4.2:HDFS寫入數據過程
  • mark
  • 1、客戶端調用create()函數新建文件
  • 2、文件系統通過RPC在namenode中創建文件
  • 3、創建完成後,客戶端向namenode返回的FSDataOutputStream對象中開始寫入數據
  • 4、FSDataOutputStream對象將寫入的數據分成一個一個的數據包,並通過內部數據隊列將他們發送到相應的合適的DataNode中
  • 5、當數據列隊中的DataNode都表示收到數據包後,會將數據包從管道中刪除
  • 6、客戶端寫入關閉,關閉連接
  • 7、namenode確認完成,寫入成功

1.5:HDFS副本存放策略

  • 需要對可靠性,寫入帶寬和讀取帶寬進行權衡,一般情況下副本系數爲3
  • mark
  • 將第一個副本放在本地節點,將第二個副本放在本地機架上的另一個節點,而第三個副本放到不同機架上的節點。
  • 此策略減少了機架間的寫流量,通常可以提高寫性能。機架故障的機會遠小於節點故障的機會。此策略不會影響數據的可靠性和可用性保證。但是,由於一個塊僅放置在兩個唯一的機架中,而不是三個,因此它確實減少了讀取數據時使用的總網絡帶寬。使用此策略,文件的副本不會均勻分佈在機架上。三分之一的副本位於一個節點上,三分之二的副本位於一個機架上,其餘三分之一則平均分佈在其餘機架上。此策略可提高寫入性能,而不會影響數據可靠性或讀取性能。

1.6:HDFS的可靠性

  • 數據磁盤故障,心跳和恢復
    • 每個DataNode定期向NameNode發送心跳消息。
    • 網絡分區可能導致DataNode的子集失去與NameNode的連接。NameNode通過缺少心跳消息來檢測到這種情況。
    • NameNode將沒有最近心跳的DataNode標記爲已死,並且不轉發任何新IO向他們提出要求。已註冊到失效DataNode的任何數據都不再可用於HDFS。DataNode死亡可能導致某些塊的複製因子降至其指定值以下。
    • NameNode不斷跟蹤需要複製的塊,並在必要時啓動複製:DataNode可能不可用,副本可能損壞,DataNode上的硬盤可能發生故障或文件的複製因子增加。
  • 數據的完整性–校驗和
    • 從DataNode提取的數據塊可能會損壞。HDFS客戶端軟件對HDFS文件的內容執行校驗和檢查。
    • 客戶端創建HDFS文件時,它將計算文件每個塊的校驗和,並將這些校驗和存儲在同一HDFS命名空間中的單獨的隱藏文件中。
    • 客戶端檢索文件內容時,它將驗證從每個DataNode接收的數據是否與存儲在關聯的校驗和文件中的校驗和匹配。如果不是,則客戶端可以選擇從另一個具有該塊副本的DataNode中檢索該塊。

1.7:文件的刪除

  • 用戶或應用程序刪除文件後,不會立即將其從HDFS中刪除。相反,HDFS首先將其重命名爲/ trash目錄中的文件。只要文件保留在/ trash中,就可以快速恢復該文件。
  • 文件在/ trash中保留可配置的時間。當前的默認策略是從/ trash中刪除超過6小時的文件,在/ trash中到期後,NameNode將從HDFS命名空間中刪除該文件。文件的刪除導致與文件關聯的塊被釋放。
  • 只要文件保留在/ trash目錄中,用戶就可以在刪除文件後取消刪除該文件。
    trash中到期後,NameNode將從HDFS命名空間中刪除該文件。文件的刪除導致與文件關聯的塊被釋放。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章