全部產品
Search
文件中心

E-MapReduce:HDFS常用命令

更新時間:Sep 13, 2025

您可以在已經建立好的E-MapReduce(簡稱EMR)叢集中,直接使用hadoop fs命令來對HDFS中的檔案進行操作。本文為您介紹HDFS的常見命令。

前提條件

在執行任何命令前,請確保已滿足以下條件:

  • 叢集訪問:已通過SSH等方式登入叢集的某一台節點(通常是主節點)。

  • 使用者權限:使用的賬戶(如預設的hadoop使用者)擁有對目標HDFS路徑的讀寫權限。在開啟Kerberos認證的叢集中,需要先進行身份認證

命令版本說明

Hadoop提供了兩種等效的命令格式來操作檔案系統:

  • hdfs dfs <args>:這是專門針對HDFS的命令。

  • hadoop fs <args>:通用檔案系統命令,可以操作HDFS、本地檔案系統(file:///)等多種Hadoop相容的檔案系統。

本文所有樣本將統一使用hadoop fs

命令速查表

下表匯總了HDFS最常用的操作命令,方便快速尋找。

命令

功能

常用文法

mkdir

在HDFS中建立新目錄。

hadoop fs -mkdir [-p] <paths>

touchz

在HDFS中建立一個大小為0位元組的空檔案。

hadoop fs -touchz URI [URI ...]

ls

查看指定路徑下的檔案和目錄列表及其基本資料。

hadoop fs -ls [-h] [-R] [-t] <args>

put

將本地檔案系統(執行命令的EMR節點)上的一個或多個檔案複製到HDFS。

hadoop fs -put [-f] [-p] <localsrc> <dst>

get

將HDFS上的檔案或目錄複寫到本地檔案系統(執行命令的EMR節點)。

hadoop fs -get [-f] [-p] <src> <localdst>

cp

在HDFS內部複製檔案或目錄。

hadoop fs -cp [-f] URI [URI ...] <dest>

mv

在HDFS內部移動或重新命名檔案/目錄。

hadoop fs -mv URI [URI ...] <dest>

rm

刪除HDFS中的檔案或目錄。

hadoop fs -rm [-f] [-r] [-skipTrash] URI [URI ...]

cat

查看HDFS上檔案的內容。

hadoop fs -cat URI [URI ...]

du

顯示檔案的大小或者目錄中所有檔案的大小。

hadoop fs -du [-s] [-h] URI [URI ...]

更多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

    • 原因:目前使用者沒有對目標檔案或目錄的讀/寫/執行許可權。

    • 解決方案:

      1. 使用hdfs dfs -ls <parent_dir>檢查檔案或其父目錄的許可權。

      2. 聯絡管理員使用chmodchown授權。

      3. 如果環境開啟了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主機名稱。

相關文檔