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://host2
ort2/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://host2
ort2/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://host
ort/file2 hdfs://host
ort/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