一、hdfs概述
HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的簡稱,它的設計目標是把超大數據集存儲到網絡中的多台普通計算機上,並提供高可靠性和高吞吐率的服務。
HDFS的優點:
高容錯性:數據自動保存多個副本,hdfs默認的副本數量是3
適合處理大數據:能夠處理GB、TP甚至BP級別的數據,能夠處理百萬規模以上的文件數量
可構建在廉價機器上
HDFS的缺點:
不適合低延遲的數據訪問:hdfs無法實現毫秒級別的數據存儲和訪問,hdfs提供高吞吐量但無法提供低延遲數據訪問
無法高效處理大量的小文件:大量小文件會占用namenode大量的內存來存儲元數據,且會導致尋址時間過長
不支持並發寫入和隨機修改:一個文件只能有一個寫,不允許多個線程同時寫;僅支持數據追加append,不支持隨機修改
二、hdfs組織和架構
hdfs主要有3個組間構成,分別是NameNode、SecondaryNameNode和DataNode。
NameNode的主要功能:
管理文件系統的名稱空間
配置副本策略
管理元數據,維護目錄樹,包括文件名、目錄名及其層級關系,文件、目錄的所有者及權限,每個文件的數據塊名稱及文件有哪些數據塊
處理客戶端的讀寫請求
NameNode實時通過心跳消息與DataNode交互,檢查文件系統是否運行正常。
namenode中的元數據不包含每個數據塊的位置信息,位置信息會在namenode啟動時從datanode獲取並保存在內存中,減少尋址時間。
DataNode的主要功能:
存儲實際的數據塊
執行數據塊的讀寫操作
SecondaryNameNode的主要功能:
定期合並fsimage文件和edits文件
緊急情況輔助恢復NameNode。
client,就是客戶端
與NameNode交互,獲取文件位置信息
與DataNode交互,進行文件讀寫操作
NameNode上存儲元數據的文件叫fsimage,NameNode啟動時將fsimage加載到內存,對元數據的操作保存在內存中並被持久化到另一個文件edits,SecondaryNameNode合並fsimage和edits的過程:
合並之前通知NameNode將新的操作寫到新的edits文件並將其命令為edits.new
SecondaryNameNode從NameNode請求fsimage和edits文件
SecondaryNameNode把fsimage和edits文件合並生成新的fsimage文件
NameNode從SecondaryNameNode獲取合並好的fsimage並替換原來舊的fsimage,並用edits.new文件替換掉原來的edits文件
更新fstime文件中的檢查點。