公眾號文章匯總
985
2025-04-02
3.2? HDFS的概念
3.2.1? 數據塊
每個磁盤都有默認的數據塊大小,這是磁盤進行數據讀/寫的最小單位。構建于單個磁盤之上的文件系統通過磁盤塊來管理該文件系統中的塊,該文件系統塊的大小可以是磁盤塊的整數倍。文件系統塊一般為幾千字節,而磁盤塊一般為512字節。這些信息(文件系統塊大小)對于需要讀/寫文件的文件系統用戶來說是透明的。盡管如此,系統仍然提供了一些工具(如df和fsck)來維護文件系統,由它們對文件系統中的塊進行操作。
HDFS同樣也有塊(block)的概念,但是大得多,默認為128 MB。與單一磁盤上的文件系統相似,HDFS上的文件也被劃分為塊大小的多個分塊(chunk),作為獨立的存儲單元。但與面向單一磁盤的文件系統不同的是,HDFS中小于一個塊大小的文件不會占據整個塊的空間(例如,當一個?1MB的文件存儲在一個128?MB 的塊中時,文件只使用1?MB的磁盤空間,而不是128?MB)。如果沒有特殊指出,本書中提到的“塊”特指HDFS中的塊。
HDFS中的塊為什么這么大?
HDFS的塊比磁盤的塊大,其目的是為了最小化尋址開銷。如果塊足夠大,從磁盤傳輸數據的時間會明顯大于定位這個塊開始位置所需的時間。因而,傳輸一個由多個塊組成的大文件的時間取決于磁盤傳輸速率。
我們來做一個速算,如果尋址時間約為10?ms,傳輸速率為100 ? MB/s,為了使尋址時間僅占傳輸時間的1%,我們要將塊大小設置約為100 ? MB。默認的塊大小實際為128?MB,但是很多情況下HDFS安裝時使用更大的塊。以后隨著新一代磁盤驅動器傳輸速率的提升,塊的大小會被設置得更大。
但是這個參數也不會設置得過大。MapReduce中的map任務通常一次只處理一個塊中的數據,因此如果任務數太少(少于集群中的節點數量),作業的運行速度就會比較慢。
對分布式文件系統中的塊進行抽象會帶來很多好處。第一個最明顯的好處是,一個文件的大小可以大于網絡中任意一個磁盤的容量。文件的所有塊并不需要存儲在同一個磁盤上,因此它們可以利用集群上的任意一個磁盤進行存儲。事實上,盡管不常見,但對于整個HDFS集群而言,也可以僅存儲一個文件,該文件的塊占滿集群中所有的磁盤。
第二個好處是,使用抽象塊而非整個文件作為存儲單元,大大簡化了存儲子系統的設計。簡化是所有系統的目標,但是這對于故障種類繁多的分布式系統來說尤為重要。將存儲子系統的處理對象設置為塊,可簡化存儲管理(由于塊的大小是固定的,因此計算單個磁盤能存儲多少個塊就相對容易)。同時也消除了對元數據的顧慮(塊只是要存儲的大塊數據,而文件的元數據,如權限信息,并不需要與塊一同存儲,這樣一來,其他系統就可以單獨管理這些元數據)。
不僅如此,塊還非常適合用于數據備份進而提供數據容錯能力和提高可用性。將每個塊復制到少數幾個物理上相互獨立的機器上(默認為3個),可以確保在塊、磁盤或機器發生故障后數據不會丟失。如果發現一個塊不可用,系統會從其他地方讀取另一個復本,而這個過程對用戶是透明的。一個因損壞或機器故障而丟失的塊可以從其他候選地點復制到另一臺可以正常運行的機器上,以保證復本的數量回到正常水平(參見5.1節對數據完整性的討論,進一步了解如何應對數據損壞)。同樣,有些應用程序可能選擇為一些常用的文件塊設置更高的復本數量進而分散集群中的讀取負載。
與磁盤文件系統相似,HDFS中fsck指令可以顯示塊信息。例如,執行以下命令將列出文件系統中各個文件由哪些塊構成,詳情可以參見11.1.4節對文件系統檢查(fsck)的討論:
% hdfs fsck / -files -blocks
大數據 Hadoop
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。