要把大檔案儲存在 hdfs上,hdfs 會把大檔案分割成小塊,即我們通常說的資料塊( block ),它是 hadoop 分布式檔案系統最小的儲存單元,而且我們沒辦法決定指定塊的儲存節點位址,這些 namenode 會替我們決定。資料塊預設大小是 128mb,比作業系統裡面的塊概念要大很多(作業系統塊大小是 4kb ),我們可以根據實際需求修改 hdfs 塊大小。檔案的所有資料塊大小都是一樣的,除了最後乙個,它可能小於塊大小或者剛好等於塊大小。檔案會被分割成若干個 128mb 的小資料塊,再寫入hdfs的。
假如需要把乙個 518mb 的文字檔案 example.txt 儲存到 hdfs,在塊大小預設情況下,hdfs 將會建立 5 個資料塊,前面4個資料塊大小將是 128mb,最後乙個是 6mb,而不是 128mb。這樣會節省不少儲存空間。
hdfs 儲存的資料集一般比較大,資料量級一般是 tb 級別或者 pb 級別的。如果像 linux 系統那樣每個塊只有 4kb。那麼 hdfs 將會儲存非常多的資料塊,這將導致元資料暴增,namenode 管理維護這些元資料將非常吃力。且很快會成為集群效能的瓶頸。另一方面,資料塊的大小不能太大,不然檔案系統處理資料延遲會更加嚴重。
以下是 hdfs 資料塊的優勢:
由於資料塊的固定的,磁碟能夠儲存多少資料塊很容易就可以計算出來。
hdfs 可以儲存比單個磁碟容量還大的資料檔案,因為檔案會被劃分成多個 hdfs 資料塊,並儲存在集群的多個datanode 磁碟上。
資料塊很容易在 datanode 之間複製,以便達到資料的容錯性和高可用性。
hdfs 資料塊的概念簡化了 datanode 的資料儲存方式。所有塊的元資料都是在 namenode 維護的。datanode 不需要關心塊的元資料,比如檔案許可權,儲存位置等。
大資料與Hadoop系列之HDFS命令講解
hdfs命令基本格式 hadoop fs cmd args hadoop fs ls 列出hdfs檔案系統根目錄下的目錄和檔案 hadoop fs ls r 列出hdfs檔案系統所有的目錄和檔案 hadoop fs put local file hdfs file hdfs file的父目錄一定要存...
Hadoop系列一HDFS簡介
namenode nn namenode的metadata資訊在啟動後會載入到記憶體中,metadata資訊儲存在磁碟檔案fsimage,edits檔案記錄對metadata的操作日誌,block位置資訊只存在記憶體,不儲存到fsimage。secondarynamenode snn 不是nn的備份...
hadoop系列三 HDFS操作
0 檢視hdfs中的目錄資訊 hadoop fs ls hdfs路徑 1 上傳檔案到hdfs中 hadoop fs put 本地檔案 aaa hadoop fs copyfromlocal 本地檔案 hdfs路徑 copyfromlocal等價於 put hadoop fs movefromloca...