Hadoop分佈式文件系統命令行接口(HDFS Shell)詳細版

處事有何定憑?但求此心過得去
立業無論大小,總要此身做得來

HDFS快速入門

Hadoop分佈式文件系統(HDFS)快速入門

HDFS知識梳理詳細版

Hadoop分佈式文件系統(HDFS)知識梳理(超詳細)

HDFS Shell詳細介紹

  1. appendToFile
    hadoop fs -appendToFile <localsrc> ... <dst>
    添加(追加)一個或多個源文件到目標文件中,或者將標準輸入中的數據寫入目標文件
  2. balancer
    hdfs balancer [-threshold <threshold>] [-policy <policy>] [-exclude [-f <hosts-file> | <comma-separated list of hosts>]] [-include [-f <hosts-file> | <comma-separated list of hosts>]] [-idleiterations <idleiterations>]
    用於平衡Hadoop集羣中各DataNode中的文件塊分佈,以避免出現部分DataNode磁盤佔用率高的問題
選項名稱 說明
-threshold <threshold> 表示平衡的閥值,取值範圍在0%到100%之間
即每個DataNode中空間使用率與HDFS集羣總的空間使用率的差距百分比
-policy <policy> 平衡策略,默認DataNode
應用於重新平衡HDFS存儲的策略,默認DataNode策略平衡了DataNode 級別的存儲,這類似於之前發行版的平衡策略
BlockPool 策略平衡了塊池級別和DataNode級別的存儲,BlockPool策略僅適用於Federated HDFS服務
-exclude/include 參數-exclude-include是用來選擇Balancer時,可以指定哪幾個DataNode之間重分佈
也可以從HDFS集羣中排除哪幾個節點不需要重分佈
-idleiterations <iterations> 迭代檢測的次數
  1. cat
    hadoop fs -cat URI [URI ...]
    將路徑指定文件的內容輸入到stdout
  2. chgrp
    hadoop fs -chgrp [-R] GROUP URI [URI ...]
    改變文件或目錄的組信息
  3. chmod
    hadoop fs -chmod [-R] <MODE[,MODE] ... | OCTALMODE> URI [URI ...]
    修改文件權限,修改者必須擁有該目錄權限,或者是擁護者的父用戶
    -R表示遞歸
  4. chwon
    hadoop fs -chwon [-R] [OWNER] [:[GROUP]] URI [URI ...]
    修改文件擁有者,修改者必須擁有該文件或者是其父用戶
    -R表示遞歸
  5. copyFromLocal
    hadoop fs -copyFromLocal <localsrc> URI
    拷貝本地文件到HDFS,類似於put命令,但可以拷貝目錄
    -f表示覆蓋原來已存在目錄
  6. copyToLocal
    hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
    拷貝HDFS文件到本地,類似於get命令,但可以拷貝目錄
  7. count``
    hadoop fs -count [-q] [-h] [-v] <paths>
    統計目錄下的文件數和空間佔用情況
    -h表示輸出格式化後的信息
    -v表示輸出表頭
-count -count -q 輸出列 說明
QUOTA 命名空間quota(創建的文件數目)
REMAINING_QUOTA 剩餘的命名空間quota(剩餘能創建的文件數目)
SPACE_QUOTA 物理空間quota(限制磁盤空間佔用大小)
REMAININNG_SPACE_QUOTA 剩餘的物理空間
DIR_COUNT 目錄數目
FILE_COUNT 文件數目
CONTEXT_SIZE 目錄邏輯空間大小
PATHNAME 路徑
  1. cp
    hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
    將文件從源路徑複製到目標路徑
    該命令允許有多個源路徑,此時目標路徑必須是一個目錄
    -f表示如果目標目錄已存在,則覆蓋之前的目錄
  2. distcp
    hadoop distcp <param> <src>
    分佈式拷貝(DistCp)是用於大規模集羣內部和集羣之間拷貝的工具
    它使用Map/Reduce實現文件分發、錯誤處理和恢復以及報告生成
    它把文件和目錄的列表作爲Map任務的輸入,每個任務會完成源列表中部分文件的拷貝
    由於使用了Map/Reduce方法,這個工具在語義和執行上都會有特殊的地方
標識 描述 備註
-p[rbugp] Preserve
r:replication number
b:blocak size
u:user
g:group
p:permission
修改次數不會被保留
當指定-update時,更新的狀態不會被同步,除非文件大小不同,比如文件被重新創建
-i 忽略失敗 該選項迴避默認情況提供關於拷貝的更精確的統計,同時它還將保留失敗拷貝操作的日誌,這些日誌信息可以用於調試
如果一個Map失敗了,但並沒完成所有分塊任務的嘗試,這不會導致整個作業的失敗
-log <logdir> 記錄日誌到<logdir> DisCp爲每個文件的每次嘗試拷貝操作都記錄入職,並把日誌作爲Map的輸出
如果一個Map失敗了,當重新執行時這個日誌不會被保留
-m <num_maps> 同時拷貝的最大數目 指定了拷貝數據時Map的數目
並不是Map越多吞吐量越大
-overwrite 覆蓋目標 如果一個Map失敗並且沒有使用i選項,不僅僅那些拷貝失敗的文件,這個分塊任務中的所有文件都會被重新拷貝
它會改變生成目標路徑的語義,用戶需要小心使用該選項
-update 如果源和目標的大小不一樣則進行覆蓋 這不是“同步”操作,是否執行覆蓋的唯一標準是源文件和目標文件大小是否相同
如果不同,則源文件替換目標文件
它會改變生成目標路徑的語義,用戶需要小心使用該選項
-f <urilist_uri> 使用<urilist_uri>作爲源文件列表 等價於把所有文件名列在命令行中
urilist_uri列表應該是完整合法的URI

參考官網
12. df
hadoop fs -df [-h] URI [URI ...]
顯示目錄空閒空間
-h表示轉換爲更加易讀的方式,比如67108864用64M代替
13. dfsadmin
hadoop dfsadmin [GENERIC_OPTIONS]
hadoop dfsadmin支持一些和HDFS管理相關的操作
hadoop dfsadmin -help能列出所有當前支持的命令

命令選項 描述
-report 報告文件系統的基本信息和統計信息
-safemode enter | leave | get | wait 安全模式維護命令
安全模式是NameNode的一個狀態,在這種狀態下,NameNode不接受對名字空間的更改(只讀),並且不復制或者刪除塊
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. 用戶不是管理員
如果目錄原來沒有配額則不會報錯
  1. expunge
    hadoop fs -expunge
    清空回收站
  2. fsck
    hdfs fsck <path> [-list-corruptfileblocks |[-move | -delete | -openforwrite] [-files [-blocks [-locations | - racks]]] [-includeSnapshots] [-storagepolicies] [-blockId <blk_Id>]
    檢查HDFS上文件和目錄的健康狀態、獲取文件的Block信息和位置信息等
選項名 說明
-list -corruptfileblocks 查看文件中損壞的塊
-move 將損壞的文件移動至 /lost+found 目錄
-delete 刪除損壞的文件
-files 檢查並列出所有文件狀態
-openforwrite 檢查並打印正在被打開執行寫操作的文件
-blocks 打印文件的Block報告(需要和-files一起使用)
-locations 打印文件塊的位置信息(需要和-files -blocks一起使用)
-racks 打印文件塊位置所在的機架信息
  1. get
    hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>
    複製文件到本地文件系統
  2. getConf
    hdfs getconf <COMMAND_OPTION>
    用於獲取HDFS配置信息
命令選項 說明
path 從此路徑開始檢查
-delete 刪除損壞的文件
-files 打印出正在檢查的文件
-files -blocks 打印塊報告
-files -blocks -locations 打印每個塊的位置
-files -blocks -racks 打印出DataNode位置的網絡拓撲
-includeSnapshots 如果給定路徑指示快照表目錄或其下有快照表目錄,則包含快照數據
-list -corruptfileblocks 打印出丟失的塊和它們所屬的文件的列表
-move 將損壞的文件移至 /lost+found
-openforwrite 打印出已打開以供寫入的文件
-storagepolicies 打印出塊的存儲策略摘要
-blockId 打印出該塊的信息

參考官網

  1. getmerge
    hadoop fs -getmerge <src> <localhost> [addnl]
    接受一個源目錄和一個目標作爲輸入,並且將源目錄中所有的文件連接成本地目標文件
    addnl是可選的,用於指定在每個文件結尾添加一個換行符
  2. ls
    hadoop fs -ls <args>
  3. lsr
    hadoop fs -lsr <args>
    ls命令的遞歸版本,類似於Unix中ls -R
  4. mkdir
    hadoop fs -mkdir <paths>
    接受路徑指定的URI作爲參數,創建這些目錄
    其行爲類似於Unix的mkdir -p,它會創建路徑中的各級父目錄
  5. mv
    hadoop fs -mv URI [URI ...] <dest>
    將文件從源路徑移動到目標路徑
    該命令允許有多個源路徑,此時目標路徑必須是一個目錄
    不允許在不同的文件系統間移動文件
  6. oev
    hdfs oev [OPTIONS] i INPUT_FILE -o OUTPUT_FILE
    用於查看edits文件
參數名 說明 必選參數 可選參數
-i, –inputFile <arg> 輸入edits文件,如果是xml後綴,表示XML格式,其他表示二進制
-o,–outputFile <arg> 輸出文件,如果已存在,則會覆蓋原文件
-p,–processor <arg> 指定轉換類型:binary (二進制格式),xml (默認,XML格式),stats (打印edits文件的靜態統計信息)
-f, –fix -txids 重置輸入edits文件中的transaction IDs
-r, –recover 使用recovery模式,跳過eidts中的錯誤記錄
-v, –verbose 打印處理過程的輸出
  1. oiv
    hdfs oiv [OPTIONS] -i INPUT_FILE
    用於將FsImage文件轉換成其他格式文件,如文本文件、XML文件
    參數名 | 說明 | 必選參數 | 可選參數
    :-: | :-: | :-: | :-:
    -i, –inputFile <arg>|輸入FsImage文件|√|
    -o, –outputFile <arg>|輸出轉換後的文件,如果已存在,則會覆蓋原文件|√|
    -p, –processor <arg>|將FsImage文件轉換成其他格式(LS\XML\FileDistribution),默認爲LS||√
    -h, –help|顯示幫助信息||√

  2. put
    hadoop fs -put <localsrc> ... <dst>
    從本地文件系統中複製單個或多個源路徑到目標文件系統,也支持從標準輸入中讀入輸入寫入目標文件系統

  3. rm
    hadoop fs -rm URI [URI ...]
    刪除指定的文件,只刪除非空目錄和文件
    -r 表示遞歸刪除

  4. setrep
    hadoop fs -setrep [-R] [-w] <numReplicas> <path>
    改變一個文件的副本系數
    -R選項用於遞歸改變目錄下所有文件的副本系數
    -w選項指定該請求等待操作執行結束

  5. stat
    hadoop fs -tail [-f] URI
    返回執行路徑的統計信息

-f選項 說明
%F 文件類型
%b 文件大小
%g 所屬組
%o Block大小
%n 文件名
%r 複製因子數
%u 文件所有者
%Y, %y 修改日期
  1. tail
    hadoop fa -tail [-f] URI
    將文件尾部1KB字節內容輸出到stdout
    -f表示根據文件描述符進行追蹤,當文件改名或被刪除,追蹤停止
  2. text
    hadoop fs -text <src>
    類似於cat,將源文件輸出爲文本格式
    允許的格式是zip和TextRecordInputStream
  3. touchz
    hadoop fs -touchz URI [URI ...]
    創建一個0字節的空文件
  4. truncate
    hadoop fs -truncate [-w] <length> <paths>
    文件截斷
    -w表示要求該命令等待回覆完成
  5. usage
    hadoop fs -usage command
    返回命令的幫助信息
  6. find
    hadoop fs - find <path > .. <expression>
    查找滿足表達式的文件和文件夾
    沒有配置path,默認是全部目錄/
    沒有配置表達式,默認爲-print
expression選項 說明
-name pattern 不區分大小寫,對大小寫不敏感
-iname pattern 對大小寫敏感
-print 打印
-print0 打印在一行
  1. getfacl
    hadoop fs -getfacl [-R] <path>
    獲取文件的ACL權限
    -R指定遞歸查找
  2. HDFS快照
  • HDFS快照是一個只讀的基於時間點文件系統拷貝,快照可以是整個文件系統的,也可以是其中的一部分,常用來作爲數據備份和容災,防止用戶錯誤
  • 在DataNode上面的Blocks不會被複制,做Snapshot 的文件紀錄了Block的列表和文件的大小,但是沒有數據的複製
  • Snapshot 並不會影響HDFS 的正常操作,即修改會按照時間的反序記錄,這樣可以直接讀取到最新的數據,快照數據是根據當前數據減去修改的部分計算出來
  • 快照會存儲在snapshottable目錄下,snapshottable存儲的快照最多爲65535個
  • snapshottable的目錄數量沒有限制,管理員可以將任何目錄設置爲snapshottable
  • 如果snapshottable裏面已存放快照,那麼該文件夾不能刪除或者改名
命令 說明
hdfs dfsadmin -allowSnapshot <path> 建立快照目錄
如果該操作成功,那麼目錄會變成snapshottable
hdfs dfsadmin -disallowSnapshot <path> 文件夾裏面所有快照在快照失效前必須被刪除,如果沒有該目錄,則會建立
hdfs dfsadmin -createSnapshot <path> [<snapshotName>] snapshottable目錄創建一個快照
該命令需要snapshottable目錄的權限
hdfs dfsadmin -deleteSnapshot <path> <snapshotName> 從一個snapshottable目錄刪除快照
該命令需要snapshottable目錄的權限
hdfs dfsadmin -renameSnapshot <path> <oldName> <newName> 重命名快照
該命令需要snapshottable目錄的權限
hdfs lsSnapshottableDir 獲取當前用戶的所有snapshottable
hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot> 得到兩個快照之間的不同
該命令需要兩個目錄的權限

有疑問的朋友可以在下方留言或者私信我,我儘快回答
歡迎各路大神萌新指點、交流!
求關注!求點贊!求收藏!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章