天天看點

Hadoop HDFS概念學習系列之HDFS Block(八)  我們知道資料塊(Block)

 塊是檔案系統中的一個很重要的概念。在UNIX/Linux系統中有一個資料塊(Data Block)的概念,Data Block是檔案系統讀寫的最小資料單元。一般在檔案系統中資料塊的大小是512位元組,一個檔案所占的大小就是資料塊大小的整數倍.對于使用者來講對檔案的通路/存取都是透明的,同樣系統管理者可以利用系統本身的指令對資料塊進行相關操作。是以單從檔案系統來講,HDFS也有一個塊(Block)的概念,不同之處在于HDFS為了滿足大資料的效率和整個叢集的吞吐量選擇了更大的數值,預設為64MB。和一般的檔案系統不同的是:雖然塊設定得比較大,但是當一個檔案的大小小于HDFS的塊大小時,實際存儲所占的大小并不占用一個塊的大小。

  用戶端在讀取HDFS上的一個檔案時就以塊為基本的資料單元。例如一次簡單讀取,首先,用戶端把檔案名和程式指定的位元組偏移,根據固定的Block大小,轉換成檔案的Block索引。然後,用戶端把檔案名和Block索引發送給Master節點,Master節點将相應的Block辨別和副本的位置資訊傳回給用戶端,用戶端用檔案名和Block索引作為key緩存這些資訊,之後用戶端發送請求到其中的一個副本,一般會選擇最近的。請求資訊包含了Block的辨別和位元組範圍。在對這個Block的後續讀取操作中,用戶端不必再和Master節點通信了,除非緩存的中繼資料資訊過期或檔案被重新打開。實際上,用戶端通常會在一次請求中查詢多個Block資訊,Master節點的回應也可能包含了緊跟着這些被請求的Block後面的Block的資訊。在實際應用中,這些額外的資訊在不花費任何代價的情況下,避免了用戶端和Master節點未來可能會發生的幾次通信。

  我們知道,在作業系統中都有一個檔案塊的概念,檔案以塊的形式存儲在磁盤中,此處塊的大小代表系統讀/寫可操作的最小檔案大小。也就是說,檔案系統每次隻能操作磁盤塊大小的整數倍資料。通常來說,一個檔案系統塊大小為幾千位元組,而磁盤塊大小為512位元組。檔案的操作都由系統完成,這些對使用者來說都是透明的。

  這裡,我們所要介紹的HDFS中的塊是一個抽象的概念,它比上面作業系統中所說的塊要大得多。在配置Hadoop系統時會看到,它的預設塊大小為64MB。和單機上的檔案系統相同,HDFS分布式檔案系統中的檔案也被分成塊進行存儲,它是檔案存儲處理的邏輯單元。

  HDFS作為一個分布式檔案系統,設計是用來處理大檔案的,使用抽象的塊會帶來很多好處。一個好處是可以存儲任意大的檔案而又不會受到網絡中任一單個節點磁盤大小的限制。可以想象一下,單個節點存儲100TB的資料是不可能的,但是由于邏輯塊的設計,HDFS可以将這個超大的檔案分成衆多塊,分别存儲在叢集的各台機器上。 另外一個好處是使用抽象塊作為操作的單元可簡化存儲子系統。這裡之是以提到簡化,是因為這是所有系統的追求,而對故障出現頻繁和種類繁多的分布式系統來說,簡化就顯得尤為重要。在HDFS中塊的大小固定,這樣它就簡化了存儲系統的管理,特别是中繼資料資訊可以和檔案塊内容分開存儲。不僅如此,塊更有利于分布式檔案系統中複制容錯的實作。在HDFS中,為了處理節點故障,預設将檔案塊副本數設定為3份,分别存儲在叢集的不同節點上。當一個塊損壞時,系統會通過NameNode擷取中繼資料資訊,在另外的機器上讀取一個副本并進行存儲,這個過程對使用者來說都是透明的。當然,這裡的檔案塊副本備援量可以通過檔案進行配置,比如在有些應用中,可能會為操作頻率較高的檔案塊設定較高的副本數最以提高叢集的吞吐量。

  在HDFS中,可以通過終端指令直接獲得檔案和塊資訊,比如以下指令可以列出檔案系統中組成各個檔案的塊。

   hadoop  fsck/ -files  -blocks

  在讨論檔案系統的時候,特别是在分析檔案系統的實作時,我們知道,為了便于管理,裝置往往将存儲空間組織成為具有一定結構的存儲機關。如磁盤,檔案是以塊的形式存儲在磁盤中,塊的大小代表系統讀/寫操作的最小機關;在Linux的Ext3檔案系統中,塊大小預設為4095位元組。檔案系統通過一個塊大小的整數倍的資料塊,來使用磁盤。磁盤上的資料塊管理屬于檔案系統實作的内部細節,對于通過系統調用讀寫檔案的使用者來說,是透明的。

  HDFS也有塊的概念,不過是更大的單元,預設FiDFS資料塊大小是64MB。和普通檔案系統類似,HDFS上的檔案也進行分塊,塊作為單獨的存儲單元,以Linux上普通檔案的形式儲存在資料節點的檔案系統中。資料塊是HDFS的檔案存儲處理的單元。

  HDFS是針對大檔案設計的分布式系統,使用資料塊帶來了很多的好處,具體如下:

  1) HDFS可以儲存比存儲節點單一磁盤大的檔案。

檔案塊可以儲存在不同的磁盤上。其實,在HDFS中,檔案資料可以存放在叢集上的任何一個磁盤上,不需要儲存在同一個磁盤上。或同一個機器的不同磁盤上。

2)簡化了存儲子系統。

簡單化是所有系統的追求,特别是在故障種類繁多的分布式系統,将管理“塊”和管理“檔案”的功能區分開,簡化了存儲管理,也消除了分布式管理檔案中繼資料的複雜性。

3)友善容錯,有利幹資料複制。

在HDFS中,為了應對損壞的塊以及磁盤、機器故障,資料塊會在不同的機器上進行複制(一般副本數為3,即一份資料儲存在3個不同的地方),如果一個資料塊副本丢失或者損壞了,系統會在其他地方讀取副本,這個過程對使用者來說是透明的,它實作了分布式系統中的位置透明性和故障透明性。同時,一個因損壞或機器故障而丢失的塊會從其他地方複制到某一個正常運作的機器,以保證副本數目恢複到正常水準。該正常水準的副本數,也稱副本系數。

HDFS的資料塊比前面讨論過的磁盤塊大得多,一個典型HDFS系統中,磁盤塊的大小為64MB,也有使用128MB和256MB資料塊大小的叢集。為什麼在HDFS中要使用這麼大的資料塊呢?原因和在磁盤上使用大磁盤塊的原理是一樣的。在普通檔案系統中使用較大的磁盤塊,可以減少管理資料塊需要的開銷,如在Linux中可以減少儲存在i-node中磁盤位址表中的資訊鍊的長度:同時,在對檔案進行讀寫時,可以減少尋址開銷,即磁盤定位資料塊的次數。HDFS中使用大資料塊,可以減少名位元組點上管理檔案和資料塊關系的開銷,同時,對資料塊進行讀寫時,可以有效地減少建立網絡連接配接需要的成本。

本文轉自大資料躺過的坑部落格園部落格,原文連結:http://www.cnblogs.com/zlslch/p/5081487.html,如需轉載請自行聯系原作者

繼續閱讀