文章目錄
前言
一:必備理論基礎
1.1:什麼是HDFS?有什麼作用?
- HDFS(Hadoop Distributed File System),是Hadoop的核心子項目,是一個分佈式文件系統,是基於流數據模式訪問和處理超大文件的需求而開發的,可以運行於廉價的商用服務器上,能提供高吞吐量的數據訪問,非常適合大規模數據集上的應用
1.2:HDFS的適用與不適應的場景
- 1、高容錯性、可構建在廉價機器上
- 2、適合批處理
- 3、適合大數據處理
- 4、流式文件訪問
- 5,、可移植性
- 還有以下不適合的場景
- 1、不支持低延遲訪問
- 2、不適合小文件存儲
- 3、不支持併發寫入
- 4、不支持修改
1.3:HDFS架構圖
-
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讀取數據過程
- 1、HDFS客戶端打開要讀取的文件
- 2、文件系統通過RPC調用namenode獲取數據塊的幾個起始位置
- 3、客戶端通過反饋的信息,調用read方法
- 4、客戶端通過read方法向最近的數據塊起始位置讀取信息,使得數據節點將數據傳回客戶端
- 5、客戶端讀到數據塊的末端的時候,關閉與當前數據塊的連接,繼續讀取下一個數據塊
- 6、所有的數據庫都讀完了,客戶端會關閉連接
1.4.2:HDFS寫入數據過程
- 1、客戶端調用create()函數新建文件
- 2、文件系統通過RPC在namenode中創建文件
- 3、創建完成後,客戶端向namenode返回的FSDataOutputStream對象中開始寫入數據
- 4、FSDataOutputStream對象將寫入的數據分成一個一個的數據包,並通過內部數據隊列將他們發送到相應的合適的DataNode中
- 5、當數據列隊中的DataNode都表示收到數據包後,會將數據包從管道中刪除
- 6、客戶端寫入關閉,關閉連接
- 7、namenode確認完成,寫入成功
1.5:HDFS副本存放策略
- 需要對可靠性,寫入帶寬和讀取帶寬進行權衡,一般情況下副本系數爲3
- 將第一個副本放在本地節點,將第二個副本放在本地機架上的另一個節點,而第三個副本放到不同機架上的節點。
- 此策略減少了機架間的寫流量,通常可以提高寫性能。機架故障的機會遠小於節點故障的機會。此策略不會影響數據的可靠性和可用性保證。但是,由於一個塊僅放置在兩個唯一的機架中,而不是三個,因此它確實減少了讀取數據時使用的總網絡帶寬。使用此策略,文件的副本不會均勻分佈在機架上。三分之一的副本位於一個節點上,三分之二的副本位於一個機架上,其餘三分之一則平均分佈在其餘機架上。此策略可提高寫入性能,而不會影響數據可靠性或讀取性能。
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命名空間中刪除該文件。文件的刪除導致與文件關聯的塊被釋放。