HDFS概念詳解 塊

2021-06-29 12:23:24 字數 1380 閱讀 3041

乙個磁碟有它的塊大小,代表著它能夠讀寫的最小資料量。檔案系統通過處理大小為乙個磁碟塊大小的整數倍數的資料塊來運作這個磁碟。檔案系統塊一般為幾千位元組,而磁碟塊一般為512個位元組。這些資訊,對於僅僅在乙個檔案上讀或寫任意長度的檔案系統使用者來說是透明的。但是,有些工具會維護檔案系統,如df 和 fsck, 它們都在系統塊級上操作。

hdfs也有塊的概念,不過是更大的單元,預設為64 mb。與單一磁碟上的檔案系統相似,hdfs上的檔案也被分為以塊為大小的分塊,作為單獨的單元儲存。但與其不同的是,hdfs中小於乙個塊大小的檔案不會佔據整個塊的空間。如果沒有特殊指出,"塊"在本書中就指代hdfs中的塊。

為何hdfs中的乙個塊那麼大?

hdfs的塊比磁碟的塊大,目的是為了減小定址開銷。通過讓乙個塊足夠大,從磁碟轉移資料的時間能夠遠遠大於定位這個塊開始端的時間。因此,傳送乙個由多個塊組成的檔案的時間就取決於磁碟傳輸送率。

我們來做乙個速算,如果定址時間在10毫秒左右,傳輸速率是100兆/秒,為了使定址時間為傳輸時間的1%,我們需要100 mb左右的塊大小。而預設的大小實際為64 mb,儘管很多hdfs設定使用128 mb的塊。這一數字將在以後隨著新一代磁碟驅動帶來的傳輸速度加快而繼續調整。

當然這種假定不應該如此誇張。mapreduce過程中的map任務通常是在乙個時間內執行操作乙個塊,因此如果任務數過於少(少於集群上的節點數量),作業的執行速度顯然就比預期的慢。

在分布式檔案系統中使用抽象塊會帶來很多好處。第乙個最明顯的好處是,乙個檔案可以大於網路中任意乙個磁碟的容量。檔案的分塊(block,後文有些地方也簡稱為"塊")不需要儲存在同乙個磁碟上,因此它們可以利用集群上的任意乙個磁碟。其實,雖然不常見,但對於hdfs集群而言,也可以儲存乙個其分塊佔滿集群中所有磁碟的檔案。

第二個好處是,使用塊抽象單元而不是檔案會簡化儲存子系統。簡單化是所有系統的追求,但對於故障種類繁多的分布式系統來說尤為重要的。儲存子系統控制的是塊,簡化了儲存管理。(因為塊的大小固定,計算乙個磁碟能存多少塊就相對容易),也消除了對元資料的顧慮(塊只是一部分儲存的資料-而檔案的元資料,如許可資訊,不需要與塊一同儲存,這樣一來,其他系統就可以正交地管理元資料。)

不僅如此,塊很適合於為提供容錯和實用性而做的複製操作。為了應對損壞的塊以及磁碟或機器的故障,每個塊都在少數其他分散的機器(一般為3個)進行複製。如果乙個塊損壞了,系統會在其他地方讀取另乙個副本,而這個過程是對使用者透明的。乙個因損壞或機器故障而丟失的塊會從其他候選地點複製到正常執行的機器上,以保證副本的數量回到正常水平。(參見第4章的"資料的完整性"小節,進一步了解如何應對資料損壞。)同樣,有些應用程式可能選擇為熱門的檔案塊設定更高的副本數量以提高集群的讀取負載量。

與磁碟檔案系統相似,hdfs中 fsck 指令會顯示塊的資訊。例如,執行以下命令將列出檔案系統中組成各個檔案的塊:

1.  % hadoop fsck / -files -blocks 

HDFS 塊快取和聯邦HDFS

塊快取 對於訪問頻繁的塊,顯式地快取在datanode的記憶體中,以堆外塊快取的方式存在 利用快取塊的優勢提高讀操作的效能。聯邦hdfs namenode在記憶體中儲存了每個檔案與每個資料塊的引用關係,超大集群的namenode記憶體會成為瓶頸 hdfs允許擴充套件namenode,不同的namen...

HDFS 檔案塊大小

hdfs中的檔案在物理上是分塊儲存 block 塊的大小可以通過配置引數 dfs.blocksize 來規定,預設大小在hadoop2.x版本中是128m,老版本中是64m。思考 為什麼塊的大小不能設定太小,也不能設定太大?1 hdfs的塊設定太小,會增加定址時間,程式一直在找塊的開始位置 2 如果...

HDFS 資料塊損壞

由斷電或其它原因引起的hdfs服務不正常或者塊損壞 一 檢查hdfs的檔案的健康狀態hdfs fsck 二 檢視損壞的塊以及檔案的對應關係hdfs fsck list corruptfileblocks 三 解決辦法 資料可以從其它地方找到 比如mysql 將資料重新重新整理乙份到hdfs上 hdf...