了解HDFS的數據存取機制
- 2019 年 10 月 6 日
- 筆記
HDFS是大數據存取的基礎,很多數據都依賴於HDFS,如HBase資料庫。作為Hadoop的基礎,HDFS的數據讀取機制有很多細節。我們今天來看一下。
一、HDFS的數據存取以機架為單位
HDFS採用以機架(Rack)為基礎建議的數據存放單位。
HDFS會將同一個數據源的數據拆分後,放到不同的機架數據節點上。這樣做有好處、壞處。壞處是:不能充分利用同一個機架上的內網頻寬。但好處也很明顯,讀取數據時,可以在多個機架並行讀取數據,容易實現內部負載均衡。
HDFS默認的冗餘複製因子是3,數據默認保存3份。但這些3份數據有2份是在同一個機架的不同機器上面,第3個副本放在了不同機架上面。
二、HDFS的數據讀取
客戶端需要訪問HDFS中存放的數據時,不能像取本地磁碟文件這樣直接,需要通過HDFS API。客戶端通過API從NameNode獲取到數據的存放位置,該存放位置是三份不同副本的位置列表。API會優先選擇與客戶端位置機架ID相同的副本進行數據讀取,否則就隨機選擇一個副本讀取數據。
三、 HDFS的數據複製有雲計算的理念存在
HDFS的數據複製採用了流水線複製的策略,大大提高了數據複製過程的效率。當客戶端需要向HDFS中寫入一個文件時,這個文件會首先被寫入本地,並按HDFS設置切塊(默認為128MB一塊)。每個塊都向HDFS的NameNode節點發起寫請求,客戶端把數據寫入第一個DataNode節點,第一個節點寫成功向再寫入第二個節點,依次類推。形成了流水線作業,避免客戶端同時向三個節點寫數據,造成的數據延遲及客戶端壓力的增加。

四、HDFS有不適合乾的活
1、低延遲的數據訪問不合適
如ms秒級的應用,不適合用HDFS。HDFS每訪問都需要經過NameNode查詢數據的所在,增加了訪問時間。
2、小文件不適合
文件的元數據(目錄結構)全部存在NameNode記憶體中,如文件太小,文件數據量過多,則造成NameNode的記憶體空間難以支援。
五、HDFS最合適的場景
1、冷數據的訪問
HDFS利用x86的低廉價格進行數據存取,一般用於放非實時數據。
2、大文件非常合適
HDFS的Block默認為128MB。如果一個文件大小為1MB,則在HDFS只會佔用1MB。如果一個大文件,如1GB的文本文件,會被拆分成8份,放到不同的數據節點中,取數據是8份數據同時取。同時在利用mapreduce計算時,也是8份數據同時計算。