HDFS使用

1  HDFS概述
HDFS是Hadoop應用用到的一個最主要的分佈式存儲系統。一個HDFS集羣主要由一個NameNode和不少個Datanode組成:Namenode管理文件系統的元數據,而Datanode存儲 了實際的數據。本文檔主要關注用戶以及管理員怎樣和HDFS進行交互。基本上,客戶端聯繫Namenode以獲取文件的元數據或修飾屬性,而真正的文件I/O操做是直接和Datanode進行交互的。本文檔從介紹如何安裝和搭建HDFS集羣入手,接着經常使用的文件系統命令,以及維護過程當中涉及到的控制命令。
2          HDFS集羣部署
2.1        安裝
1)       用戶從hadoop官 方網站下載所需版本的安裝文件,下載地址爲:http://hadoop.apache.org/core/releases.html#Download; 本文檔選取的版本爲hadoop-0.19.1;
2)       將下載的壓縮文件解壓,目錄爲./hadoop-0.19.1,按照附錄《hdfs 測試組網方案》中系統參數配置部分,修改./hadoop-0.19.1/conf中的文件;
3)       檢查全部服務器上是否安裝了J2sdk,要求版本爲1.5及以 上;並創建安裝目錄到/usr/local/j2sdk的軟 連接;
4)       將hadoop目 錄上傳到全部的服務器,放置在${HADOOP_HOME}目錄 下;
5)       掛載namenode和secondary namenode的fsimage,editslogs備份 目錄;
2.2        啓動
1)       進入namenode的${HADOOP_HOME};
2)       格式化namenode文 件系統,執行命令:bin/hadoop namenode –format;
3)       啓動hdfs, 執行命令:bin/start-dfs.sh。該 腳本首先啓動namenode,然 後讀取./conf/slaves中的datanode列表,逐個啓動;最後讀取./conf/masters中secondary namenode地址,啓動secondary namenode。
啓動datanode和secondary namenode時, 腳本經過ssh從當前機器登陸到其餘節點的,涉及到身份驗 證,須要輸入相應的密碼信息,比較繁瑣。可參考ssh中免 密碼登陸解決方法。
3          FS Shell使用指南
調用文件系統(FS)Shell命令 應使用 bin/hadoop fs <args>的形 式。 全部 的的FS shell命令 使用URI路徑 做爲參數。URI格式 是scheme://authority/path。對HDFS文件系統,scheme是hdfs, 對本地文件系統,scheme是file。 其中scheme和authority參數 都是可選的,若是未加指定,就會使用配置中指定的默認scheme。 一個HDFS文件 或目錄好比/parent/child能夠表示成hdfs://namenode:namenodeport/parent/child, 或者更簡單的/parent/child(假 設你配置文件中的默認值是namenode:namenodeport)。 大多數FS Shell命令 的行爲和對應的Unix Shell命 令相似,不一樣之處會在下面介紹各命令使用詳情時指出。出錯信息會輸出到stderr,其餘信息輸出到stdout。

3.1        cat
使用方法:hadoop fs -cat URI [URI …]
將路 徑指定文件的內容輸出到stdout。
示 例:
         hadoop fs -cat hdfs://host1ort1/file1 hdfs://host2ort2/file2
         hadoop fs -cat file:///file3 /user/hadoop/file4
返回 值:
成 功返回0, 失敗返回-1。
3.2        chgrp
使用方法:hadoop fs -chgrp [-R] GROUP URI [URI …] Change group association of files. With -R, make the change recursively through the directory structure. The user must be the owner of files, or else a super-user. Additional information is in the Permissions User Guide.改變文件所屬的組。使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的全部者或者超級用戶。更多的信息請參見HDFS權限用戶指南。
3.3        chmod
使用方法:hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI …]
改變 文件的權限。使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的全部者或者超 級用戶。更多的信息請參見HDFS權 限用戶指南。
3.4        chown
使用方法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改變 文件的擁有者。使用-R將使改變在目錄結構下遞歸進行。命令的使用 者必須是超級用戶。更多的信息請參見HDFS權限用戶指南。
3.5        copyFromLocal
使用方法:hadoop fs -copyFromLocal <localsrc> URI
除了限定源路徑是一個本地文件外, 和put命令類似。
3.6        copyToLocal
使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
除了 限定目標路徑是一個本地文件外,和get命令相似。
3.7        cp
使用方法:hadoop fs -cp URI [URI …] <dest>
將文 件從源路徑複製到目標路徑。這個命令容許有多個源路徑,此時目標路徑必須是一個目錄。
示 例:
         hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
         hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
返回 值:
成功返回0, 失敗返回-1。
3.8        du
使用方法:hadoop fs -du URI [URI …]
顯示 目錄中全部文件的大小,或者當只指定一個文件時,顯示此文件的大小。示例:
hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://hostort/user/hadoop/dir1 
返回 值:
成功返回0, 失敗返回-1。 
3.9        dus
使用方法:hadoop fs -dus <args>
顯示 文件的大小。
3.10    expunge
使用方法:hadoop fs -expunge
清空 回收站。請參考HDFS設計文 檔以獲取更多關於回收站特性的信息。
3.11    get
使用方法:hadoop fs -get [-ignorecrc] [-crc] <src> <localdst> 
複製 文件到本地文件系統。可用-ignorecrc選項複製CRC校驗失敗的文件。使用-crc選項複製文件以及CRC信息。
示 例:
         hadoop fs -get /user/hadoop/file localfile
         hadoop fs -get hdfs://hostort/user/hadoop/file localfile
返回 值:
成功返回0, 失敗返回-1。
3.12    getmerge
使用方法:hadoop fs -getmerge <src> <localdst> [addnl]
接受 一個源目錄和一個目標文件做爲輸入,而且將源目錄中全部的文件鏈接成本地目標文件。addnl是 可選的,用於指定在每一個文件結尾添加一個換行符。
3.13    ls
使用方法:hadoop fs -ls <args>
若是 是文件,則按照以下格式返回文件信息:
文件名 <副 本數> 文 件大小 修改日期 修 改時間 權限 用 戶ID 組ID 
若是 是目錄,則返回它直接子文件的一個列表,就像在Unix中一 樣。目錄返回列表的信息以下:
目錄名 <dir> 修改日期 修 改時間 權限 用 戶ID 組ID 
示 例:
hadoop fs -ls /user/hadoop/file1 /user/hadoop/file2 hdfs://hostort/user/hadoop/dir1 /nonexistentfile 
返回 值:
成功返回0, 失敗返回-1。 
3.14    lsr
使用方法:hadoop fs -lsr <args> 
ls命令的遞歸版本。相似於Unix中的ls -R。
3.15    mkdir
使用方法:hadoop fs -mkdir <paths> 
接受 路徑指定的uri做爲參數,建立這些目錄。其行爲相似於Unix的mkdir -p,它 會建立路徑中的各級父目錄。
示 例:
         hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
         hadoop fs -mkdir hdfs://host1ort1/user/hadoop/dir hdfs://host2ort2/user/hadoop/dir
返回 值:
成功返回0, 失敗返回-1。
3.16    movefromLocal
使用方法:dfs -moveFromLocal <src> <dst>
輸出 一個」not implemented「信 息。
3.17    mv
使用方法:hadoop fs -mv URI [URI …] <dest>
將文 件從源路徑移動到目標路徑。這個命令容許有多個源路徑,此時目標路徑必須是一個目錄。不容許在不一樣的文件系統間移動文件。不支持文件夾重命令。
示 例:
         hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
         hadoop fs -mv hdfs://hostort/file1 hdfs://hostort/file2 hdfs://hostort/file3 hdfs://host:port/dir1
返回 值:
成功返回0, 失敗返回-1。
3.18    put
使用方法:hadoop fs -put <localsrc> ... <dst>
從本 地文件系統中複製單個或多個源路徑到目標文件系統。也支持從標準輸入中讀取輸入寫入目標文件系統。
         hadoop fs -put localfile /user/hadoop/hadoopfile
         hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
         hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile
         hadoop fs -put - hdfs://host:port/hadoop/hadoopfile 
從 標準輸入中讀取輸入。
返回 值:
成功返回0, 失敗返回-1。
3.19    rm
使用方法:hadoop fs -rm URI [URI …]
刪除 指定的文件。只刪除非空目錄和文件。請參考rmr命令 瞭解遞歸刪除。
示 例:
         hadoop fs -rm hdfs://host:port/file /user/hadoop/emptydir
返回 值:
成功返回0, 失敗返回-1。
3.20    rmr
使用方法:hadoop fs -rmr URI [URI …]
delete的遞歸版本。
示 例:
         hadoop fs -rmr /user/hadoop/dir
         hadoop fs -rmr hdfs://host:port/user/hadoop/dir
返回 值:
成功返回0, 失敗返回-1。
3.21    setrep
使用方法:hadoop fs -setrep [-R] <path>
改變 一個文件的副本系數。-R選項用於遞歸改變目錄下全部文件的副本系數。
示 例:
         hadoop fs -setrep -w 3 -R /user/hadoop/dir1
返回 值:
成功返回0, 失敗返回-1。
3.22    stat
使用方法:hadoop fs -stat URI [URI …]
返回 指定路徑的統計信息。
示 例:
         hadoop fs -stat path
返回 值:
成功返回0, 失敗返回-1。
3.23    tail
使用方法:hadoop fs -tail [-f] URI
將文 件尾部1K字節的內容輸出到stdout。支持-f選 項,行爲和Unix中一致。
示 例:
         hadoop fs -tail pathname
返回 值:
成 功返回0, 失敗返回-1。
3.24    test
使用方法:hadoop fs -test -[ezd] URI
選 項:
-e 檢查文件是否存在。若是存在則返回0。
-z 檢查文件是不是0字 節。若是是則返回0。
-d 若是路徑是個目錄,則返回1,不然返回0。
示 例:
         hadoop fs -test -e filename
3.25    text
使用方法:hadoop fs -text <src> 
將源 文件輸出爲文本格式。容許的格式是zip和TextRecordInputStream。
3.26    touchz
使用方法:hadoop fs -touchz URI [URI …] 
建立 一個0字節的空文件。
示 例:
         hadoop -touchz pathname
返回 值:
成 功返回0, 失敗返回-1。


4         命 令手冊
4.1        概述
全部 的hadoop命令均由bin/hadoop腳本引起。不指定參數運行hadoop腳本會打印全部命令的描述。
用法:hadoop [--config confdir] [COMMAND] [GENERIC_OPTIONS] [COMMAND_OPTIONS]
Hadoop有一個選項解析框架用於解析通常的選項和運行類。
命令選項        描述
--config confdir        覆蓋缺省配置目錄。缺省是${HADOOP_HOME}/conf。
GENERIC_OPTIONS        多個命令都支持的通用選項。
COMMAND 
命令選項S        各類各樣的命令和它們的選項會在下面提到。這些命令被分爲 用戶命令 管理命令兩組。

4.1.1   常規選項
下面 的選項被 dfsadmin, fs, fsck和 job支 持。 應用程序要實現 Tool來支 持 常規選項。
GENERIC_OPTION        描述
-conf <configuration file>        指定應用程序的配置文件。
-D <property=value>        爲指定property指定值value。
-fs <local|namenode:port>        指定namenode。
-jt <local|jobtracker:port>        指定job tracker。只適用於job。

-files <逗號分隔的文件列表>        指定要拷貝到map reduce集羣的文件的逗號分隔的列表。 只適用於job。

-libjars <逗號分隔的jar列表>        指定要包含到classpath中的jar文件的逗號分隔的列表。 只適用於job。

-archives <逗號分隔的archive列表>        指定要被解壓到計算節點上的檔案文件的逗號分割的列表。 只適用於job。


4.2        用戶命令
hadoop集羣用戶的經常使用命令。
4.2.1   archive
創 建一個hadoop檔案文件。參考 Hadoop Archives.
用法:hadoop archive -archiveName NAME <src>* <dest>
命令選項        描述
-archiveName NAME        要建立的檔案的名字。
src        文件系統的路徑名,和一般含正則表達的同樣。
dest        保存檔案文件的目標目錄。
4.2.2   distcp
遞歸地拷貝文件或目錄。參考DistCp指南以獲取等多信息。
用法:hadoop distcp <srcurl> <desturl>
命令選項        描述
srcurl        源Url
desturl        目標Url
4.2.3   fs
用法:hadoop fs [GENERIC_OPTIONS] [COMMAND_OPTIONS]
運行一個常規的文件系統客戶 端。
各類命令選項能夠參考HDFS Shell指南。
4.2.4   fsck
運行HDFS文件系統檢查工具。參考Fsck瞭解更多。
用法:hadoop fsck [GENERIC_OPTIONS] <path> [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]
命令選項        描述
<path>        檢查的起始目錄。
-move        移動受損文件到/lost+found
-delete        刪除受損文件。
-openforwrite        打印出寫打開的文件。
-files        打印出正被檢查的文件。
-blocks        打印出塊信息報告。
-locations        打印出每一個塊的位置信息。
-racks        打印出data-node的網絡拓撲結構。
4.2.5   jar
運行jar文件。用戶能夠把他們的Map Reduce代碼捆綁到jar文件中,使用這個命令執行。
用法:hadoop jar <jar> [mainClass] args...
streaming做業是經過這個命令執行的。參考Streaming examples中的例子。
Word count例子也是經過jar命令運行的。參考Wordcount example。
4.2.6   job
用於和Map Reduce做業交互和命令。
用法:hadoop job [GENERIC_OPTIONS] [-submit <job-file>] | [-status <job-id>] | [-counter <job-id> <group-name> <counter-name>] | [-kill <job-id>] | [-events <job-id> <from-event-#> <#-of-events>] | [-history [all] <jobOutputDir>] | [-list [all]] | [-kill-task <task-id>] | [-fail-task <task-id>]
命令選項        描述
-submit <job-file>        提交做業
-status <job-id>        打印map和reduce完成百分比和全部計數器。
-counter <job-id> <group-name> <counter-name>        打印計數器的值。
-kill <job-id>        殺死指定做業。
-events <job-id> <from-event-#> <#-of-events>        打印給定範圍內jobtracker接收到的事件細節。
-history [all] <jobOutputDir>        -history <jobOutputDir> 打印做業的細節、失敗及被殺死緣由的細節。更多的關於一個做業的細 節好比成功的任務,作過的任務嘗試等信息能夠經過指定[all]選項查看。
-list [all]        -list all顯示全部做業。-list只顯示將要完成的做業。
-kill-task <task-id>        殺死任務。被殺死的任務不會不利於失敗嘗試。
-fail-task <task-id>        使任務失敗。被失敗的任務會對失敗嘗試不利。
4.2.7   pipes
運行pipes做業。
用法:hadoop pipes [-conf <path>] [-jobconf <key=value>, <key=value>, ...] [-input <path>] [-output <path>] [-jar <jar file>] [-inputformat <class>] [-map <class>] [-partitioner <class>] [-reduce <class>] [-writer <class>] [-program <executable>] [-reduces <num>]
命令選項        描述
-conf <path>        做業的配置
-jobconf <key=value>, <key=value>, ...        增長/覆 蓋做業的配置項
-input <path>        輸入目錄
-output <path>        輸出目錄
-jar <jar file>        Jar文件名
-inputformat <class>        InputFormat類
-map <class>        Java Map類
-partitioner <class>        Java Partitioner
-reduce <class>        Java Reduce類
-writer <class>        Java RecordWriter
-program <executable>        可執行程序的URI
-reduces <num>        reduce個數
4.2.8   version
打印版本信息。
用法:hadoop version
4.2.9   CLASSNAME
hadoop腳本可 用於調調用任何類。
用法:hadoop CLASSNAME
運行名字爲CLASSNAME的類。

4.3        管理命令
hadoop集羣管 理員經常使用的命令。
4.3.1   balancer
運行集羣平衡工具。管理員能夠 簡單的按Ctrl-C來中止平衡過程。參考Rebalancer瞭解更多。
用法:hadoop balancer [-threshold <threshold>]
命令選項        描述
-threshold <threshold>        磁盤容量的百分比。這會覆蓋缺省的閥值。
4.3.2   daemonlog
獲 取或設置每一個守護進程的日誌級別。
用 法:hadoop daemonlog -getlevel <host:port> <name> 
用 法:hadoop daemonlog -setlevel <host:port> <name> <level>
命令選項        描述
-getlevel <host:port> <name>        打印運行在<host:port>的守護進程的日誌級別。這個命令內部會鏈接http://<host:port>/logLevel?log=<name>
-setlevel <host:port> <name> <level>        設置運行在<host:port>的守護進程的日誌級別。這個命令內部會鏈接http://<host:port>/logLevel?log=<name>
4.3.3   datanode
運 行一個HDFS的datanode。
用法:hadoop datanode [-rollback]
命令選項        描述
-rollback        將datanode回滾到前一個版本。這須要在中止datanode,分發老的hadoop版本以後使用。
4.3.4   dfsadmin
運 行一個HDFS的dfsadmin客戶端。
用法:hadoop dfsadmin [GENERIC_OPTIONS] [-report] [-safemode enter | leave | get | wait] [-refreshNodes] [-finalizeUpgrade] [-upgradeProgress status | details | force] [-metasave filename] [-setQuota <quota> <dirname>...<dirname>] [-clrQuota <dirname>...<dirname>] [-help [cmd]]
命令選項        描述
-report        報告文件系統的基本信息和統計信息。
-safemode enter | leave | get | wait        安全模式維護命令。安全模式是Namenode的一個狀態,這種狀態下,Namenode 
1. 不接受對名字空間的更改(只讀)
2. 不復制或刪除塊
Namenode會在啓動時自動進入安全模式,當配置的塊最小百分比數知足最小的副本數條件時,會自動離開安全模式。安全模式能夠手 動進入,可是這樣的話也必須手動關閉安全模式。
-refreshNodes        從新讀取hosts和exclude文件,更新容許連到Namenode的或那些須要退出或入編的Datanode的集合。
-finalizeUpgrade        終結HDFS的升級操做。Datanode刪除前一個版本的工做目錄,以後Namenode也這樣作。這個操做完結整個升級過程。
-upgradeProgress status | details | force        請求當前系統的升級狀態,狀態的細節,或者強制升級操做進行。
-metasave filename        保存Namenode的主要數據結構到hadoop.log.dir屬性指定的目錄下的<filename>文件。對於下面的每一項,<filename>中都會一行內容與之對應
1. Namenode收到的Datanode的心跳信號
2. 等待被複制的塊
3. 正在被複制的塊
4. 等待被刪除的塊
-setQuota <quota> <dirname>...<dirname>        爲每一個目錄 <dirname>設定配額<quota>。目錄配額是一個長整型整數,強制限定了目錄樹下的名字個數。
命令會在這個目錄上工做良好,如下狀況會報錯:
1. N不是一個正整數,或者
2. 用戶不是管理員,或者
3. 這個目錄不存在或是文件,或者
4. 目錄會立刻超出新設定的配額。
-clrQuota <dirname>...<dirname>        爲每個目錄<dirname>清除配額設定。
命令會在這個目錄上工做良好,如下狀況會報錯:
1. 這個目錄不存在或是文件,或者
2. 用戶不是管理員。
若是目錄原來沒有配額不會報錯。
-help [cmd]        顯示給定命令的幫助信息,若是沒有給定命令,則顯示全部命令的幫 助信息。
4.3.5   jobtracker
運 行MapReduce job Tracker節點。
用法:hadoop jobtracker
4.3.6   namenode
運 行namenode。有關升級,回滾,升級終結的更多信息請參考升級和回滾。
用法:hadoop namenode [-format] | [-upgrade] | [-rollback] | [-finalize] | [-importCheckpoint]
命令選項        描述
-format        格式化namenode。它啓動namenode,格式化namenode,以後關閉namenode。
-upgrade        分發新版本的hadoop後,namenode應以upgrade選項啓動。
-rollback        將namenode回滾到前一版本。這個選項要在中止集羣,分發老的hadoop版 本後使用。
-finalize        finalize會刪除文件系統的前一狀態。最近的 升級會被持久化,rollback選項將再不可用,升級終結操做以後,它會停掉namenode。
-importCheckpoint        從檢查點目錄裝載鏡像並保存到當前 檢查點目錄,檢查點目錄由fs.checkpoint.dir指定。
4.3.7   secondarynamenode
運 行HDFS的secondary namenode。 參考Secondary Namenode了 解更多。
用法:hadoop secondarynamenode [-checkpoint [force]] | [-geteditsize]
命令選項        描述
-checkpoint [force]        若是EditLog的大小 >= fs.checkpoint.size,啓動Secondary namenode的 檢查點過程。 若是使用了-force,將不考慮EditLog的 大小。
-geteditsize        打印EditLog大小。
4.3.8   tasktracker
運行MapReduce的task Tracker節點。
用法:hadoop tasktrackerhtml

相關文章
相關標籤/搜索