1. 程式人生 > >Hadoop2常用Shell命令

Hadoop2常用Shell命令

1.       FS Shell

1.1     簡介

呼叫檔案系統(FS)Shell命令應使用 bin/hadoop fs <args>的形式。 所有的的FSshell命令使用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。

1.2     常用命令使用

1)   cat

使用方法:hadoop fs -cat URI [URI …]

將路徑指定檔案的內容輸出到stdout。

示例:

hadoop fs -cat hdfs://host1:port1/file1hdfs://host2:port2/file2

hadoop fs -cat file:///file3/user/hadoop/file4

返回值:

成功返回0,失敗返回-1。

2)   chgrp

使用方法:hadoop fs -chgrp [-R]

改變檔案所屬的組。使用-R將使改變在目錄結構下遞迴進行。命令的使用者必須是檔案的所有者或者超級使用者。更多的資訊請參見HDFS許可權使用者指南。

3)   chmod

使用方法:hadoop fs -chmod [-R]<MODE[,MODE]... | OCTALMODE> URI [URI …]

改變檔案的許可權。使用-R將使改變在目錄結構下遞迴進行。命令的使用者必須是檔案的所有者或者超級使用者。更多的資訊請參見HDFS許可權使用者指南。

4)   chown

使用方法:hadoop fs -chown [-R][OWNER][:[GROUP]] URI [URI ]

改變檔案的擁有者。使用-R將使改變在目錄結構下遞迴進行。命令的使用者必須是超級使用者。更多的資訊請參見HDFS許可權使用者指南。

5)   copyFromLocal

使用方法:hadoop fs-copyFromLocal <localsrc> URI

除了限定源路徑是一個本地檔案外,和put命令相似。

6)   copyToLocal

使用方法:hadoop fs -copyToLocal[-ignorecrc] [-crc] URI <localdst>

除了限定目標路徑是一個本地檔案外,和get命令類似。

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。

8)   du

使用方法:hadoop fs -du URI [URI …]

顯示目錄中所有檔案的大小,或者當只指定一個檔案時,顯示此檔案的大小。

示例:

hadoop fs -du /user/hadoop/dir1/user/hadoop/file1 hdfs://host:port/user/hadoop/dir1

返回值:

成功返回0,失敗返回-1。

9)   dus

使用方法:hadoop fs -dus<args>

顯示檔案的大小。

10)  expunge

使用方法:hadoop fs -expunge

清空回收站。請參考HDFS設計文件以獲取更多關於回收站特性的資訊。

11)  get

使用方法:hadoop fs -get[-ignorecrc] [-crc] <src> <localdst>

複製檔案到本地檔案系統。可用-ignorecrc選項複製CRC校驗失敗的檔案。使用-crc選項複製檔案以及CRC資訊。

示例:

hadoop fs -get /user/hadoop/file localfile

hadoop fs -gethdfs://host:port/user/hadoop/file localfile

返回值:

成功返回0,失敗返回-1。

12)  getmerge

使用方法:hadoop fs -getmerge<src> <localdst> [addnl]

接受一個源目錄和一個目標檔案作為輸入,並且將源目錄中所有的檔案連線成本地目標檔案。addnl是可選的,用於指定在每個檔案結尾新增一個換行符。

13)  ls

使用方法:hadoop fs -ls<args>

如果是檔案,則按照如下格式返回檔案資訊:

檔名 <副本數> 檔案大小 修改日期 修改時間 許可權 使用者ID 組ID

如果是目錄,則返回它直接子檔案的一個列表,就像在Unix中一樣。目錄返回列表的資訊如下:

目錄名 <dir> 修改日期修改時間 許可權 使用者ID 組ID

示例:

hadoop fs -ls /user/hadoop/file1/user/hadoop/file2 hdfs://host:port/user/hadoop/dir1 /nonexistentfile

返回值:

成功返回0,失敗返回-1。

14)  lsr

使用方法:hadoop fs -lsr<args>

ls命令的遞迴版本。類似於Unix中的ls -R。

15)  mkdir

使用方法:hadoop fs -mkdir<paths>

接受路徑指定的uri作為引數,建立這些目錄。其行為類似於Unix的mkdir -p,它會建立路徑中的各級父目錄。

示例:

hadoop fs -mkdir /user/hadoop/dir1/user/hadoop/dir2

hadoop fs -mkdirhdfs://host1:port1/user/hadoop/dir hdfs://host2:port2/user/hadoop/dir

返回值:

成功返回0,失敗返回-1。

16)  movefromLocal

使用方法:dfs -moveFromLocal<src> <dst>

輸出一個”not implemented“資訊。

17)  mv

使用方法:hadoop fs -mv URI [URI …] <dest>

將檔案從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。不允許在不同的檔案系統間移動檔案。

示例:

hadoop fs -mv /user/hadoop/file1/user/hadoop/file2

hadoop fs -mv hdfs://host:port/file1hdfs://host:port/file2 hdfs://host:port/file3 hdfs://host:port/dir1

返回值:

成功返回0,失敗返回-1。

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。

19)  rm

使用方法:hadoop fs -rm URI [URI …]

刪除指定的檔案。只刪除非空目錄和檔案。請參考rmr命令瞭解遞迴刪除。

示例:

hadoop fs -rm hdfs://host:port/file/user/hadoop/emptydir

返回值:

成功返回0,失敗返回-1。

20)  rmr

使用方法:hadoop fs -rmr URI [URI …]

delete的遞迴版本。

示例:

hadoop fs -rmr /user/hadoop/dir

hadoop fs -rmrhdfs://host:port/user/hadoop/dir

返回值:

成功返回0,失敗返回-1。

21)  setrep

使用方法:hadoop fs -setrep [-R]<path>

改變一個檔案的副本系數。-R選項用於遞迴改變目錄下所有檔案的副本系數。

示例:

hadoop fs -setrep -w 3 -R/user/hadoop/dir1

返回值:

成功返回0,失敗返回-1。

22)  stat

使用方法:hadoop fs -stat URI[URI …]

返回指定路徑的統計資訊。

示例:

hadoop fs -stat path

返回值:

成功返回0,失敗返回-1。

23)  tail

使用方法:hadoop fs -tail [-f]URI

將檔案尾部1K位元組的內容輸出到stdout。支援-f選項,行為和Unix中一致。

示例:

hadoop fs -tail pathname

返回值:

成功返回0,失敗返回-1。

24)  test

使用方法:hadoop fs -test -[ezd]URI

選項:

-e 檢查檔案是否存在。如果存在則返回0。

-z 檢查檔案是否是0位元組。如果是則返回0。

-d 如果路徑是個目錄,則返回1,否則返回0。

示例:

hadoop fs -test -e filename

25)  text

使用方法:hadoop fs -text<src>

將原始檔輸出為文字格式。允許的格式是zip和TextRecordInputStream。

26)  touchz

使用方法:hadoop fs -touchz URI[URI …]

建立一個0位元組的空檔案。

示例:

hadoop -touchz pathname

返回值:

成功返回0,失敗返回-1

2.       jar

執行jar檔案。使用者可以把他們的Map Reduce程式碼捆綁到jar檔案中,使用這個命令執行。

用法:hadoop jar <jar>[mainClass] args...

例如我們提交wordcount mapreduce的時候:

hadoop jar hadoop-examples.jar wordcountinput output

3.       archive

bin/hadoop archive

建立一個hadoop檔案檔案。參考 Hadoop Archives.

用法:hadoop archive-archiveName NAME <src>* <dest>

-archiveName NAME   要建立的檔案的名字。

src檔案系統的路徑名,和通常含正則表達的一樣。

4.       distcp

bin/hadoop distcp

遞迴地拷貝檔案或目錄。參考DistCp指南以獲取等多資訊。

用法:hadoop distcp<srcurl> <desturl>

srcurl  源Url

desturl目標Url

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>

5.       bin/hdfs shell

dfs                  runa filesystem command on the file systems supported in Hadoop.

namenode -format     formatthe DFS filesystem

secondarynamenode    runthe DFS secondary namenode

namenode             runthe DFS namenode

zkfc                 runthe ZK Failover Controller daemon

datanode             runa DFS datanode

dfsadmin             runa DFS admin client

haadmin              runa DFS HA admin client

fsck                 runa DFS filesystem checking utility

 balancer             runa cluster balancing utility

jmxget            getJMX exported values from NameNode or DataNode.

oiv                  applythe offline fsimage viewer to an fsimage

oev                  applythe offline edits viewer to an edits file

fetchdt              fetcha delegation token from the NameNode

getconf              getconfig values from configuration

groups               getthe groups which users belong to

1)   balancer

執行叢集平衡工具。管理員可以簡單的按Ctrl-C來停止平衡過程。參考Rebalancer瞭解更多。

用法:hadoop balancer[-threshold <threshold>]

-threshold <threshold>  磁碟容量的百分比。這會覆蓋預設的閥值。

2)   datanode

執行一個HDFS的datanode。

用法:hadoop datanode[-rollback]

-rollback   將datanode回滾到前一個版本。這需要在停止datanode,分發老的hadoop版本之後使用。

3)   dfsadmin

bin/hdfs dfsadmin

Usage: java DFSAdmin

Note: Administrative commands can only berun as the HDFS superuser.

           [-report]

           [-safemodeenter | leave | get | wait]

           [-saveNamespace]

           [-restoreFailedStoragetrue|false|check]

           [-refreshNodes]

           [-finalizeUpgrade]

           [-upgradeProgressstatus | details | force]

           [-metasavefilename]

           [-refreshServiceAcl]

           [-refreshUserToGroupsMappings]

           [-refreshSuperUserGroupsConfiguration]

           [-printTopology]

           [-refreshNamenodesdatanodehost:port]

           [-deleteBlockPooldatanode-host:port blockpoolId [force]]

           [-setQuota<quota> <dirname>...<dirname>]

           [-clrQuota<dirname>...<dirname>]

           [-setSpaceQuota<quota> <dirname>...<dirname>]

           [-clrSpaceQuota<dirname>...<dirname>]

           [-setBalancerBandwidth<bandwidth in bytes per second>]

           [-fetchImage<local directory>]

           [-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)   namenode

執行namenode。有關升級,回滾,升級終結的更多資訊請參考升級和回滾。

用法:namenode [-backup] |[-checkpoint] | [-format [-clusterid cid ] [-force] [-nonInteractive] ] |[-upgrade] | [-rollback] | [-finalize] | [-importCheckpoint] |[-initializeSharedEdits] | [-bootstrapStandby] | [-recover [ -force ] ]

-format格式化namenode。它啟動namenode,格式化namenode,之後關閉namenode。

-upgrade    分發新版本的hadoop後,namenode應以upgrade選項啟動。

-rollback   將namenode回滾到前一版本。這個選項要在停止叢集,分發老的hadoop版本後使用。

-finalize   finalize會刪除檔案系統的前一狀態。最近的升級會被持久化,rollback選項將再不可用,升級終結操作之後,它會停掉namenode。

-importCheckpoint   從檢查點目錄裝載映象並儲存到當前檢查點目錄,檢查點目錄由fs.checkpoint.dir指定。