Hadoop大象之旅009-通過Shell操作hdfs
老帥
調用Hadoop分佈式文件系統(HDFS)Shell命令應使用bin/hadoop fs <args>的形式。
1.查看hdfs都有哪些Shell命令
參照前面章節中所述方法,使用SecureCRTPortable.exe登錄CentOS;
使用命令“hadoopfs”查看hdfs的命令列表,如下圖所示:
hdfs的所有命令的格式,都爲:hadoop fs –xx,具體使用方法,可參考官方文檔:
http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html
全部命令清單如下
cat使用方法:hadoop fs -cat URI [URI …] 將路徑指定文件的內容輸出到stdout。 示例: · hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2 · hadoop fs -cat file:///file3 /user/hadoop/file4 返回值: 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權限用戶指南。 chmod使用方法:hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI …] 改變文件的權限。使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是文件的所有者或者超級用戶。更多的信息請參見HDFS權限用戶指南。 chown使用方法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ] 改變文件的擁有者。使用-R將使改變在目錄結構下遞歸進行。命令的使用者必須是超級用戶。更多的信息請參見HDFS權限用戶指南。 copyFromLocal使用方法:hadoop fs -copyFromLocal <localsrc> URI 除了限定源路徑是一個本地文件外,和put命令相似。 copyToLocal使用方法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst> 除了限定目標路徑是一個本地文件外,和get命令類似。 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。 du使用方法:hadoop fs -du URI [URI …] 顯示目錄中所有文件的大小,或者當只指定一個文件時,顯示此文件的大小。 dus使用方法:hadoop fs -dus <args> 顯示文件的大小。 expunge使用方法:hadoop fs -expunge 清空回收站。請參考HDFS設計文檔以獲取更多關於回收站特性的信息。 get使用方法:hadoop fs -get [-ignorecrc] [-crc] <src> <localdst> 複製文件到本地文件系統。可用-ignorecrc選項複製CRC校驗失敗的文件。使用-crc選項複製文件以及CRC信息。 示例: · hadoop fs -get /user/hadoop/file localfile · hadoop fs -get hdfs://host:port/user/hadoop/file localfile 返回值: 成功返回0,失敗返回-1。 getmerge使用方法:hadoop fs -getmerge <src> <localdst> [addnl] 接受一個源目錄和一個目標文件作爲輸入,並且將源目錄中所有的文件連接成本地目標文件。addnl是可選的,用於指定在每個文件結尾添加一個換行符。 ls使用方法:hadoop fs -ls <args> 如果是文件,則按照如下格式返回文件信息: lsr使用方法:hadoop fs -lsr <args> mkdir使用方法:hadoop fs -mkdir <paths> 接受路徑指定的uri作爲參數,創建這些目錄。其行爲類似於Unix的mkdir -p,它會創建路徑中的各級父目錄。 示例: · hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2 · hadoop fs -mkdir hdfs://host1:port1/user/hadoop/dir hdfs://host2:port2/user/hadoop/dir 返回值: 成功返回0,失敗返回-1。 movefromLocal使用方法:dfs -moveFromLocal <src> <dst> 輸出一個”not implemented“信息。 mv使用方法:hadoop fs -mv URI [URI …] <dest> 將文件從源路徑移動到目標路徑。這個命令允許有多個源路徑,此時目標路徑必須是一個目錄。不允許在不同的文件系統間移動文件。 · hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2 · hadoop fs -mv hdfs://host:port/file1 hdfs://host:port/file2 hdfs://host:port/file3 hdfs://host:port/dir1 返回值: 成功返回0,失敗返回-1。 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。 rm使用方法:hadoop fs -rm URI [URI …] 刪除指定的文件。只刪除非空目錄和文件。請參考rmr命令瞭解遞歸刪除。 · hadoop fs -rm hdfs://host:port/file /user/hadoop/emptydir 返回值: 成功返回0,失敗返回-1。 rmr使用方法:hadoop fs -rmr URI [URI …] delete的遞歸版本。 · hadoop fs -rmr /user/hadoop/dir · hadoop fs -rmr hdfs://host:port/user/hadoop/dir 返回值: 成功返回0,失敗返回-1。 setrep使用方法:hadoop fs -setrep [-R] <path> 改變一個文件的副本系數。-R選項用於遞歸改變目錄下所有文件的副本系數。 示例: · hadoop fs -setrep -w 3 -R /user/hadoop/dir1 返回值: 成功返回0,失敗返回-1。 stat使用方法:hadoop fs -stat URI [URI …] 返回指定路徑的統計信息。 示例: · hadoop fs -stat path 返回值: tail使用方法:hadoop fs -tail [-f] URI 將文件尾部1K字節的內容輸出到stdout。支持-f選項,行爲和Unix中一致。 示例: · hadoop fs -tail pathname 返回值: test使用方法:hadoop fs -test -[ezd] URI 選項: 示例: · hadoop fs -test -e filename text使用方法:hadoop fs -text <src> 將源文件輸出爲文本格式。允許的格式是zip和TextRecordInputStream。 touchz使用方法:hadoop fs -touchz URI [URI …] 創建一個0字節的空文件。 示例: · hadoop -touchz pathname 返回值: |
2.查看hdfs根目錄下都有哪些文件
使用命令“hadoopfs –lsr /”遞歸查看hdfs根目錄下的所有文件夾和文件列表,如下圖所示:
第一個字符:如果實d開頭的表示文件夾,-開頭的表示文件
再後面的10個字符是權限控制
再後面表示副本數量,文件夾用-表示,因爲文件夾沒有副本
再後面的root是創建者
再後面表示該文件屬於哪個用戶組
再後面的是文件大小,如果是文件夾則沒有大小
注意:hdfs管理的文件,在linux下是看不到的。
3.在hdfs根目錄下創建一個文件夾
使用命令“hadoopfs –mkdir /test”查創建一個文件夾,如下圖所示:
4.上傳文件到hdfs中
我們將linux系統/root目錄下的一個68M的big.bin文件上傳到hdfs的test文件夾中;
先看一下linux下的這個文件,如下圖所示:
執行上傳命令“hadoopfs -put /root/big.bin /test”,並查看結果如下圖所示:
如果文件在hdfs中已經存在,會提示錯誤信息,如下圖所示:
如果實在想上傳,可以改個名字:“hadoopfs -put /root/big.bin /test/big1.bin”
5.默認文件夾與默認文件名
在hdfs中所有用戶的默認文件夾都是/user/<currentUser>/
如我們執行命令“hadoopfs –ls”,出現如下提示:
這是因爲當前用戶是root,而在hdfs文件系統的/user/文件夾下沒有/user/root/文件夾
如我們先執行命令“hadoopfs –mkdir /user/root”,然後再執行命令“hadoopfs –ls”,就正常了,如下圖所示:
不過此時/user/root目錄下是空的,所以看不到文件。
如使用命令“hadoopfs –put little.txt abc”
注意:如果不指定hdfs目錄,則默認爲“/user/<currentUser>/”路徑
如果指定的路徑abc文件夾不存在,那麼abc默認作爲文件名使用,將把little.text上傳到默認路徑下,並且名字爲abc
6.訪問指定的hdfs服務器
使用命令“hadoopfs –ls hdfs://hadoop001:9000/”可以訪問指定的hdfs文件系統,如果訪問本機,用“/”即可代替根目錄。
使用命令“morecore-site.xml”查看配置文件,如下圖所示:
可以看到hdfs的默認名稱設置爲“hdfs://hadoop001:9000”
7.區分htfs在linux中的根目錄和hdfs自己的虛擬根目錄
使用命令“cd$HADOOP_HOME”訪問htfs在linux上的根目錄
使用命令“hadoopfs –ls /”訪問hdfs系統的虛擬根目錄