處事有何定憑?但求此心過得去
立業無論大小,總要此身做得來
HDFS快速入門
HDFS知識梳理詳細版
HDFS Shell詳細介紹
- appendToFile
hadoop fs -appendToFile <localsrc> ... <dst>
添加(追加)一個或多個源文件到目標文件中,或者將標準輸入中的數據寫入目標文件 - 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> | 迭代檢測的次數 |
- cat
hadoop fs -cat URI [URI ...]
將路徑指定文件的內容輸入到stdout - chgrp
hadoop fs -chgrp [-R] GROUP URI [URI ...]
改變文件或目錄的組信息 - chmod
hadoop fs -chmod [-R] <MODE[,MODE] ... | OCTALMODE> URI [URI ...]
修改文件權限,修改者必須擁有該目錄權限,或者是擁護者的父用戶
-R
表示遞歸 - chwon
hadoop fs -chwon [-R] [OWNER] [:[GROUP]] URI [URI ...]
修改文件擁有者,修改者必須擁有該文件或者是其父用戶
-R
表示遞歸 - copyFromLocal
hadoop fs -copyFromLocal <localsrc> URI
拷貝本地文件到HDFS,類似於put
命令,但可以拷貝目錄
-f
表示覆蓋原來已存在目錄 - copyToLocal
hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
拷貝HDFS文件到本地,類似於get
命令,但可以拷貝目錄 - 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 | 路徑 |
- cp
hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
將文件從源路徑複製到目標路徑
該命令允許有多個源路徑,此時目標路徑必須是一個目錄
-f
表示如果目標目錄已存在,則覆蓋之前的目錄 - 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. 用戶不是管理員 如果目錄原來沒有配額則不會報錯 |
- expunge
hadoop fs -expunge
清空回收站 - 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 | 打印文件塊位置所在的機架信息 |
- get
hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>
複製文件到本地文件系統 - 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 | 打印出該塊的信息 |
參考官網
- getmerge
hadoop fs -getmerge <src> <localhost> [addnl]
接受一個源目錄和一個目標作爲輸入,並且將源目錄中所有的文件連接成本地目標文件
addnl
是可選的,用於指定在每個文件結尾添加一個換行符 - ls
hadoop fs -ls <args>
- lsr
hadoop fs -lsr <args>
ls
命令的遞歸版本,類似於Unix中ls -R
- mkdir
hadoop fs -mkdir <paths>
接受路徑指定的URI作爲參數,創建這些目錄
其行爲類似於Unix的mkdir -p
,它會創建路徑中的各級父目錄 - mv
hadoop fs -mv URI [URI ...] <dest>
將文件從源路徑移動到目標路徑
該命令允許有多個源路徑,此時目標路徑必須是一個目錄
不允許在不同的文件系統間移動文件 - 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 | 打印處理過程的輸出 | √ |
-
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|顯示幫助信息||√ -
put
hadoop fs -put <localsrc> ... <dst>
從本地文件系統中複製單個或多個源路徑到目標文件系統,也支持從標準輸入中讀入輸入寫入目標文件系統 -
rm
hadoop fs -rm URI [URI ...]
刪除指定的文件,只刪除非空目錄和文件
-r
表示遞歸刪除 -
setrep
hadoop fs -setrep [-R] [-w] <numReplicas> <path>
改變一個文件的副本系數
-R
選項用於遞歸改變目錄下所有文件的副本系數
-w
選項指定該請求等待操作執行結束 -
stat
hadoop fs -tail [-f] URI
返回執行路徑的統計信息
-f 選項 |
說明 |
---|---|
%F | 文件類型 |
%b | 文件大小 |
%g | 所屬組 |
%o | Block大小 |
%n | 文件名 |
%r | 複製因子數 |
%u | 文件所有者 |
%Y, %y | 修改日期 |
- tail
hadoop fa -tail [-f] URI
將文件尾部1KB字節內容輸出到stdout
-f
表示根據文件描述符進行追蹤,當文件改名或被刪除,追蹤停止 - text
hadoop fs -text <src>
類似於cat
,將源文件輸出爲文本格式
允許的格式是zip和TextRecordInputStream - touchz
hadoop fs -touchz URI [URI ...]
創建一個0字節的空文件 - truncate
hadoop fs -truncate [-w] <length> <paths>
文件截斷
-w
表示要求該命令等待回覆完成 - usage
hadoop fs -usage command
返回命令的幫助信息 - find
hadoop fs - find <path > .. <expression>
查找滿足表達式的文件和文件夾
沒有配置path,默認是全部目錄/
沒有配置表達式,默認爲-print
expression選項 | 說明 |
---|---|
-name pattern | 不區分大小寫,對大小寫不敏感 |
-iname pattern | 對大小寫敏感 |
打印 | |
-print0 | 打印在一行 |
- getfacl
hadoop fs -getfacl [-R] <path>
獲取文件的ACL權限
-R
指定遞歸查找 - 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> | 得到兩個快照之間的不同 該命令需要兩個目錄的權限 |
有疑問的朋友可以在下方留言或者私信我,我儘快回答
歡迎各路大神萌新指點、交流!
求關注!求點贊!求收藏!