翻譯: http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html
版本: 2.9.0
- appendToFile
- cat
- checksum
- chgrp
- chmod
- chown
- copyFromLocal
- copyToLocal
- count
- cp
- createSnapshot
- deleteSnapshot
- df
- du
- dus
- expunge
- find
- get
- getfacl
- getfattr
- getmerge
- help
- ls
- lsr
- mkdir
- moveFromLocal
- moveToLocal
- mv
- put
- renameSnapshot
- rm
- rmdir
- rmr
- setfacl
- setfattr
- setrep
- stat
- tail
- test
- text
- touchz
- truncate
- usage
- Deleting objects
- Overwriting Objects
- Timestamps
- Security model and operations
- Commands of limited value
概觀
文件系統(tǒng)(FS)shell包含各種類似shell的命令阔逼,可直接與Hadoop分布式文件系統(tǒng)(HDFS)以及Hadoop支持的其他文件系統(tǒng)(如Local FS割以,HFTP FS病袄,S3 FS等)進(jìn)行交互悄雅。FS 命令的調(diào)用方式如下:
bin/hadoop fs <args>
所有FS shell命令都將路徑URI作為參數(shù)。URI格式是scheme://authority/path. 敬扛。對(duì)于HDFS唉侄,方案是 hdfs ,而對(duì)于本地FS但荤,方案是 file 。該scheme 和authority是可選的涧至。如果未指定腹躁,則使用在配置中指定的默認(rèn)方案。在HDFS文件系統(tǒng)中南蓬,像/ parent / child這樣的文件或目錄可以被指定為hdfs://namenodehost/parent/child 或者簡(jiǎn)單地指定為 /parent/child (假設(shè)你的配置設(shè)置為 hdfs://namenodehost)纺非。
FS shell中的大多數(shù)命令都像對(duì)應(yīng)的Unix命令一樣。每個(gè)命令都會(huì)描述差異赘方。錯(cuò)誤信息發(fā)送到stderr烧颖,輸出發(fā)送到stdout。
如果正在使用HDFS窄陡,則 hdfs dfs 是同義詞炕淮。
可以使用相對(duì)路徑。對(duì)于HDFS跳夭,當(dāng)前工作目錄是通常必須手動(dòng)創(chuàng)建的/user/<username>涂圆。HDFS主目錄也可以隱式訪問(wèn),例如币叹,當(dāng)使用HDFS垃圾文件夾時(shí)润歉, .Trash 目錄在主目錄中。
有關(guān)通用shell選項(xiàng)的信息颈抚,請(qǐng)參見(jiàn)命令手冊(cè)踩衩。
appendToFile
用法:hadoop fs -appendToFile <localsrc> ... <dst>
將單個(gè)src或多個(gè)srcs從本地文件系統(tǒng)追加到目標(biāo)文件系統(tǒng)。也從stdin讀取輸入并追加到目標(biāo)文件系統(tǒng)贩汉。
hadoop fs -appendToFile localfile /user/hadoop/hadoopfile
hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
hadoop fs -appendToFile localfile hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -appendToFile - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.
退出代碼:
成功時(shí)返回0九妈,錯(cuò)誤時(shí)返回1。
cat
用法:hadoop fs -cat [-ignoreCrc] URI [URI ...]
將源路徑復(fù)制到標(biāo)準(zhǔn)輸出雾鬼。
選項(xiàng)
- 該-ignoreCrc 選項(xiàng)禁用checkshum驗(yàn)證萌朱。
例:
hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -cat file:///file3 /user/hadoop/file4
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回-1策菜。
checksum
用法:hadoop fs -checksum URI
返回文件的校驗(yàn)和信息晶疼。
例:
hadoop fs -checksum hdfs://nn1.example.com/file1
hadoop fs -checksum file:///etc/hosts
chgrp
用法:hadoop fs -chgrp [-R] GROUP URI [URI ...]
更改文件的組關(guān)聯(lián)辩块。用戶必須是文件的所有者喇聊,否則是超級(jí)用戶冒黑。其他信息在“ 權(quán)限指南”中离赫。
選項(xiàng)
- -R選項(xiàng)將通過(guò)目錄結(jié)構(gòu)遞歸地進(jìn)行更改纠俭。
chmod
用法:hadoop fs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI ...]
更改文件的權(quán)限雄可。使用-R乌助,通過(guò)目錄結(jié)構(gòu)遞歸地進(jìn)行更改呻率。用戶必須是文件的所有者,否則是超級(jí)用戶锄弱。其他信息在“ 權(quán)限指南”中考蕾。
選項(xiàng)
- -R選項(xiàng)將通過(guò)目錄結(jié)構(gòu)遞歸地進(jìn)行更改。
chown
用法:hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
更改文件的所有者会宪。用戶必須是超級(jí)用戶肖卧。其他信息在“ 權(quán)限指南”中。
選項(xiàng)
- -R選項(xiàng)將通過(guò)目錄結(jié)構(gòu)遞歸地進(jìn)行更改掸鹅。
copyFromLocal
用法:hadoop fs -copyFromLocal <localsrc> URI
與 fs -put 命令類似塞帐,只是源限制為本地文件引用。
選項(xiàng):
- -p :保留訪問(wèn)和修改時(shí)間巍沙,所有權(quán)和權(quán)限葵姥。(假設(shè)權(quán)限可以跨文件系統(tǒng)傳播)
- -f :覆蓋目標(biāo),如果它已經(jīng)存在句携。
- -l :允許DataNode延遲將文件保存到磁盤牌里,強(qiáng)制復(fù)制因子為1.此標(biāo)志將導(dǎo)致耐久性降低。小心使用务甥。
- -d :跳過(guò)創(chuàng)建后綴為 .COPYING 的臨時(shí)文件牡辽。
copyToLocal
用法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
與get命令類似,但目標(biāo)僅限于本地文件引用敞临。
count
用法:hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] <paths>
計(jì)算匹配指定文件模式的路徑下的目錄态辛,文件和字節(jié)數(shù)。獲取配額和使用情況挺尿。帶有-count的輸出列為:DIR_COUNT奏黑,F(xiàn)ILE_COUNT,CONTENT_SIZE编矾,PATHNAME
-u和-q選項(xiàng)控制輸出包含的列熟史。-q表示顯示配額,-u限制輸出僅顯示配額和使用窄俏。
帶有-count -q的輸出列為:QUOTA蹂匹,REMAINING_QUOTA,SPACE_QUOTA凹蜈,REMAINING_SPACE_QUOTA限寞,DIR_COUNT,F(xiàn)ILE_COUNT仰坦,CONTENT_SIZE履植,PATHNAME
具有-count -u的輸出列是:QUOTA,REMAINING_QUOTA悄晃,SPACE_QUOTA玫霎,REMAINING_SPACE_QUOTA,PATHNAME
-t選項(xiàng)顯示每種存儲(chǔ)類型的配額和使用情況。如果沒(méi)有給出-u或-q選項(xiàng)庶近,-t選項(xiàng)將被忽略翁脆。可在-t選項(xiàng)中使用的可能參數(shù)列表(除參數(shù)“”):“”拦盹,“all”,“ram_disk”溪椎,“ssd”普舆,“disk”或“archive”以外不區(qū)分大小寫。
-h選項(xiàng)以可讀格式顯示大小校读。
-v選項(xiàng)顯示標(biāo)題行沼侣。
-x選項(xiàng)排除結(jié)果計(jì)算中的快照。如果沒(méi)有-x選項(xiàng)(默認(rèn))歉秫,結(jié)果將始終從所有INode計(jì)算得出蛾洛,包括給定路徑下的所有快照。如果給出-u或-q選項(xiàng)雁芙,則忽略-x選項(xiàng)轧膘。
例:
hadoop fs -count hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
hadoop fs -count -q hdfs://nn1.example.com/file1
hadoop fs -count -q -h hdfs://nn1.example.com/file1
hadoop fs -count -q -h -v hdfs://nn1.example.com/file1
hadoop fs -count -u hdfs://nn1.example.com/file1
hadoop fs -count -u -h hdfs://nn1.example.com/file1
hadoop fs -count -u -h -v hdfs://nn1.example.com/file1
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回-1兔甘。
cp
用法:hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
將文件從源復(fù)制到目標(biāo)谎碍。該命令也允許多個(gè)源,在這種情況下洞焙,目標(biāo)必須是目錄蟆淀。
如果(1)源文件系統(tǒng)和目標(biāo)文件系統(tǒng)支持它們(僅限HDFS),并且(2)所有源和目標(biāo)路徑名都位于/.reserved/raw層次結(jié)構(gòu)中澡匪,則'raw熔任。'命名空間擴(kuò)展屬性將被保留。確定是否保留raw唁情。名稱空間xattrs獨(dú)立于-p(保留)標(biāo)志疑苔。
選項(xiàng):
- 如果它已經(jīng)存在,-f選項(xiàng)將覆蓋目標(biāo)甸鸟。
- -p選項(xiàng)將保留文件屬性[topx](時(shí)間戳夯巷,所有權(quán),權(quán)限哀墓,ACL趁餐,XAttr)。如果-p指定不帶arg篮绰,則保留時(shí)間戳后雷,所有權(quán)和權(quán)限。如果指定了-pa,那么也會(huì)保留權(quán)限臀突,因?yàn)锳CL是一組超級(jí)權(quán)限勉抓。確定是否保留原始名稱空間擴(kuò)展屬性與-p標(biāo)志無(wú)關(guān)。
例:
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
退出代碼:
成功時(shí)返回0候学,錯(cuò)誤時(shí)返回-1藕筋。
createSnapshot
請(qǐng)參閱HDFS快照指南。
deleteSnapshot
請(qǐng)參閱HDFS快照指南梳码。
df
用法: hadoop fs -df [-h] URI [URI ...]
顯示可用空間隐圾。
選項(xiàng):
- -h選項(xiàng)將以“人類可讀”的方式格式化文件大小(例如64.0m而不是67108864)
例:
- hadoop dfs -df / user / hadoop / dir1
du
用法: hadoop fs -du [-s] [-h] [-x] URI [URI ...]
顯示給定目錄中包含的文件和目錄的大小掰茶,或者文件的長(zhǎng)度暇藏。
選項(xiàng):
- -s選項(xiàng)將導(dǎo)致顯示文件長(zhǎng)度的匯總摘要,而不是單個(gè)文件濒蒋。如果沒(méi)有-s選項(xiàng)盐碱,計(jì)算是通過(guò)從給定路徑進(jìn)入1級(jí)深度完成的。
- -h選項(xiàng)將以“人類可讀”的方式格式化文件大谢铩(例如64.0m而不是67108864)
- -x選項(xiàng)將排除結(jié)果計(jì)算中的快照瓮顽。如果沒(méi)有-x選項(xiàng)(默認(rèn)),結(jié)果將始終從所有INode計(jì)算得出围橡,包括給定路徑下的所有快照趣倾。
du按照以下格式返回三列:
size disk_space_consumed_with_all_replicas full_path_name
例
hadoop fs -du /user/hadoop/dir1 /user/hadoop/file1 hdfs://nn.example.com/user/hadoop/dir1
退出代碼:成功時(shí)返回0,錯(cuò)誤時(shí)返回-1某饰。
dus
用法:hadoop fs -dus <args>
顯示文件長(zhǎng)度的摘要儒恋。
注意:此命令已棄用。而是使用<tt>hadoop fs -du -s</tt>黔漂。
expunge
用法:hadoop fs -expunge
永久刪除比垃圾目錄中的保留閾值更早的檢查點(diǎn)中的文件诫尽,并創(chuàng)建新的檢查點(diǎn)。
當(dāng)創(chuàng)建檢查點(diǎn)時(shí)炬守,垃圾桶中最近刪除的文件將在檢查點(diǎn)下移動(dòng)牧嫉。在下一次調(diào)用<tt>-expunge</tt>命令時(shí),檢查點(diǎn)中比<tt>fs.trash.interval</tt>更早的文件將被永久刪除减途。
如果文件系統(tǒng)支持該功能酣藻,則用戶可以配置為通過(guò)以 fs.trash.checkpoint.interval (在core-site.xml中)存儲(chǔ)的參數(shù)定期創(chuàng)建和刪除檢查點(diǎn)。該值應(yīng)該小于或等于 fs.trash.interval 鳍置。
有關(guān)HDFS的垃圾功能的更多信息辽剧,請(qǐng)參閱HDFS體系結(jié)構(gòu)指南。
find
用法:hadoop fs -find <path> ... <expression> ...
查找與指定表達(dá)式匹配的所有文件并將選定的操作應(yīng)用于它們税产。如果沒(méi)有指定路徑怕轿,則默認(rèn)為當(dāng)前工作目錄偷崩。如果未指定表達(dá)式,則默認(rèn)為-print撞羽。
以下主要表達(dá)式被識(shí)別:
-
-name 模式
-iname 模式如果文件的基本名稱與使用標(biāo)準(zhǔn)文件系統(tǒng)匹配的模式匹配阐斜,則評(píng)估為true。如果使用-iname诀紊,則匹配不區(qū)分大小寫谒出。
-
-print
-print0總是評(píng)估為真。使當(dāng)前路徑名寫入標(biāo)準(zhǔn)輸出邻奠。如果使用-print0表達(dá)式笤喳,則會(huì)附加ASCII NULL字符。
以下操作符被認(rèn)可:
-
expression -a expression
expression -and expression
expression expression用于連接兩個(gè)表達(dá)式的邏輯AND運(yùn)算符惕澎。如果兩個(gè)子表達(dá)式都返回true莉测,則返回true颜骤。由兩個(gè)表達(dá)式的并置所暗示唧喉,因此不需要明確指定。如果第一個(gè)表達(dá)式失敗忍抽,則不會(huì)應(yīng)用第二個(gè)表達(dá)式八孝。
例:
hadoop fs -find / -name test -print
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回-1鸠项。
get
用法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
將文件復(fù)制到本地文件系統(tǒng)干跛。未通過(guò)CRC檢查的文件可使用-ignorecrc選項(xiàng)復(fù)制。文件和CRC可以使用-crc選項(xiàng)復(fù)制祟绊。
例:
hadoop fs -get /user/hadoop/file localfile
hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile
退出代碼:
成功時(shí)返回0楼入,錯(cuò)誤時(shí)返回-1。
選項(xiàng):
- <tt>-p</tt>:保留訪問(wèn)和修改時(shí)間牧抽,所有權(quán)和權(quán)限嘉熊。(假設(shè)權(quán)限可以跨文件系統(tǒng)傳播)
- <tt>-f</tt>:覆蓋目標(biāo),如果它已經(jīng)存在扬舒。
- <tt>-ignorecrc</tt>:跳過(guò)對(duì)下載的文件進(jìn)行CRC校驗(yàn)阐肤。
- <tt>-crc</tt>:為下載的文件寫入CRC校驗(yàn)和。
getfacl
用法:hadoop fs -getfacl [-R] <path>
顯示文件和目錄的訪問(wèn)控制列表(ACL)讲坎。如果目錄具有默認(rèn)ACL孕惜,則getfacl也會(huì)顯示默認(rèn)ACL。
選項(xiàng):
- -R:遞歸列出所有文件和目錄的ACL晨炕。
- 路徑:要列出的文件或目錄衫画。
例子:
hadoop fs -getfacl /file
hadoop fs -getfacl -R /dir
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回非零值瓮栗。
getfattr
用法:hadoop fs -getfattr [-R] -n name | -d [-e en] <path>
顯示文件或目錄的擴(kuò)展屬性名稱和值(如果有)碧磅。
選項(xiàng):
- -R:遞歸列出所有文件和目錄的屬性碘箍。
- -n name:轉(zhuǎn)儲(chǔ)指定的擴(kuò)展屬性值。
- -d:轉(zhuǎn)儲(chǔ)與路徑名關(guān)聯(lián)的所有擴(kuò)展屬性值鲸郊。
- -e encoding:檢索后對(duì)其進(jìn)行編碼丰榴。有效的編碼是“文本”,“十六進(jìn)制”和“base64”秆撮。編碼為文本字符串的值用雙引號(hào)(“)括起來(lái)四濒,編碼為十六進(jìn)制和base64的值分別以0x和0作為前綴。
- path:文件或目錄职辨。
例子:
hadoop fs -getfattr -d /file
hadoop fs -getfattr -R -n user.myAttr /dir
退出代碼:
成功時(shí)返回0盗蟆,錯(cuò)誤時(shí)返回非零值。
getmerge
用法:hadoop fs -getmerge [-nl] <src> <localdst>
將源目錄和目標(biāo)文件作為輸入舒裤,并將src中的文件連接到目標(biāo)本地文件喳资。可選地腾供,可以將-nl設(shè)置為在每個(gè)文件的末尾添加換行符(LF)仆邓。在空文件的情況下,可以使用-skip-empty-file來(lái)避免不需要的換行符伴鳖。
例子:
hadoop fs -getmerge -nl /src /opt/output.txt
hadoop fs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt
退出代碼:
成功時(shí)返回0节值,錯(cuò)誤時(shí)返回非零值。
help
用法: hadoop fs -help
返回使用輸出榜聂。
ls
用法: hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] <args>
選項(xiàng):
- -C:僅顯示文件和目錄的路徑搞疗。
- -d:目錄被列為純文件。
- -h:以人類可讀的方式格式化文件大行胨痢(例如64.0m而不是67108864)匿乃。
- -q:打印豌汇?而不是不可打印的字符幢炸。
- -R:遞歸列出遇到的子目錄。
- -t:按修改時(shí)間排序輸出(最近的第一個(gè))瘤礁。
- -S:按文件大小排序輸出阳懂。
- -r:反轉(zhuǎn)排序順序。
- -u:使用訪問(wèn)時(shí)間而不是修改時(shí)間進(jìn)行顯示和排序柜思。
對(duì)于文件岩调,ls以下列格式在文件上返回統(tǒng)計(jì)信息:
permissions number_of_replicas userid groupid filesize modification_date modification_time filename
對(duì)于一個(gè)目錄,它會(huì)像在Unix中一樣返回其直接子對(duì)象的列表赡盘。一個(gè)目錄被列為:
permissions userid groupid modification_date modification_time dirname
目錄中的文件默認(rèn)情況下按文件名排序号枕。
例:
- hadoop fs -ls / user / hadoop / file1
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回-1陨享。
lsr
用法: hadoop fs -lsr <args>
ls的遞歸版本葱淳。
注意:此命令已棄用钝腺。而是使用<tt>hadoop fs -ls -R</tt>
mkdir
用法: hadoop fs -mkdir [-p] <路徑>
以路徑URI作為參數(shù)并創(chuàng)建目錄。
選項(xiàng):
- -p選項(xiàng)的行為與Unix mkdir -p很相似赞厕,沿路徑創(chuàng)建父目錄艳狐。
例:
- hadoop fs -mkdir / user / hadoop / dir1 / user / hadoop / dir2
- hadoop fs -mkdir hdfs://nn1.example.com/user/hadoop/dir hdfs://nn2.example.com/user/hadoop/dir
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回-1皿桑。
moveFromLocal
用法:hadoop fs -moveFromLocal <localsrc> <dst>
與put命令類似毫目,區(qū)別在于源localsrc在復(fù)制后被刪除。
moveToLocal
用法:hadoop fs -moveToLocal [-crc] <src> <dst>
顯示“尚未實(shí)施”消息诲侮。
mv
用法: hadoop fs -mv URI [URI ...] <dest>
將文件從源移動(dòng)到目標(biāo)镀虐。該命令還允許多個(gè)源,在這種情況下沟绪,目標(biāo)需要成為目錄刮便。不允許跨文件系統(tǒng)移動(dòng)文件。
例:
hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
hadoop fs -mv hdfs://nn.example.com/file1 hdfs://nn.example.com/file2 hdfs://nn.example.com/file3 hdfs://nn.example.com/dir1
退出代碼:
成功時(shí)返回0绽慈,錯(cuò)誤時(shí)返回-1恨旱。
put
用法 hadoop fs -put [-f] [-p] [-l] [-d] [ - | <localsrc1> .. ]. <dst>
將單個(gè)src或多個(gè)srcs從本地文件系統(tǒng)復(fù)制到目標(biāo)文件系統(tǒng)。如果源設(shè)置為“ - ”久信,還從標(biāo)準(zhǔn)輸入讀取輸入并寫入目標(biāo)文件系統(tǒng)
如果文件已經(jīng)存在窖杀,則復(fù)制失敗漓摩,除非給出-f標(biāo)志裙士。
選項(xiàng):
- <tt>-p</tt>:保留訪問(wèn)和修改時(shí)間,所有權(quán)和權(quán)限管毙。(假設(shè)權(quán)限可以跨文件系統(tǒng)傳播)
- <tt>-f</tt>:覆蓋目標(biāo)腿椎,如果它已經(jīng)存在。
- <tt>-l</tt>:允許DataNode延遲將文件保存到磁盤夭咬,強(qiáng)制復(fù)制因子為1.此標(biāo)志將導(dǎo)致耐久性降低啃炸。小心使用。
- <tt>-d</tt>:跳過(guò)創(chuàng)建后綴為<tt>.COPYING</tt>的臨時(shí)文件卓舵。
例子:
hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put -d localfile hdfs://nn.example.com/hadoop/hadoopfile
hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile Reads the input from stdin.
退出代碼:
成功時(shí)返回0南用,錯(cuò)誤時(shí)返回-1。
renameSnapshot
請(qǐng)參閱HDFS快照指南掏湾。
rm
用法:hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
刪除指定為args的文件裹虫。
如果啟用垃圾箱,文件系統(tǒng)會(huì)將刪除的文件移動(dòng)到垃圾目錄(由FileSystem#getTrashRoot提供)融击。
目前筑公,垃圾功能默認(rèn)是禁用的。用戶可以通過(guò)為參數(shù)<tt>fs.trash.interval</tt>(在core-site.xml中)設(shè)置大于零的值來(lái)啟用垃圾桶尊浪。
請(qǐng)參閱刪除垃圾桶中的文件匣屡。
選項(xiàng):
- 如果文件不存在封救,-f選項(xiàng)將不顯示診斷消息或修改退出狀態(tài)以反映錯(cuò)誤。
- -R選項(xiàng)遞歸刪除目錄及其下的任何內(nèi)容捣作。
- -r選項(xiàng)等同于-R誉结。
- -skipTrash選項(xiàng)將繞過(guò)垃圾箱(如果啟用),并立即刪除指定的文件券躁。當(dāng)需要從超配額目錄中刪除文件時(shí)搓彻,這會(huì)很有用。
- 在刪除大于 hadoop.shell.delete.limit.num.files (在core-site.xml中嘱朽,缺省值為 100)的文件總數(shù)之前旭贬,-safely選項(xiàng)需要安全確認(rèn)。它可以與-skipTrash一起使用搪泳,以防止意外刪除大型目錄稀轨。預(yù)計(jì)在遞歸查看大目錄以計(jì)算要確認(rèn)之前要?jiǎng)h除的文件數(shù)量時(shí),會(huì)出現(xiàn)延遲岸军。
例:
- <tt>hadoop fs -rm hdfs://nn.example.com/file/user/hadoop/emptydir</tt>
退出代碼:
成功時(shí)返回0奋刽,錯(cuò)誤時(shí)返回-1。
rmdir
用法:hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
刪除一個(gè)目錄艰赞。
選項(xiàng):
- --ignore-fail-on-non-empty :使用通配符時(shí)佣谐,如果目錄仍包含文件,請(qǐng)不要失敗方妖。
例:
- <tt>hadoop fs -rmdir / user / hadoop / emptydir</tt>
rmr
用法:<tt>hadoop fs -rmr [-skipTrash] URI [URI ...]</tt>
遞歸版本的刪除狭魂。
注意:此命令已棄用。而是使用<tt>hadoop fs -rm -r</tt>
setfacl
用法:hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]
設(shè)置文件和目錄的訪問(wèn)控制列表(ACL)党觅。
選項(xiàng):
- -b:刪除除基本ACL條目以外的所有條目雌澄。為了與許可位兼容,用戶杯瞻,組和其他條目保留镐牺。
- -k:刪除默認(rèn)ACL。
- -R:遞歸地將操作應(yīng)用于所有文件和目錄魁莉。
- -m:修改ACL睬涧。新條目添加到ACL中,并保留現(xiàn)有條目旗唁。
- -x:刪除指定的ACL條目畦浓。其他ACL條目被保留。
- <tt>--set</tt>:完全替換ACL逆皮,丟棄所有現(xiàn)有條目宅粥。所述acl_spec必須包括用戶,組條目和其他用于與權(quán)限位兼容性电谣。
- acl_spec:逗號(hào)分隔的ACL條目列表秽梅。
- 路徑:要修改的文件或目錄抹蚀。
例子:
hadoop fs -setfacl -m user:hadoop:rw- /file
hadoop fs -setfacl -x user:hadoop /file
hadoop fs -setfacl -b /file
hadoop fs -setfacl -k /dir
hadoop fs -setfacl --set user::rw-,user:hadoop:rw-,group::r--,other::r-- /file
hadoop fs -setfacl -R -m user:hadoop:r-x /dir
hadoop fs -setfacl -m default:user:hadoop:r-x /dir
退出代碼:
成功時(shí)返回0,錯(cuò)誤時(shí)返回非零值企垦。
setfattr
用法:hadoop fs -setfattr -n name [-v value] | -x name <path>
為文件或目錄設(shè)置擴(kuò)展屬性名稱和值环壤。
選項(xiàng):
- -n名稱:擴(kuò)展屬性名稱。
- -v value:擴(kuò)展屬性值钞诡。該值有三種不同的編碼方法郑现。如果參數(shù)用雙引號(hào)引起來(lái),那么值就是引號(hào)內(nèi)的字符串荧降。如果參數(shù)的前綴為0x或0X接箫,則將其視為十六進(jìn)制數(shù)字。如果參數(shù)以0或0S開始朵诫,那么它被視為base64編碼辛友。
- -x名稱:刪除擴(kuò)展屬性。
- 路徑:文件或目錄剪返。
例子:
- <tt>hadoop fs -setfattr -n user.myAttr -v myValue / file</tt>
- <tt>hadoop fs -setfattr -n user.noValue / file</tt>
- <tt>hadoop fs -setfattr -x user.myAttr / file</tt>
退出代碼:
成功時(shí)返回0废累,錯(cuò)誤時(shí)返回非零值。
setrep
用法:hadoop fs -setrep [-R] [-w] <numReplicas> <path>
更改文件的復(fù)制因子脱盲。如果path是一個(gè)目錄邑滨,那么該命令會(huì)遞歸地更改以path為根的目錄樹下的所有文件的復(fù)制因子。
選項(xiàng):
- -w標(biāo)志請(qǐng)求該命令等待復(fù)制完成钱反。這可能需要很長(zhǎng)時(shí)間掖看。
- -R標(biāo)志被接受用于向后兼容。它沒(méi)有效果诈铛。
例:
- hadoop fs -setrep -w 3 /user/hadoop/dir1
退出代碼:
成功時(shí)返回0乙各,錯(cuò)誤時(shí)返回-1墨礁。
stat
用法:hadoop fs -stat [format] <path> ...
以指定的格式打印有關(guān)<path>處的文件/目錄的統(tǒng)計(jì)信息幢竹。格式接受八進(jìn)制(%a)和符號(hào)(%A),字節(jié)(%b)文件大小恩静,類型(%F)焕毫,所有者組名稱(%g),名稱(%n)驶乾,塊大幸仂(%o) ),復(fù)制(%r)级乐,所有者用戶名(%u)疙咸,訪問(wèn)日期(%x,%X)和修改日期(%y风科,%Y)撒轮。%x和%y將UTC日期顯示為“yyyy-MM-dd HH:mm:ss”乞旦,并且%X和%Y顯示自1970年1月1日UTC以來(lái)的毫秒數(shù)。如果未指定格式题山,則默認(rèn)使用%y兰粉。
例:
- hadoop fs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file
退出代碼:成功時(shí)返回0,錯(cuò)誤時(shí)返回-1顶瞳。
tail
用法: hadoop fs -tail [-f] URI
將文件的最后一個(gè)千字節(jié)顯示到stdout玖姑。
選項(xiàng):
- 隨著文件的增長(zhǎng),-f選項(xiàng)將輸出附加數(shù)據(jù)慨菱,就像在Unix中一樣焰络。
例:
- hadoop fs -tail路徑名
退出代碼:成功時(shí)返回0,錯(cuò)誤時(shí)返回-1符喝。
test
用法:hadoop fs -test -[defsz] URI
選項(xiàng):
- -d:f路徑是一個(gè)目錄舔琅,返回0。
- -e:如果路徑存在洲劣,則返回0备蚓。
- -f:如果路徑是文件,則返回0囱稽。
- -s:如果路徑不為空郊尝,則返回0。
- -r:如果路徑存在并且授予讀取權(quán)限战惊,則返回0流昏。
- -w:如果路徑存在并且寫入權(quán)限被授予,則返回0吞获。
- -z:如果文件長(zhǎng)度為零况凉,則返回0。
例:
- <tt>hadoop fs -test -e文件名</tt>
text
用法: hadoop fs -text <src>
采用源文件并以文本格式輸出文件各拷。允許的格式是zip和TextRecordInputStream刁绒。
touchz
用法: hadoop fs -touchz URI [URI ...]
創(chuàng)建一個(gè)零長(zhǎng)度的文件。如果文件存在且長(zhǎng)度非零烤黍,則返回錯(cuò)誤知市。
例:
- <tt>hadoop fs -touchz路徑名</tt>
退出代碼:成功時(shí)返回0,錯(cuò)誤時(shí)返回-1速蕊。
truncate
用法:hadoop fs -truncate [-w] <length> <paths>
將與指定文件模式匹配的所有文件截?cái)酁橹付ǖ拈L(zhǎng)度嫂丙。
選項(xiàng):
- 該<tt>-w</tt>標(biāo)志的要求,對(duì)塊恢復(fù)命令如有必要规哲,等待完成跟啤。沒(méi)有-w標(biāo)志的文件可能在恢復(fù)過(guò)程中一段時(shí)間??內(nèi)保持未關(guān)閉狀態(tài)。在此期間文件不能重新打開以便追加。
例:
hadoop fs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
hadoop fs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1
usage
用法:<tt>hadoop fs -usage命令</tt>
返回單個(gè)命令的幫助隅肥。
使用對(duì)象存儲(chǔ)
Hadoop FileSystem shell可與諸如Amazon S3关顷,Azure WASB和OpenStack Swift等對(duì)象存儲(chǔ)一起使用。
# Create a directory
hadoop fs -mkdir s3a://bucket/datasets/
# Upload a file from the cluster filesystem
hadoop fs -put /datasets/example.orc s3a://bucket/datasets/
# touch a file
hadoop fs -touchz wasb://yourcontainer@youraccount.blob.core.windows.net/touched
與普通文件系統(tǒng)不同武福,重命名對(duì)象存儲(chǔ)中的文件和目錄通常需要與被操作對(duì)象的大小成比例的時(shí)間议双。由于許多文件系統(tǒng)shell操作使用重命名作為操作的最后階段,跳過(guò)該階段可以避免長(zhǎng)時(shí)間的延遲捉片。
特別是平痰, put 和 copyFromLocal 命令有-d選項(xiàng),用于上載目錄伍纫。
# Upload a file from the cluster filesystem
hadoop fs -put -d /datasets/example.orc s3a://bucket/datasets/
# Upload a file from under the user's home directory in the local filesystem.
# Note it is the shell expanding the "~", not the hadoop fs command
hadoop fs -copyFromLocal -d -f ~/datasets/devices.orc s3a://bucket/datasets/
# create a file from stdin
# the special "-" source means "use stdin"
echo "hello" | hadoop fs -put -d -f - wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt
對(duì)象可以下載和查看:
# copy a directory to the local filesystem
hadoop fs -copyToLocal s3a://bucket/datasets/
# copy a file from the object store to the cluster filesystem.
hadoop fs -get wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt /examples
# print the object
hadoop fs -cat wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt
# print the object, unzipping it if necessary
hadoop fs -text wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt
## download log files into a local file
hadoop fs -getmerge wasb://yourcontainer@youraccount.blob.core.windows.net/logs\* log.txt
列出許多文件的命令往往比使用HDFS或其他文件系統(tǒng)時(shí)慢得多
hadoop fs -count s3a://bucket/
hadoop fs -du s3a://bucket/
其他慢速命令包括<tt>find</tt>宗雇,<tt>mv</tt>,<tt>cp</tt>和<tt>rm</tt>莹规。
find
對(duì)于在提供的路徑下有許多目錄時(shí)赔蒲,這可能非常緩慢。
# enumerate all files in the object store's container.
hadoop fs -find s3a://bucket/ -print
# remember to escape the wildcards to stop the shell trying to expand them first
hadoop fs -find s3a://bucket/datasets/ -name \*.txt -print
Rename
重命名文件的時(shí)間取決于其大小良漱。
重命名目錄的時(shí)間取決于該目錄下所有文件的數(shù)量和大小舞虱。
hadoop fs -mv s3a://bucket/datasets s3a://bucket/historical
如果操作中斷,對(duì)象存儲(chǔ)將處于未定義狀態(tài)母市。
Copy
hadoop fs -cp s3a://bucket/datasets s3a://bucket/historical
復(fù)制操作讀取每個(gè)文件矾兜,然后將其寫回對(duì)象存儲(chǔ); 完成的時(shí)間取決于要復(fù)制的數(shù)據(jù)量以及本地計(jì)算機(jī)和對(duì)象存儲(chǔ)之間的雙向帶寬。
計(jì)算機(jī)離對(duì)象存儲(chǔ)區(qū)越遠(yuǎn)患久,復(fù)制時(shí)間越長(zhǎng)
刪除對(duì)象
rm命令刪除對(duì)象和目錄對(duì)象椅寺。如果對(duì)象存儲(chǔ)最終保持一致,則<tt>fs ls</tt>命令和其他訪問(wèn)器可能會(huì)簡(jiǎn)要地返回現(xiàn)在刪除的對(duì)象的詳細(xì)信息; 這是無(wú)法避免的對(duì)象存儲(chǔ)的人工產(chǎn)物蒋失。
如果文件系統(tǒng)客戶端配置為將文件復(fù)制到垃圾目錄返帕,則這將位于存儲(chǔ)桶中; 那么<tt>rm</tt>操作將花費(fèi)與數(shù)據(jù)大小成正比的時(shí)間。此外篙挽,被刪除的文件將繼續(xù)產(chǎn)生存儲(chǔ)成本荆萤。
要避免這種情況,請(qǐng)使用<tt>-skipTrash</tt>選項(xiàng)嫉髓。
hadoop fs -rm -skipTrash s3a://bucket/dataset
移動(dòng)到<tt>.Trash</tt>目錄的數(shù)據(jù)可以使用<tt>expunge</tt>命令進(jìn)行<tt>清除</tt>观腊。由于此命令僅適用于默認(rèn)文件系統(tǒng),因此必須將其配置為使默認(rèn)文件系統(tǒng)成為目標(biāo)對(duì)象存儲(chǔ)區(qū)算行。
hadoop fs -expunge -D fs.defaultFS=s3a://bucket/
覆蓋對(duì)象
如果對(duì)象存儲(chǔ)最終是一致的,那么覆蓋現(xiàn)有對(duì)象的任何操作可能不會(huì)立即對(duì)所有客戶/查詢可見(jiàn)苫耸。即:查詢同一對(duì)象的狀態(tài)或內(nèi)容的后續(xù)操作可能會(huì)獲得先前的對(duì)象州邢。這有時(shí)可以在同一個(gè)客戶端中,同時(shí)讀取單個(gè)對(duì)象。
避免有一系列覆蓋對(duì)象然后立即處理更新數(shù)據(jù)的命令; 有可能會(huì)使用以前的數(shù)據(jù)量淌。
時(shí)間戳
對(duì)象庫(kù)中對(duì)象和目錄的時(shí)間戳可能不遵循HDFS中文件和目錄的行為骗村。
- 對(duì)象的創(chuàng)建和初始修改時(shí)間將是它在對(duì)象存儲(chǔ)上創(chuàng)建的時(shí)間; 這將在編寫過(guò)程結(jié)束時(shí),而不是開始呀枢。
- 時(shí)間戳將取自對(duì)象存儲(chǔ)基礎(chǔ)架構(gòu)的時(shí)鐘胚股,而不是客戶端的時(shí)鐘。
- 如果一個(gè)對(duì)象被覆蓋裙秋,修改時(shí)間將被更新琅拌。
- 目錄可能有也可能沒(méi)有有效的時(shí)間戳。當(dāng)更新下面的對(duì)象時(shí)摘刑,他們不可能更新其修改時(shí)間进宝。
- 該<tt>atime的</tt>訪問(wèn)時(shí)間特征不被任何在Apache Hadoop的代碼庫(kù)中找到的對(duì)象存儲(chǔ)的支持。
請(qǐng)查閱<tt>DistCp</tt>文檔以獲取有關(guān)這可能如何影響<tt>distcp -update</tt>操作的詳細(xì)信息枷恕。
安全模型和操作
對(duì)象庫(kù)的安全和權(quán)限模型通常與Unix風(fēng)格的文件系統(tǒng)的安全和權(quán)限模型非常不同; 查詢或操作權(quán)限的操作通常不受支持党晋。
適用的操作包括:chgrp, chmod, chown, getfacl, and setfacl.。相關(guān)的屬性命令<tt>getfattr</tt>和<tt>setfattr</tt>通常也不可用徐块。
列出權(quán)限和用戶/組詳細(xì)信息的文件系統(tǒng)命令通常模擬這些細(xì)節(jié)未玻。
嘗試保留權(quán)限的操作(例如<tt>fs -put -p</tt>)不會(huì)因此原因保留權(quán)限。(特例:<tt>wasb://</tt>胡控,保留權(quán)限但不強(qiáng)制執(zhí)行)深胳。
當(dāng)與只讀對(duì)象存儲(chǔ)進(jìn)行交互時(shí),“l(fā)ist”和“stat”命令中的權(quán)限可能表明用戶具有寫入權(quán)限铜犬,但事實(shí)上他們不具有寫權(quán)限舞终。
對(duì)象商店通常擁有自己的權(quán)限模型,模型可以通過(guò)特定于商店的工具進(jìn)行操縱癣猾。請(qǐng)注意敛劝,對(duì)象存儲(chǔ)可能提供的某些權(quán)限(例如只寫路徑或根路徑上的不同權(quán)限)可能與Hadoop文件系統(tǒng)客戶端不兼容。這些通常需要對(duì)整個(gè)對(duì)象存儲(chǔ)桶/容器進(jìn)行完全的讀寫訪問(wèn)纷宇,并將數(shù)據(jù)寫入其中夸盟。
作為權(quán)限修改的一個(gè)例子,下面是亞馬遜公開的只讀Landsat鏡像的列表:
$ hadoop fs -ls s3a://landsat-pds/
Found 10 items
drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/L8
-rw-rw-rw- 1 mapred 23764 2015-01-28 18:13 s3a://landsat-pds/index.html
drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/landsat-pds_stats
-rw-rw-rw- 1 mapred 105 2016-08-19 18:12 s3a://landsat-pds/robots.txt
-rw-rw-rw- 1 mapred 38 2016-09-26 12:16 s3a://landsat-pds/run_info.json
drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/runs
-rw-rw-rw- 1 mapred 27458808 2016-09-26 12:16 s3a://landsat-pds/scene_list.gz
drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/tarq
drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/tarq_corrupt
drwxrwxrwx - mapred 0 2016-09-26 12:16 s3a://landsat-pds/test
- 所有文件被列為具有完整的讀/寫權(quán)限像捶。
- 所有目錄似乎都具有完整的<tt>rwx</tt>權(quán)限上陕。
- 所有文件的復(fù)制計(jì)數(shù)為“1”。
- 所有文件和目錄的所有者被聲明為當(dāng)前用戶(<tt>mapred</tt>)拓春。
- 所有目錄的時(shí)間戳實(shí)際上是<tt>-ls</tt>操作執(zhí)行的時(shí)間释簿。這是因?yàn)檫@些目錄不是商店中的實(shí)際對(duì)象; 它們是基于其路徑下存在對(duì)象的模擬目錄。
當(dāng)試圖刪除其中一個(gè)文件時(shí)硼莽,操作失敗 - 盡管<tt>ls</tt>命令顯示的權(quán)限如下:
$ hadoop fs -rm s3a://landsat-pds/scene_list.gz
rm: s3a://landsat-pds/scene_list.gz: delete on s3a://landsat-pds/scene_list.gz:
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3;
Status Code: 403; Error Code: AccessDenied; Request ID: 1EF98D5957BCAB3D),
S3 Extended Request ID: wi3veOXFuFqWBUCJgV3Z+NQVj9gWgZVdXlPU4KBbYMsw/gA+hyhRXcaQ+PogOsDgHh31HlTCebQ=
這表明列出的權(quán)限不能作為寫入權(quán)限的證據(jù); 只有對(duì)象操作才能確定這一點(diǎn)庶溶。
請(qǐng)注意,Microsoft Azure WASB文件系統(tǒng)確實(shí)允許設(shè)置和檢查權(quán)限,但是權(quán)限實(shí)際上并未實(shí)施偏螺。此功能提供了使用DistCp備份HDFS目錄樹并保留權(quán)限的能力行疏,以及將目錄復(fù)制回HDFS時(shí)可以恢復(fù)的權(quán)限。但是套像,為了保護(hù)對(duì)象存儲(chǔ)中數(shù)據(jù)的訪問(wèn)權(quán)限酿联,必須使用 Azure 自己的模型和工具。
價(jià)值有限的命令
以下是通常不起作用的shell命令列表 - 可能實(shí)際上會(huì)失敗夺巩。
不同的對(duì)象存儲(chǔ)客戶端可能支持這些命令:請(qǐng)參考文檔并針對(duì)目標(biāo)商店進(jìn)行測(cè)試贞让。