磁碟有乙個block size的概念,它是磁碟讀/寫資料的最小單位。構建在這樣的磁碟上的檔案系統也是通過塊來管理資料的,檔案系統的塊通常是磁碟塊的整數倍。檔案系統的塊一般為幾千位元組(byte),磁碟塊一般為512位元組(byte)
hdfs也有block的概念,但它的塊是乙個很大的單元,預設是64mb。像硬碟中的檔案系統一樣,在hdfs中的檔案將會按塊大小進行分解,並作為獨立的單元進行儲存。但和硬碟中的檔案系統不一樣的是,儲存在塊中的硬的乙個比塊小的檔案並不會佔據乙個塊大小盤物理空間(hdfs中乙個塊只儲存乙個檔案的內容)。
在hdfs學習(一) – hdfs設計中,我們曾說過,對hdfs來說,讀取整個資料的時間延遲要比讀取到第一條記錄的資料延遲更重要,就體現在這裡。hdfs的block設計的如此之大,也就是為了最小化尋道時間。把乙個資料塊設計的足夠大,就能夠使得資料傳輸的時間顯著地大於尋找到block所在時間。這樣,傳輸乙個由多個block組成的檔案的時間就取決於磁碟的傳輸速率。
舉乙個簡單的例子,假設尋道時間大約為10ms,傳輸速度為100mb/s。為了使得尋道時間僅為傳輸時間的1%,我們就需要設定塊的大小為100mb。hdfs預設的block size是64mb,但是更多的企業裡邊,已經設定成128m,而且這個引數將隨著新一代硬碟速度的增長而增長。
而block size的值也不宜設定過大,通常,mapreduce中的map任務一次只處理乙個block中的資料,如果啟動太少的task(少於集群中的節點的數量),作業的速度就會比較慢。
檔案的塊並不需要儲存在同乙個硬碟上,乙個檔案的快可以分布在集群中任意乙個硬碟上。事實上,雖然實際中並沒有,整個集群可以只儲存乙個檔案,該檔案的塊佔滿整個集群的硬碟空間。
簡化設計,對於故障種類繁多的分布式系統來說尤為重要。以塊為單位,一方面簡化儲存管理,因為塊大小是固定的,所以乙個硬碟放多少個塊是非常容易計算的;另一方面,也消除了元資料的顧慮,因為block僅僅是儲存的一塊資料,其檔案的元資料,例如許可權等就不需要跟資料塊一起儲存,可以交由另外的其他系統來處理。
為了防止資料塊損壞或者磁碟或者機器故障,每乙個block都可以被分到少數幾天獨立的機器上(預設3臺)。這樣,如果乙個block不能用了,就從其他的一處地方,複製過來乙份。詳細的關於hdfs資料完整性的問題,將在《hadoop i/o學習(一) – 資料完整性》中詳細介紹。
hdfs系列文章:
《hdfs學習(一) – hdfs設計》
《hdfs學習(二) – hdfs block介紹》
《hdfs學習(三) – namenode and datanode》
《hdfs學習(四) – hdfs federation》
Hadoop學習(二) HDFS介紹
隨著資料量越來越大,在乙個作業系統存不下所有的資料,那麼就分配到更多的作業系統管理的磁碟中,但是不方便管理和維護,迫切需要一種系統來管理多台機器上的檔案,這就是分布式檔案管理系統。hdfs只是分布式檔案管理系統中的一種。hadoop分布式檔案系統,主要用來解決海量資料的儲存問題 它是乙個檔案系統,用...
hadoop學習筆記(二) HDFS
定義 hdfs hadoop distributed file system 它是乙個檔案系統,用於儲存檔案,通過目錄樹來定位檔案,它是分布式的,由很多伺服器聯合起來實現其功能。場景 適合一次寫入,多次讀出的場景,且不支援檔案的修改,適合用來做資料分析,不適合做網盤應用。優點 1.高容錯性 資料儲存...
Hadoop學習之HDFS架構 二
hdfs可以跨越大集群中的機器可靠地儲存非常大的檔案,將檔案儲存為一系列的塊,除了最後乙個塊外,所有的塊的大小都是相同的。當然若檔案大小正好為塊大小的倍數則所有塊的大小相同。為了容錯的目的,乙個檔案的塊會被複製成若干份,塊大小和複製因子是可配置的。應用程式可以指定檔案的副本數量,複製因子可以在檔案建...