初識Hadoop之HDFS
原文地址:ofollow,noindex">https://itweknow.cn/detail?id=54 ,歡迎大家訪問。
練習本文中提到的命令列介面的前提條件是至少在一臺linux機器或者虛擬機器上安裝了單機版的Hadoop,當然瞭如果你有一個叢集的話更好了。如果你還不知道如何在Linux上安裝Hadoop的話,請戳這裡。
概念
DFS是分散式檔案系統(distributed filesystem)的簡稱,而HDFS即Hadoop Distributed Filesystem,是Hadoop自帶的分散式檔案系統。
HDFS的一些特性
-
儲存超大檔案
由於HDFS是分散式的檔案系統,所以不受單臺機器的儲存大小的限制,可以儲存超大檔案,目前已經達到了PB級了。 - 流式訪問資料
-
商用硬體
Hadoop可以執行在廉價的商用硬體,這樣帶來的問題就是節點的故障率會比較高。所以HDFS被設計成能夠無縫式的處理上述故障並且繼續執行,不讓使用者察覺到明顯的中斷。 -
不適合低時間延遲的資料訪問
由於Hadoop的流式資料訪問,訪問資料的會有寫延遲,所以不太適合低時間延遲的資料訪問,一般情況下這種需求我們會使用關係型資料庫來實現。 -
不適合大量小檔案
不適合的原因是namenode將檔案系統的元資料儲存在記憶體中,每儲存一個檔案都需要在namenode中儲存該檔案的目錄、儲存的datanode等資料。所以如果檔案的數量達到數十億的話namenode的記憶體很可能不夠用了。 -
不支援多使用者寫入,任意修改檔案
HDFS只支援單個寫入者,而且支援在檔案的末尾新增內容,不能任意的修改檔案。
與HDFS相關的一些名詞
-
NameNode
管理節點,管理系統的名稱空間,維護著整個檔案系統的結構和目錄資訊,通常情況下一個Hadoop叢集只會有一個工作的NameNode。 -
DataNode
工作節點,檔案系統的工作節點,主要是根據需要進行儲存或者檢索資料塊,並且定期向NameNode報告它們所儲存的資料塊列表。 -
資料塊
同我們常使用的磁碟上的檔案系統一樣,HDFS也有資料塊的概念,預設的大小為128M。 -
塊快取
一般情況下,我們通過HDFS從DataNode中檢索資料時,DataNode都是從磁碟中讀取,但是對於訪問很頻繁的檔案,它所對於的資料塊可能會被快取到DataNode的記憶體中,以加快讀取速度,這就是所謂的塊快取。 -
聯邦HDFS
其實這個就是為了解決Hadoop不適合儲存數量龐大的檔案的問題,同時由多個NameNode來維護整個檔案系統的系統樹以及檔案和目錄,每個NameNode負責管理檔案系統名稱空間中的一部分。 -
高可用性
主-備模式,當主NameNode失效後,備用NameNode會很快生效,並接管工作。
命令列介面
命令列介面是HDFS所有型別的介面中最簡單的,也是每個開發者都必須要掌握的。
- 建立目錄
hadoop fs -mkdir /test
- 檢視目錄
hadoop fs -ls /
- 上傳檔案
hadoop fs -put test.txt /test
緊跟-put後面的test.txt是要推送到HDFS中的檔案,/test是指定要推送到HDFS上哪個目錄下面。
- 刪除檔案
hadoop fs -rm /test/test.txt
其實通過上面例舉的幾個命令我們可以看出HDFS的檔案操作命令幾乎和Linux上的命令一致,這樣我們使用起來會很容易上手。在下篇文章中,我們將介紹一下HDFS的Java API。