1. 程式人生 > >HDFS 概念之 block 詳解

HDFS 概念之 block 詳解

一般情況下,任何磁碟都有‘最小讀寫單位’的概念,可以理解為該磁碟的‘block’。建立在該磁碟之上的檔案系統也有‘block’的概念,一般為磁碟‘block’大小的整數倍。對於使用者來說,這些讀寫限制都是透明的。(即,使用者感覺自己可以讀寫任意大小的檔案。)然而有些應用則是執行在檔案系統block層級的,可以感知到block的存在,比如 dffsck。

HDFS 作為一種檔案系統,當然也需要有‘block’的概念。不過HDFS的block一般比較大,預設為128MB。與普通的管理單個磁碟的檔案系統一樣,HDFS也將檔案分割成block,每個block都作為一個獨立的單元分別儲存。不同點在於,在HDFS中,小於block的檔案不會佔用一個block的空間。(比如,檔案大小為1MB,那麼它會佔用一個HDFS的block,但是隻使用底層磁碟1MB的空間,而不是128MB。)

為什麼HDFS的block相較於傳統檔案系統來說大很多

因為HDFS的的一個設計目標就是能夠快速讀取。而對於磁碟來說,讀取一個數據塊涉及到三種時間開銷,尋道時間、旋轉時間和傳輸時間。傳輸時間是磁碟本身的特性,不可能通過人工手段來改變,但是對於尋道時間和旋轉時間,則可以通過增大一次讀取的資料量來減少尋道和旋轉的次數。這樣的話,就可以將讀取資料的速率設計為接近真實的磁碟傳輸速率。

舉個例子,假設某磁碟的尋道時間和旋轉時間之和為10ms,傳輸速率為100MB/s。那麼,如果想設計一種讀取方式讓尋道時間與旋轉時間總和 不高於總讀取時間的1%的話,則需要將block的大小設定為100MB。

當然,這個觀點不可能長期成立。在MapReduce中,一個Map任務一般一次只處理一個block。那麼,當Map任務的數量少於叢集中節點的個數時,完成此job所需時間就會慢於其他情況。

對分散式檔案系統進行塊級抽象(block)有諸多好處。最大的好處就是可以儲存非常大的檔案,即檔案大小大於單機磁碟。理論上來說,HDFS可以存放下一個檔案大小等於叢集內所有機器磁碟大小總和的檔案。另外,將檔案分割為block會使得檔案系統的組織方式更加簡單。相比於以檔案方式分割大檔案,block只是固定大小的資料塊,即不需要儲存元資料,也能夠非常容易的計算出一個磁碟上能夠儲存幾個block。通俗來講就是越簡單越好。還有一個優點,就是固定大小的block可以非常容易得進行冗餘儲存。為防止因為機器掛掉而損失資料,必須將block複製多份,分別儲存在不同的機器上。如果其中一個複製塊資料損壞了,可以從其他複製塊中恢復,如果一個機器掛了,則可以將本臺機器上原來儲存的block複製儲存到其他可用的機器上來確保複製份數維持安全水平。複製冗餘塊到多個節點上還可以用來分散讀取壓力,將經常被訪問的檔案多複製幾份到其他機器上,就可以提高叢集處理訪問的能力。

HDFS的管理命令也與普通檔案系統非常相似,比如下邊這條命令可以列出HDFS中檔案與block的對應關係:

% hdfs fsck / -files -blocks

【如有任何問題,歡迎留言交流!】