您可以在已經建立好的E-MapReduce(簡稱EMR)叢集中,直接使用hadoop fs命令來對HDFS中的檔案進行操作。本文為您介紹HDFS的常見命令。
前提條件
在執行任何命令前,請確保已滿足以下條件:
命令版本說明
Hadoop提供了兩種等效的命令格式來操作檔案系統:
hdfs dfs <args>:這是專門針對HDFS的命令。hadoop fs <args>:通用檔案系統命令,可以操作HDFS、本地檔案系統(file:///)等多種Hadoop相容的檔案系統。
本文所有樣本將統一使用hadoop fs。
命令速查表
下表匯總了HDFS最常用的操作命令,方便快速尋找。
命令 | 功能 | 常用文法 |
在HDFS中建立新目錄。 |
| |
在HDFS中建立一個大小為0位元組的空檔案。 |
| |
查看指定路徑下的檔案和目錄列表及其基本資料。 |
| |
將本地檔案系統(執行命令的EMR節點)上的一個或多個檔案複製到HDFS。 |
| |
將HDFS上的檔案或目錄複寫到本地檔案系統(執行命令的EMR節點)。 |
| |
在HDFS內部複製檔案或目錄。 |
| |
在HDFS內部移動或重新命名檔案/目錄。 |
| |
刪除HDFS中的檔案或目錄。 |
| |
查看HDFS上檔案的內容。 |
| |
顯示檔案的大小或者目錄中所有檔案的大小。 |
|
更多HDFS操作命令,請參見Apache Hadoop官網。
目錄與檔案管理
mkdir:建立目錄
在HDFS中建立新目錄。
文法
hadoop fs -mkdir [-p] <paths>參數說明
-p:沿路徑建立所有不存在的父目錄,類似於Linux的mkdir -p。這是生產環境中最常用的參數,可以避免因父目錄不存在而導致的錯誤。
樣本:在HDFS檔案系統中,建立/dir目錄。
hadoop fs -mkdir /dir
touchz:建立空檔案
在HDFS中建立一個大小為0位元組的空檔案。
文法
hadoop fs -touchz URI [URI ...]使用情境
作為任務處理完成的標記(marker file)。
在執行資料處理前,預先建立一個空的輸出檔案。
樣本:在HDFS檔案系統/dir/目錄下的建立emptyfile.txt檔案。
hadoop fs -touchz /dir/emptyfile.txt
ls:列出檔案和目錄
查看指定路徑下的檔案和目錄列表及其基本資料。
文法
hadoop fs -ls [-h] [-R] [-t] <args>參數說明
-h:以人類可讀的格式顯示檔案大小(例如,1K, 234M, 2G)。-R:遞迴列出所有子目錄的內容。-t:按修改時間排序,最新的檔案或目錄顯示在最前面。
樣本:查看建立的
dir目錄。hadoop fs -ls /dir
檔案傳輸
put:上傳檔案到HDFS
將本地檔案系統(執行命令的EMR節點)上的一個或多個檔案複製到HDFS。
文法
hadoop fs -put [-f] [-p] <localsrc> <dst>參數說明
-f:強制覆蓋目標路徑上已存在的檔案。-p:保留檔案的訪問和修改時間、所有權和許可權。
樣本:上傳本地檔案hello.txt至HDFS的/dir/sub-dir路徑下。
hadoop fs -put hello.txt /dir/sub-dir
get:從HDFS下載檔案
將HDFS上的檔案或目錄複寫到本地檔案系統(執行命令的EMR節點)。
文法
hadoop fs -get [-f] [-p] <src> <localdst>參數說明
-f:強制覆蓋目標路徑上已存在的檔案。-p:保留檔案的訪問和修改時間、所有權和許可權。
樣本:複製HDFS檔案/dir/emptyfile.txt至本地的/路徑下。
hadoop fs -get /dir/emptyfile.txt /
檔案操作
cp:複製檔案或目錄
在HDFS內部複製檔案或目錄。
文法
hadoop fs -cp [-f] URI [URI ...] <dest>參數說明
-f:強制覆蓋目標路徑上已存在的檔案。
樣本:複製/dir/sub-dir/目錄下的檔案hello_world.txt至/tmp目錄下。
hadoop fs -cp /dir/sub-dir/hello_world.txt /tmp
mv:移動或重新命名檔案或目錄
在HDFS內部移動或重新命名檔案/目錄。這是一個原子操作,在同一檔案系統內移動時,資料區塊不會實際移動,只會更新中繼資料,速度極快。
文法
hadoop fs -mv URI [URI ...] <dest>樣本
移動/tmp/目錄下的檔案hello_world2.txt至/dir/sub-dir/目錄下。
hadoop fs -mv /tmp/hello_world2.txt /dir/sub-dir/移動/tmp/路徑下的test目錄至/dir/sub-dir/目錄下。
hadoop fs -mv /tmp/test /dir/sub-dir/
rm:刪除檔案或目錄
刪除HDFS中的檔案或目錄。
文法
hadoop fs -rm [-f] [-r] [-skipTrash] URI [URI ...]參數說明
-r:遞迴刪除目錄及其所有內容。刪除目錄時必須使用此參數。-f:強制移除。如果檔案不存在,命令不會報錯。-skipTrash:永久刪除,跳過資源回收筒。請極度謹慎使用此選項! 預設情況下,刪除的檔案會移入目前使用者的資源回收筒目錄(/user/<username>/.Trash/)。
樣本:刪除HDFS系統中/dir/sub-dir/目錄下的檔案hello_world2.txt。
hadoop fs -rm /dir/sub-dir/hello_world2.txt
hadoop fs -rmr 命令已被棄用,請使用 hadoop fs -rm -r 命令來遞迴刪除目錄。
檔案查看
cat:查看檔案內容
查看HDFS上檔案的內容。
文法
hadoop fs -cat URI [URI ...]樣本
查看hello.txt檔案的內容。
hadoop fs -cat /hello.txt查看/dir/sub-dir/目錄下hello_world.txt檔案的內容。
hadoop fs -cat /dir/sub-dir/hello_world.txt
du:顯示檔案大小
顯示檔案的大小或者目錄中所有檔案的大小。
文法
hadoop fs -du [-s] [-h] URI [URI ...]參數說明
-s:顯示總計大小,而不是每個檔案/目錄的大小。-h:以人類可讀的格式顯示大小。
樣本
查看檔案的大小。
hadoop fs -du /hello.txt查看目錄下所有檔案的大小。
hadoop fs -du /dir
常見問題
Permission denied原因:目前使用者沒有對目標檔案或目錄的讀/寫/執行許可權。
解決方案:
使用
hdfs dfs -ls <parent_dir>檢查檔案或其父目錄的許可權。聯絡管理員使用
chmod或chown授權。如果環境開啟了Kerberos,請確認已使用
kinit擷取票據。
SafeModeException: NameNode is in safe mode原因:NameNode正在啟動過程中,處於安全模式,不接受寫操作。
解決方案:等待幾分鐘,NameNode會自動結束安全模式。可使用
hdfs dfsadmin -safemode get查看狀態。非緊急情況不建議手動強制退出。
No such file or directory原因:指定的路徑不存在。
解決方案:仔細檢查路徑拼字。如果要寫入檔案,請確保其父目錄已存在,或在
mkdir時使用-p參數。
StandbyException: Operation category READ is not supported in state standby原因:在HA(高可用)配置中,嘗試向處於Standby狀態的NameNode發送了讀寫請求。
解決方案:檢查Hadoop設定檔(
core-site.xml),確保fs.defaultFS指向的是HA的NameService名稱(如hdfs://mycluster),而不是某個具體的NameNode主機名稱。
相關文檔
如果您的叢集開啟了高可用,請參見HDFS高可用相關命令(HaAdmin)介紹。
如需在Hadoop叢集之間,或在HDFS與Object Storage Service(如OSS)之間遷移資料,請參見Hadoop DistCp介紹。