HDFS入門

1. HDFS基本概念1.1. HDFS介紹
HDFS是Hadoop Distribute File System 的簡稱,意爲:Hadoop分佈式文件系統。是Hadoop核心組件之一,作爲最底層的分佈式存儲服務而存在。
分佈式文件系統解決的問題就是大數據存儲。它們是橫跨在多臺計算機上的存儲系統。分佈式文件系統在大數據時代有着廣泛的應用前景,它們爲存儲和處理超大規模數據提供所需的擴展能力。
1.2. HDFS設計目標
1) 硬件故障是常態, HDFS將有成百上千的服務器組成,每一個組成部分都有可能出現故障。因此故障的檢測和自動快速恢復是HDFS的核心架構目標。
2) HDFS上的應用與一般的應用不同,它們主要是以流式讀取數據。HDFS被設計成適合批量處理,而不是用戶交互式的。相較於數據訪問的反應時間,更注重數據訪問的高吞吐量。
3) 典型的HDFS文件大小是GB到TB的級別。所以,HDFS被調整成支持大文件。它應該提供很高的聚合數據帶寬,一個集羣中支持數百個節點,一個集羣中還應該支持千萬級別的文件。
4) 大部分HDFS應用對文件要求的是write-one-read-many訪問模型。一個文件一旦創建、寫入、關閉之後就不需要修改了。這一假設簡化了數據一致性問題,使高吞吐量的數據訪問成爲可能。
5) 移動計算的代價比之移動數據的代價低。一個應用請求的計算,離它操作的數據越近就越高效,這在數據達到海量級別的時候更是如此。將計算移動到數據附近,比之將數據移動到應用所在顯然更好。
6) 在異構的硬件和軟件平臺上的可移植性。這將推動需要大數據集的應用更廣泛地採用HDFS作爲平臺。
2. HDFS重要特性
首先,它是一個文件系統,用於存儲文件,通過統一的命名空間目錄樹來定位文件;
其次,它是分佈式的,由很多服務器聯合起來實現其功能,集羣中的服務器有各自的角色。
2.1. master/slave架構
HDFS採用master/slave架構。一般一個HDFS集羣是有一個Namenode和一定數目的Datanode組成。Namenode是HDFS集羣主節點,Datanode是HDFS集羣從節點,兩種角色各司其職,共同協調完成分佈式的文件存儲服務。
2.2. 分塊存儲
HDFS中的文件在物理上是分塊存儲(block)的,塊的大小可以通過配置參數來規定,默認大小在hadoop2.x版本中是128M。
2.3. 名字空間(NameSpace)
HDFS支持傳統的層次型文件組織結構。用戶或者應用程序可以創建目錄,然後將文件保存在這些目錄裏。文件系統名字空間的層次結構和大多數現有的文件系統類似:用戶可以創建、刪除、移動或重命名文件。
Namenode負責維護文件系統的名字空間,任何對文件系統名字空間或屬性的修改都將被Namenode記錄下來。
HDFS會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
2.4. Namenode元數據管理
我們把目錄結構及文件分塊位置信息叫做元數據。Namenode負責維護整個hdfs文件系統的目錄樹結構,以及每一個文件所對應的block塊信息(block的id,及所在的datanode服務器)。
2.5. Datanode數據存儲
文件的各個block的具體存儲管理由datanode節點承擔。每一個block都可以在多個datanode上。Datanode需要定時向Namenode彙報自己持有的block信息。
存儲多個副本(副本數量也可以通過參數設置dfs.replication,默認是3)。
2.6. 副本機制
爲了容錯,文件的所有block都會有副本。每個文件的block大小和副本系數都是可配置的。應用程序可以指定某個文件的副本數目。副本系數可以在文件創建的時候指定,也可以在之後改變。
2.7. 一次寫入,多次讀出
HDFS是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改。
正因爲如此,HDFS適合用來做大數據分析的底層存儲服務,並不適合用來做.網盤等應用,因爲,修改不方便,延遲大,網絡開銷大,成本太高。

3. HDFS基本操作3.1. Shell 命令行客戶端
Hadoop提供了文件系統的shell命令行客戶端,使用方法如下:
hadoop fs <args>
文件系統shell包括與Hadoop分佈式文件系統(HDFS)以及Hadoop支持的其他文件系統(如本地FS,HFTP FS,S3 FS等)直接交互的各種類似shell的命令。所有FS shell命令都將路徑URI作爲參數。
URI格式爲scheme://authority/path。對於HDFS,該scheme是hdfs,對於本地FS,該scheme是file。scheme和authority是可選的。如果未指定,則使用配置中指定的默認方案。
對於HDFS,命令示例如下:
hadoop fs -ls hdfs://namenode:host/parent/child
hadoop fs -ls /parent/child fs.defaultFS中有配置
對於本地文件系統,命令示例如下:
hadoop fs -ls file:///root/
如果使用的文件系統是HDFS,則使用hdfs dfs也是可以的,此時
hadoop fs <args> = hdfs dfs <args>

3.2. Shell 命令選項
HDFS入門
HDFS入門

3.3. Shell常用命令介紹
-ls
使用方法:hadoop fs -ls [-h] [-R] <args>
功能:顯示文件、目錄信息。
示例:hadoop fs -ls /user/hadoop/file1
-mkdir
使用方法:hadoop fs -mkdir [-p] <paths>
功能:在hdfs上創建目錄,-p表示會創建路徑中的各級父目錄。
示例:hadoop fs -mkdir –p /user/hadoop/dir1
-put
使用方法:hadoop fs -put [-f] [-p] [ -|<localsrc1> .. ]. <dst>
功能:將單個src或多個srcs從本地文件系統複製到目標文件系統。
-p:保留訪問和修改時間,所有權和權限。
-f:覆蓋目的地(如果已經存在)
示例:hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
-get
使用方法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
-ignorecrc:跳過對下載文件的CRC檢查。
-crc:爲下載的文件寫CRC校驗和。
功能:將文件複製到本地文件系統。
示例:hadoop fs -get hdfs://host:port/user/hadoop/file localfile
-appendToFile
使用方法:hadoop fs -appendToFile <localsrc> ... <dst>
功能:追加一個文件到已經存在的文件末尾
示例:hadoop fs -appendToFile localfile /hadoop/hadoopfile

-cat
使用方法:hadoop fs -cat [-ignoreCrc] URI [URI ...]
功能:顯示文件內容到stdout
示例:hadoop fs -cat /hadoop/hadoopfile
-tail
使用方法:hadoop fs -tail [-f] URI
功能:將文件的最後一千字節內容顯示到stdout。
-f選項將在文件增長時輸出附加數據。
示例:hadoop fs -tail /hadoop/hadoopfile
-chgrp
使用方法:hadoop fs -chgrp [-R] GROUP URI [URI ...]
功能:更改文件組的關聯。用戶必須是文件的所有者,否則是超級用戶。
-R將使改變在目錄結構下遞歸進行。
示例:hadoop fs -chgrp othergroup /hadoop/hadoopfile
-chmod
功能:改變文件的權限。使用-R將使改變在目錄結構下遞歸進行。
示例:hadoop fs -chmod 666 /hadoop/hadoopfile
-chown
功能:改變文件的擁有者。使用-R將使改變在目錄結構下遞歸進行。
示例:hadoop fs -chown someuser:somegrp /hadoop/hadoopfile
-copyFromLocal
使用方法:hadoop fs -copyFromLocal <localsrc> URI
功能:從本地文件系統中拷貝文件到hdfs路徑去
示例:hadoop fs -copyFromLocal /root/1.txt /
-copyToLocal
功能:從hdfs拷貝到本地
示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz
-cp
功能:從hdfs的一個路徑拷貝hdfs的另一個路徑
示例: hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
-mv
功能:在hdfs目錄中移動文件
示例: hadoop fs -mv /aaa/jdk.tar.gz /
-getmerge
功能:合併下載多個文件
示例:比如hdfs的目錄 /aaa/下有多個文件:log.1, log.2,log.3,...
hadoop fs -getmerge /aaa/log.* ./log.sum
-rm
功能:刪除指定的文件。只刪除非空目錄和文件。-r 遞歸刪除。
示例:hadoop fs -rm -r /aaa/bbb/
-df
功能:統計文件系統的可用空間信息
示例:hadoop fs -df -h /
-du
功能:顯示目錄中所有文件大小,當只指定一個文件時,顯示此文件的大小。
示例:hadoop fs -du /user/hadoop/dir1
-setrep
功能:改變一個文件的副本系數。-R選項用於遞歸改變目錄下所有文件的副本系數。
示例:hadoop fs -setrep -w 3 -R /user/hadoop/dir1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章