1. HDFS簡介
HDFS是Hadoop Distributed File System的簡稱,即Hadoop分布式文件系統(tǒng)枯冈。它起源于谷歌發(fā)表的GFS論文,是該論文的開源實現(xiàn)袁滥,也是整個大數(shù)據(jù)的基礎驱富。
HDFS專門為解決大數(shù)據(jù)的存儲問題而產(chǎn)生的革屠,具有如下特點:
- 可存儲超大文件:HDFS可存儲PB級的數(shù)據(jù)
- 流式數(shù)據(jù)訪問:一次寫入凿试,多次讀取。數(shù)據(jù)集通常從數(shù)據(jù)源復制而來似芝,每次分析都涉及該數(shù)據(jù)集的大部分甚至全部那婉。
- 商用硬件:Hadoop不需要運行在高昂可靠的硬件上,它是設計運行在普通的商用硬件上党瓮,節(jié)點的故障不會影響到系統(tǒng)的運行详炬。
不適用的場景:
- 低延時的數(shù)據(jù)訪問:HDFS是為高數(shù)據(jù)吞吐量而設計的,這會以提高時間延遲為代價寞奸。因此呛谜,對于低延時的訪問需求不適合在HDFS上。
- 大量的小文件:由于namenode將文件系統(tǒng)的元數(shù)據(jù)存儲在內存中枪萄,因此該文件系統(tǒng)所能存儲的文件總數(shù)受限于namenode的內存容量隐岛。
- 多用戶寫入,隨意修改文件:HDFS中的文件只支持單個寫入者瓷翻,而且不支持在任意位置進行修改聚凹。
2. HDFS文件塊
每個磁盤有默認的數(shù)據(jù)塊割坠,這是磁盤讀寫的最小單位。文件系統(tǒng)的塊大小一般為磁盤塊的整數(shù)倍妒牙。磁盤塊大小一般為512 字節(jié)彼哼。
HDFS文件系統(tǒng)也有塊(block)的概念,默認值為128M湘今,也可以修改敢朱。超過塊大小的文件在存儲的時候會被分為多個分塊(chunk)。有點需要注意:HDFS中小于一個塊大小的文件不會占據(jù)整個塊的空間摩瞎,而單一磁盤中如果文件小于塊大小蔫饰,那么整個磁盤塊的空間都會被占用。
對文件進行分塊存儲有很多好處愉豺,比如:
- 文件的大小可以不受限于單個磁盤的容量篓吁;
- 文件的所有塊不必存儲在同一個磁盤上,可以利用集群上的任意一個磁盤進行存儲蚪拦;
- 將文件分塊存儲便于備份和容錯杖剪,提高可用性。
對于訪問頻繁的文件驰贷,其對應的塊可能會被顯示地緩存在內存中盛嘿。
# HDFS的文件塊信息可以通過fsck命令查看
hdfs fsck / -files -blocks
3. HDFS節(jié)點
- namenode
namenode維護HDFS文件系統(tǒng)的元數(shù)據(jù)。所謂元數(shù)據(jù)括袒,就是數(shù)據(jù)的數(shù)據(jù)次兆。即存儲在HDFS文件系統(tǒng)上的數(shù)據(jù)的基本信息,比如文件系統(tǒng)樹及整棵樹內所有的文件和目錄锹锰,每個文件中各個數(shù)據(jù)塊所在數(shù)據(jù)節(jié)點信息芥炭,但并不永久保存塊的位置信息,因為這塊可能隨時變化恃慧。這部分的信息在系統(tǒng)啟動的時候根據(jù)數(shù)據(jù)節(jié)點的信息重建园蝠。
- datanode
datanode是HDFS文件系統(tǒng)存儲具體數(shù)據(jù)的節(jié)點。它們根據(jù)namenode節(jié)點的調度來存儲和檢索文件的數(shù)據(jù)塊痢士。由于文件的元數(shù)據(jù)都存儲在namenode彪薛,如果沒有namenode,文件系統(tǒng)將無法工作怠蹂,如果namenode的數(shù)據(jù)損壞善延,那么存儲在datanode上的數(shù)據(jù)就作廢了。
因此城侧,對namenode的容錯顯得非常重要易遣。