Hadoop【從無到有從有到無】【H5】FileSystem Shell

目錄

1.概述

1.1.appendToFile

1.2.cat

1.3.checksum

1.4.chgrp

1.5.chmod

1.6.wn

1.7.copyFromLocal

1.8.copyToLocal

1.9.count

1.10.cp

1.11.createSnapshot

1.12.deleteSnapshot

1.13.df

1.14.du

1.15.dus

1.16.expunge

1.17.find

1.18.get

1.19.getfacl

1.20.getfattr

1.21.getmerge

1.22.head

1.23.help

1.24.ls

1.25.lsr

1.26.mkdir

1.27.moveFromLocal

1.28.moveToLocal

1.29.mv

1.30.put

1.31.renameSnapshot

1.32.rm

1.33.rmdir

1.34.rmr

1.35.setfacl

1.36.setfattr

1.37.setrep

1.38.stat

1.39.tail

1.40.test

1.41.text

1.42.touch

1.43.touchz

1.44.truncate

1.45.usage

2.使用對象存儲

2.1.Find

2.2.Rename

2.3.Copy

3.Deleting objects

4.Overwriting Objects

5.Timestamps

6.安全模型和操作

7.有限值的命令


1.概述

文件系統(FS)shell 程序包括各種類似於shell-like程序的命令,這些命令可直接與Hadoop分佈式文件系統(HDFS)以及Hadoop支持的其他文件系統(例如本地FS,WebHDFS,S3 FS等)進行交互。 FS Shell通過以下方式調用:

bin/hadoop fs <args>

所有FS Shell命令都將路徑URI作爲參數。 URI格式爲 scheme://authority/path。 對於HDFS,scheme爲hdfs,對於Local FS,scheme 爲file。 方案(scheme)和權限是可選的。 如果未指定,則使用配置中指定的默認方案。 可以將HDFS文件或目錄(例如/parent/child)指定爲hdfs://namenodehost/parent/child,也可以簡單地指定爲/parent/child(假設您的配置設置爲指向hdfs://namenodehost)。

FS Shell中的大多數命令的行爲類似於相應的Unix命令。 每個命令都描述了差異。 錯誤信息將發送到stderr,輸出將發送到stdout。

如果使用HDFS,則hdfs dfs是同義詞。

可以使用相對路徑。 對於HDFS,當前工作目錄是HDFS主目錄/user/<username>,該目錄通常必須手動創建。 也可以隱式訪問HDFS主目錄,例如,當使用HDFS垃圾(trash)文件夾時,主目錄中的.Trash目錄。

有關通用shell程序選項,請參見《命令手冊》。

1.1.appendToFile

用法: hadoop fs -appendToFile <localsrc> ... <dst>

從本地文件系統附加一個或多個src到目標文件系統。 還從stdin讀取輸入,並將其追加到目標文件系統。

  • 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.

退出代碼:

成功返回0,錯誤返回-1。

1.2.cat

用法: hadoop fs -cat [-ignoreCrc] URI [URI ...]

將源路徑複製到標準輸出。

選項

  • -ignoreCrc選項禁用校驗和驗證。

例:

  • hadoop fs -cat hdfs://nn1.example.com/file1 hdfs://nn2.example.com/file2
  • hadoop fs -cat file:///file3 /user/hadoop/file4

退出代碼:

成功返回0,錯誤返回-1。

1.3.checksum

用法: hadoop fs -checksum URI

返回文件的校驗和信息。

例:

  • hadoop fs -checksum hdfs://nn1.example.com/file1
  • hadoop fs -checksum file:///etc/hosts

1.4.chgrp

用法:hadoop fs -chgrp [-R] GROUP URI [URI ...]

更改文件的組關聯。用戶必須是文件的所有者,或者是超級用戶。其他信息在 Permissions Guide

選件

  • -R選項將通過目錄結構遞歸進行更改。

1.5.chmod

用法:hadoop fs -chmod [-R] <MODE [,MODE] ... | OCTALMODE> URI [URI ...]

更改文件的權限。使用-R,通過目錄結構遞歸進行更改。用戶必須是文件的所有者,或者是超級用戶。其他信息在Permissions Guide

選件

  • -R選項將通過目錄結構遞歸進行更改。

1.6.wn

用法:hadoop fs -chown [-R] [OWNER] [:[GROUP]] URI [URI]

更改文件的所有者。該用戶必須是超級用戶。其他信息在Permissions Guide

選件

  • -R選項將通過目錄結構遞歸進行更改。

1.7.copyFromLocal

用法:hadoop fs -copyFromLocal <localsrc> URI

與fs -put命令相似,不同之處在於源僅限於本地文件引用。

選項:

  • -p:保留訪問和修改時間,所有權和權限。(假設權限可以在文件系統之間傳播)
  • -f:如果目的地已經存在,則將其覆蓋。
  • -l:允許DataNode將文件延遲保存到磁盤,強制複製因子爲1。此標誌將導致持久性降低。小心使用。
  • -d:跳過後綴爲._COPYING_的臨時文件的創建。

1.8.copyToLocal

用法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>

與get命令類似,除了目標僅限於本地文件引用。

1.9.count

用法:hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] <paths>

計算與指定文件模式匹配的路徑下的目錄,文件和字節數。獲取配額和使用情況。具有-count的輸出列是:DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME

-u和-q選項控制輸出包含哪些列。-q表示顯示配額,-u將輸出限制爲僅顯示配額和使用情況。

具有-count -q的輸出列是:QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME

具有-count -u的輸出列是:QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, PATHNAME

-t選項顯示每種存儲類型的配額和使用情況。如果未給出-u或-q選項,則-t選項將被忽略。可以在-t選項中使用的可能參數的列表(不區分大小寫,但參數“”除外):"", “all”, “ram_disk”, “ssd”, “disk” or “archive”

-h選項以人類可讀的格式顯示大小。

-v選項顯示標題行。

-x選項從結果計算中排除快照。如果沒有-x選項(默認值),則總是從所有INode(包括給定路徑下的所有快照)計算結果。如果指定了-u或-q選項,則-x選項將被忽略。

-e選項顯示每個文件的擦除編碼策略。

具有-count -e的輸出列是:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,ERASURECODING_POLICY,PATHNAME

ERASURECODING_POLICY是文件策略的名稱。如果在該文件上設置了擦除編碼策略,它將返回該策略的名稱。如果未設置擦除編碼策略,它將返回“已複製”,這表示它使用複製存儲策略。

例:

  • 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
  • hadoop fs -count -e hdfs://nn1.example.com/file1

退出代碼:

成功返回0,錯誤返回-1。

1.10.cp

用法:hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>

將文件從源複製到目標。此命令也允許多個源,在這種情況下,目標必須是目錄。

如果(1)源文件系統和目標文件系統支持它們(僅HDFS),並且(2)所有源文件路徑和目標路徑名都在/.reserved/raw層次結構中,則保留'‘raw.*'名稱空間擴展屬性。確定是否保留 raw.* 名稱空間xattrs與-p(保留)標誌無關。

選項:

  • 如果目標已經存在,則-f選項將覆蓋該目標。
  • -p選項將保留文件屬性[topx](timestamps, ownership, permission, ACL, XAttr)。如果-p不帶參數,則保留時間戳,所有權,權限。如果指定了-pa,則還將保留權限,因爲ACL是權限的超集。確定是否保留原始名稱空間擴展屬性與-p標誌無關。

例:

  • hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir

退出代碼:

成功返回0,錯誤返回-1。

1.11.createSnapshot

請參閱《HDFS快照指南》

1.12.deleteSnapshot

請參閱《HDFS快照指南》

1.13.df

用法:hadoop fs -df [-h] URI [URI ...]

顯示可用空間。

選項:

  • -h選項將以“human-readable”的方式格式化文件大小(例如64.0m而不是67108864)

例:

  • hadoop dfs -df /user/hadoop/dir1

1.14.du

用法:hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]

顯示給定目錄中包含的文件和目錄的大小,或僅在文件的情況下顯示文件的長度。

選項:

  • -s選項將導致顯示文件長度的彙總摘要,而不是單個文件的摘要。如果沒有-s選項,則通過從給定路徑深入1級來完成計算。
  • -h選項將以“human-readable”的方式格式化文件大小(例如64.0m而不是67108864)
  • -v選項將列名顯示爲標題行。
  • -x選項將從結果計算中排除快照。如果沒有-x選項(默認值),則總是從所有INode(包括給定路徑下的所有快照)計算結果。

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

退出代碼:

成功返回0,錯誤返回-1。

1.15.dus

用法:hadoop fs -dus <args>

顯示文件長度的摘要。

注意:不推薦使用此命令。而是使用hadoop fs -du -s。

1.16.expunge

用法:hadoop fs -expunge [-immediate]

永久刪除垃圾箱目錄中早於保留閾值的檢查點中的文件,並創建新的檢查點。

創建檢查點時,垃圾桶中最近刪除的文件將移動到檢查點下。下次調用-expunge命令時,檢查點中早於fs.trash.interval的文件將被永久刪除。

如果文件系統支持該功能,則用戶可以配置爲通過存儲爲fs.trash.checkpoint.interval(在core-site.xml中)的參數定期創建和刪除檢查點。該值應小於或等於fs.trash.interval。

如果傳遞了-immediate選項,則將立即刪除垃圾桶中當前用戶的所有文件,而忽略fs.trash.interval設置。

有關HDFS垃圾功能的更多信息,請參閱HDFS體系結構指南

1.17.find

用法:hadoop fs -find <path> ... <expression> ...

查找與指定表達式匹配的所有文件,並對它們應用選定的操作。如果未指定路徑,則默認爲當前工作目錄。如果未指定表達式,則默認爲-print。

可以識別以下主要表達式:

  • -name pattern
    -iname pattern

    如果文件的基本名稱使用標準文件系統全局匹配模式,則評估爲true。如果使用-iname,則匹配不區分大小寫。

  • -print 
    -print0

    始終評估爲true。使當前路徑名寫入標準輸出。如果使用-print0表達式,則將附加ASCII NULL字符。

可以識別以下運算符:

  • expression -a expression
    expression -and expression
    expression expression

    用於連接兩個表達式的邏輯AND運算符。如果兩個子表達式都返回true,則返回true。由兩個表達式的並置暗示,因此不需要明確指定。如果第一個表達式失敗,則第二個表達式將不適用。

例:

hadoop fs -find / -name test -print

退出代碼:

成功返回0,錯誤返回-1。

1.18.get

用法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>

將文件複製到本地文件系統。未通過CRC檢查的文件可以使用-ignorecrc選項進行復制。可以使用-crc選項複製文件和CRC。

例:

  • hadoop fs -get /user/hadoop/file localfile
  • hadoop fs -get hdfs://nn.example.com/user/hadoop/file localfile

退出代碼:

成功返回0,錯誤返回-1。

選項:

  • -p:保留訪問和修改時間,所有權和權限。(假設權限可以在文件系統之間傳播)
  • -f:如果目的地已經存在,則將其覆蓋。
  • -ignorecrc:對下載的文件跳過CRC檢查。
  • -crc:爲下載的文件寫入CRC校驗和。

1.19.getfacl

用法:hadoop fs -getfacl [-R] <path>

顯示文件和目錄的訪問控制列表(ACL)。如果目錄具有默認ACL,則getfacl還將顯示默認ACL。

選項:

  • -R:遞歸列出所有文件和目錄的ACL。
  • path:要列出的文件或目錄。

例子:

  • hadoop fs -getfacl /file
  • hadoop fs -getfacl -R /dir

退出代碼:

成功返回0,錯誤返回非零。

1.20.getfattr

用法:hadoop fs -getfattr [-R] -n name | -d [-e en] <path>

顯示文件或目錄的擴展屬性名稱和值(如果有)。

選項:

  • -R:遞歸列出所有文件和目錄的屬性。
  • -n name:轉儲命名擴展屬性值。
  • -d:轉儲與路徑名關聯的所有擴展屬性值。
  • -e encoding:檢索值後對其進行編碼。有效的編碼爲“text”, “hex”, and “base64”。編碼爲文本字符串的值括在雙引號(")中,編碼爲十六進制和base64的值分別以0x和0s爲前綴。
  • path:文件或目錄。

例子:

  • hadoop fs -getfattr -d /file
  • hadoop fs -getfattr -R -n user.myAttr /dir

退出代碼:

成功返回0,錯誤返回非零。

1.21.getmerge

用法:hadoop fs -getmerge [-nl] <src> <localdst>

將源目錄和目標文件作爲輸入,並將src中的文件串聯到目標本地文件中。可以選擇將-nl設置爲允許在每個文件的末尾添加換行符(LF)。-skip-empty-file可以用於在文件爲空的情況下避免不需要的換行符。

例子:

  • hadoop fs -getmerge -nl /src /opt/output.txt
  • hadoop fs -getmerge -nl /src/file1.txt /src/file2.txt /output.txt

退出代碼:

成功返回0,錯誤返回非零。

1.22.head

用法:hadoop fs -head URI

顯示要輸出的文件的第一個千字節。

例:

  • hadoop fs -head pathname

退出代碼:成功返回0,錯誤返回-1。

1.23.help

用法:hadoop fs -help

返回用法輸出。

1.24.ls

用法:hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>

選項:

  • -C:僅顯示文件和目錄的路徑。
  • -d:目錄被列爲純文件。
  • -h:以人類可讀的格式設置文件大小(例如64.0m而不是67108864)。
  • -q:打印?而不是不可打印的字符。
  • -R:遞歸列出遇到的子目錄。
  • -t:按修改時間對輸出進行排序(最新的優先)。
  • -S:按文件大小排序輸出。
  • -r:反轉排序順序。
  • -u:使用訪問時間而不是修改時間來進行顯示和排序。
  • -e:僅顯示文件和目錄的擦除編碼策略。

對於文件ls以以下格式返回文件的狀態:

permissions number_of_replicas userid groupid filesize modification_date modification_time filename

對於目錄,它返回其直接子級列表,如Unix中一樣。目錄列出爲:

permissions userid groupid modification_date modification_time dirname

默認情況下,目錄中的文件按文件名排序。

例:

  • hadoop fs -ls /user/hadoop/file1
  • hadoop fs -ls -e /ecdir

退出代碼:

成功返回0,錯誤返回-1。

1.25.lsr

用法:hadoop fs -lsr <args>

ls的遞歸版本。

注意:不推薦使用此命令。而是使用hadoop fs -ls -R

1.26.mkdir

用法:hadoop fs -mkdir [-p] <paths>

將路徑uri作爲參數並創建目錄。

選項:

  • -p選項的行爲與Unix mkdir -p非常相似,它會沿着路徑創建父目錄。

例:

  • 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

退出代碼:

成功返回0,錯誤返回-1。

1.27.moveFromLocal

用法:hadoop fs -moveFromLocal <localsrc> <dst>

與put命令類似,不同之處在於複製後將源localsrc刪除。

1.28.moveToLocal

用法:hadoop fs -moveToLocal [-crc] <src> <dst>

顯示“尚未實施”消息。

1.29.mv

用法:hadoop fs -mv URI [URI ...] <dest>

將文件從源移動到目標。此命令還允許多個源,在這種情況下,目標位置必須是目錄。不允許跨文件系統移動文件。

例:

  • 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

退出代碼:

成功返回0,錯誤返回-1。

1.30.put

用法:hadoop fs -put [-f] [-p] [-l] [-d] [ - | <localsrc1> .. ]. <dst>

將單個src或多個src從本地文件系統複製到目標文件系統。如果源設置爲“-”,還從stdin讀取輸入並寫入目標文件系統

如果文件已經存在,則複製失敗,除非指定了-f標誌。

選項:

  • -p:保留訪問和修改時間,所有權和權限。(假設權限可以在文件系統之間傳播)
  • -f:如果目的地已經存在,則將其覆蓋。
  • -l:允許DataNode將文件延遲保存到磁盤,強制複製因子爲1。此標誌將導致持久性降低。小心使用。
  • -d:跳過後綴爲._COPYING_的臨時文件的創建。

例:

  • 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.

退出代碼:

成功返回0,錯誤返回-1。

1.31.renameSnapshot

請參閱《HDFS快照指南》

1.32.rm

用法:hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]

刪除指定爲args的文件。

如果啓用了垃圾桶(trash),則文件系統會將已刪除的文件移至垃圾桶(trash)目錄(由FileSystem#getTrashRoot提供)。

當前,默認情況下禁用垃圾桶(trash)功能。用戶可以通過爲參數fs.trash.interval(在core-site.xml中)設置一個大於零的值來啓用垃圾箱。

有關刪除垃圾桶中文件的信息,請參閱刪除

選項:

  • 如果文件不存在,-f選項將不顯示診斷消息或修改退出狀態以反映錯誤。
  • -R選項以遞歸方式刪除目錄及其下的任何內容。
  • -r選項等效於-R。
  • -skipTrash選項將繞過垃圾桶(如果啓用),並立即刪除指定的文件。當需要從超配額目錄中刪除文件時,這很有用。
  • -safely選項在刪除目錄的文件總數大於hadoop.shell.delete.limit.num.files(在core-site.xml中,默認值爲 100)之前,需要安全確認。它可以與-skipTrash一起使用,以防止意外刪除大目錄。遞歸遍歷大型目錄以計算確認前要刪除的文件數時,會出現延遲。

例:

  • hadoop fs -rm hdfs://nn.example.com/file /user/hadoop/emptydir

退出代碼:

成功返回0,錯誤返回-1。

1.33.rmdir

用法:hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]

刪除目錄。

選項:

  • --ignore-fail-on-non-empty:使用通配符時,如果目錄仍然包含文件,請不要失敗。

例:

  • hadoop fs -rmdir /user/hadoop/emptydir

1.34.rmr

用法:hadoop fs -rmr [-skipTrash] URI [URI ...]

遞歸版本的刪除。

注意:不推薦使用此命令。而是使用hadoop fs -rm -r

1.35.setfacl

用法:hadoop fs -setfacl [-R] [-b |-k -m |-x <acl_spec> <path>] |[--set <acl_spec> <path>]

設置文件和目錄的訪問控制列表(ACL)。

選項:

  • -b:除去基本ACL條目之外的所有條目。保留用戶,組和其他用戶的條目,以與權限位兼容。
  • -k:除去默認的ACL。
  • -R:遞歸地將操作應用於所有文件和目錄。
  • -m:修改ACL。新條目將添加到ACL,並保留現有條目。
  • -x:刪除指定的ACL條目。其他ACL條目將保留。
  • --set:完全替換ACL,丟棄所有現有條目。所述acl_spec必須包括用戶,組條目和其他用於與權限位兼容性。如果ACL規範僅包含訪問條目,則保留現有的默認條目。如果ACL規範僅包含默認條目,則將保留現有訪問條目。如果ACL規範同時包含訪問條目和默認條目,則將兩者都替換。
  • acl_spec:ACL條目的逗號分隔列表。
  • path:要修改的文件或目錄。

例:

  • 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

退出代碼:

成功返回0,錯誤返回非零。

1.36.setfattr

用法:hadoop fs -setfattr -n name [-v value] | -x name <path>

設置文件或目錄的擴展屬性名稱和值。

選項:

  • -n name:擴展屬性名稱。
  • -v value:擴展屬性值。該值有三種不同的編碼方法。如果參數用雙引號引起來,則該值爲引號內的字符串。如果參數以0x或0X爲前綴,則將其視爲十六進制數。如果參數以0s或0S開頭,則將其作爲base64編碼。
  • -x name:刪除擴展屬性。
  • path:文件或目錄。

例子:

  • hadoop fs -setfattr -n user.myAttr -v myValue /file
  • hadoop fs -setfattr -n user.noValue /file
  • hadoop fs -setfattr -x user.myAttr /file

退出代碼:

成功返回0,錯誤返回非零。

1.37.setrep

用法:hadoop fs -setrep [-R] [-w] <numReplicas> <path>

更改文件的複製因子。如果path是目錄,則該命令以遞歸方式更改以path爲根的目錄樹下所有文件的複製因子。執行此命令時,將忽略EC文件。

選項:

  • -w標誌請求命令等待複製完成。這可能會花費很長時間。
  • 接受-R標誌是爲了向後兼容。沒有作用。

例:

  • hadoop fs -setrep -w 3 /user/hadoop/dir1

退出代碼:

成功返回0,錯誤返回-1。

1.38.stat

用法:hadoop fs -stat [format] <path> ...

以指定格式打印有關<path>上文件/目錄的統計信息。格式接受八進制(%a)和符號(%A)的許可,文件大小以字節(%b),類型(%F),所有者的組名(%g),名稱(%n),塊大小(%o) ),複製(%r),所有者(%u)的用戶名,訪問日期(%x,%X)和修改日期(%y,%Y)。%x和%y將UTC日期顯示爲“yyyy-MM-dd HH:mm:ss”,%X和%Y顯示自1970年1月1日以來的毫秒數。如果未指定格式,則默認使用%y。

例:

  • hadoop fs -stat "type:%F perm:%a %u:%g size:%b mtime:%y atime:%x name:%n" /file

退出代碼:成功返回0,錯誤返回-1。

1.39.tail

用法:hadoop fs -tail [-f] URI

顯示要輸出的文件的最後千字節。

選項:

  • 與Unix中一樣,-f選項將隨着文件的增長輸出附加的數據。

例:

  • hadoop fs -tail pathname

退出代碼:成功返回0,錯誤返回-1。

1.40.test

用法:hadoop fs -test -[defswrz] URI

選項:

  • -d:f路徑是目錄,返回0。
  • -e:如果路徑存在,則返回0。
  • -f:如果路徑是文件,則返回0。
  • -s:如果路徑不爲空,則返回0。
  • -w:如果路徑存在並且授予寫許可權,則返回0。
  • -r:如果路徑存在並且授予讀取權限,則返回0。
  • -z:如果文件長度爲零,則返回0。

例:

  • hadoop fs -test -e filename

1.41.text

用法:hadoop fs -text <src>

獲取源文件並以文本格式輸出文件。允許的格式是zip和TextRecordInputStream。

1.42.touch

用法:hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]

將URI指定的文件的訪問和修改時間更新爲當前時間。如果該文件不存在,則會在URI處創建一個零長度的文件,並將當前時間作爲該URI的時間戳。

  • 使用-a選項僅更改訪問時間
  • 使用-m選項僅更改修改時間
  • 使用-t選項指定時間戳記(格式爲yyyyMMddHHmmss)而不是當前時間
  • 如果文件不存在,請使用-c選項不創建文件

時間戳格式如下:* yyyy四位數的年份(例如2018)* MM兩位數字的月份(例如08表示八月)* dd兩位數字的月份(例如01表示每月的第一天)* HH以24小時表示法表示一天中的兩位數小時(例如23代表11 pm,11代表11 am)* mm兩位數字的分鐘* ss分鐘的兩位數字,例如20180809230000表示2018年8月9日,11 pm

例:

  • hadoop fs -touch pathname
  • hadoop fs -touch -m -t 20180809230000 pathname
  • hadoop fs -touch -t 20180809230000 pathname
  • hadoop fs -touch -a pathname

退出代碼:成功返回0,錯誤返回-1。

1.43.touchz

用法:hadoop fs -touchz URI [URI ...]

創建一個零長度的文件。如果文件存在非零長度,則返回錯誤。

例:

  • hadoop fs -touchz pathname

退出代碼:成功返回0,錯誤返回-1。

1.44.truncate

用法:hadoop fs -truncate [-w] <length> <paths>

將與指定文件模式匹配的所有文件截斷爲指定長度。

選項:

  • -w標誌要求命令在必要時等待塊恢復完成。
    如果沒有-w標誌,則在恢復過程中,文件可能會保持關閉狀態一段時間。
    在此期間,無法重新打開文件進行追加。

例:

  • hadoop fs -truncate 55 /user/hadoop/file1 /user/hadoop/file2
  • hadoop fs -truncate -w 127 hdfs://nn1.example.com/user/hadoop/file1

1.45.usage

用法:hadoop fs -usage命令

返回單個命令的幫助。

2.使用對象存儲

Hadoop FileSystem Shell與對象存儲(例如Amazon S3,Azure WASB和OpenStack Swift)一起使用。

# 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://[email protected]/touched

與普通文件系統不同,重命名對象存儲中的文件和目錄通常花費的時間與要處理的對象的大小成比例。由於許多文件系統外殼程序操作都將重命名用作操作的最後階段,因此跳過該階段可以避免長時間的延遲。

特別是,put和copyFromLocal命令都應將-d選項設置爲直接上傳。

# 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://[email protected]/hello.txt

可以下載和查看對象:

# 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://[email protected]/hello.txt /examples

# print the object
hadoop fs -cat wasb://[email protected]/hello.txt

# print the object, unzipping it if necessary
hadoop fs -text wasb://[email protected]/hello.txt

## download log files into a local file
hadoop fs -getmerge wasb://[email protected]/logs\* log.txt

列出許多文件的命令通常比使用HDFS或其他文件系統時要慢得多

hadoop fs -count s3a://bucket/
hadoop fs -du s3a://bucket/

其他慢速命令包括find,mv,cp和rm。

2.1.Find

在提供路徑下有許多目錄的大型商店中,這可能非常慢。

# 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

2.2.Rename

重命名文件的時間取決於其大小。

重命名目錄的時間取決於該目錄下所有文件的數量和大小。

hadoop fs -mv s3a://bucket/datasets s3a://bucket/historical

如果操作被中斷,則對象存儲將處於未定義狀態。

2.3.Copy

hadoop fs -cp s3a://bucket/datasets s3a://bucket/historical

複製操作讀取每個文件,然後將其寫回到對象存儲;完成時間取決於要複製的數據量,以及本地計算機和對象存儲之間雙向的帶寬。

計算機離對象存儲庫越遠,副本花費的時間越長

 

3.Deleting objects

該RM命令刪除對象和目錄滿對象。如果對象存儲最終一致的,則fs ls命令和其他訪問器可能會短暫返回現在刪除的對象的詳細信息;否則,可能會返回錯誤信息。這是無法避免的對象存儲工件。

如果將文件系統客戶端配置爲將文件複製到回收站目錄,則該目錄將位於存儲桶中;該RM那麼操作需要一定的時間正比於數據的大小。此外,刪除的文件將繼續產生存儲費用。

爲避免這種情況,請使用-skipTrash選項。

hadoop fs -rm -skipTrash s3a://bucket/dataset

可以使用expunge命令清除移至.Trash目錄的數據。由於此命令僅適用於默認文件系統,因此必須將其配置爲使默認文件系統成爲目標對象存儲。

hadoop fs -expunge -D fs.defaultFS=s3a://bucket/

4.Overwriting Objects

如果對象存儲最終一致的,那麼覆蓋現有對象的任何操作可能都不立即對所有客戶端/查詢可見。即:查詢相同對象的狀態或內容的後續操作可能會獲取先前的對象。有時,在讀取單個對象時,這可能會出現在同一客戶端中。

避免使用一系列命令覆蓋對象,然後立即處理更新的數據;存在使用以前的數據代替的風險。

5.Timestamps

對象存儲中對象和目錄的時間戳可能不遵循HDFS中文件和目錄的行爲。

  1. 對象的創建和初始修改時間將是在對象存儲庫中創建對象的時間。這將是寫入過程的結尾,而不是開始。
  2. 時間戳將從對象存儲基礎結構的時鐘中獲取,而不是從客戶端獲取。
  3. 如果對象被覆蓋,則修改時間將被更新。
  4. 目錄可能有也可能沒有有效的時間戳。當下面的對象更新時,它們不太可能更新其修改時間。
  5. atime的訪問時間特徵不被任何在Apache Hadoop的代碼庫中找到的對象存儲的支持。

有關如何影響distcp -update操作的詳細信息,請查閱DistCp文檔。

6.安全模型和操作

對象存儲的安全性和權限模型通常與Unix風格的文件系統有很大的不同。查詢或操縱權限的操作通常不受支持。

適用的操作包括:chgrp,chmod,chown,getfacl和setfacl。相關的屬性命令getfattr和setfattr通常也不可用。

  • 列出權限和用戶/組詳細信息的文件系統命令通常模擬這些詳細信息。

  • 嘗試保留權限的操作(例如fs -put -p)因此不會保留權限。(特殊情況: wasb://,保留權限但不強制執行權限)。

與只讀對象存儲庫交互時,在“列表”和“狀態”命令中找到的權限可能表明用戶具有寫訪問權,而實際上卻沒有。

對象存儲通常具有自己的權限模型,可以通過特定於存儲的工具來操縱模型。請注意,對象存儲可能提供的某些權限(例如,只寫路徑或根路徑上的不同權限)可能與Hadoop文件系統客戶端不兼容。這些趨向於要求對他們向其中寫入數據的整個對象存儲桶/容器具有完全的讀取和寫入訪問權限。

作爲如何模擬權限的示例,以下是亞馬遜的公共,只讀存儲區的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
  1. 列出的所有文件均具有完全的讀取/寫入權限。
  2. 所有目錄似乎都具有完整的rwx權限。
  3. 所有文件的複製計數爲“ 1”。
  4. 所有文件和目錄的所有者都聲明爲當前用戶(mapred)。
  5. 所有目錄的時間戳實際上是執行-ls操作的時間戳。這是因爲這些目錄不是商店中的實際對象。它們是基於其路徑下對象的存在而模擬的目錄。

嘗試刪除其中一個文件時,該操作失敗-儘管ls命令顯示了權限:

$ 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=

這表明列出的權限不能被視爲寫訪問權限的證據;只有對象操作才能確定這一點。

請注意,Microsoft Azure WASB文件系統確實允許設置和檢查權限,但是實際上並未強制執行權限。此功能提供了使用DistCp備份HDFS目錄樹的功能,保留了其權限,並且在將目錄複製回HDFS時可以恢復權限。但是,爲了保護對對象存儲中數據的訪問,必須使用 Azure 自己的模型和工具

7.有限值的命令

這是通常無效的shell命令列表,並且實際上可能會失敗。

appendToFile 通常不受支持
校驗和 通常的校驗和是“無”
chgrp 通常不支持的權限模型;無操作
chmod 通常不支持的權限模型;無操作
wn 通常不支持的權限模型;無操作
createSnapshot 通常不受支持
deleteSnapshot 通常不受支持
df 通常顯示默認值
getfacl 可能支持或可能不支持
getfattr 普遍支持
重命名快照 通常不受支持
Setfacl 通常不受支持的權限模型
setfattr 通常不受支持的權限模型
setrep 沒有效果
截短 通常不受支持
command limitations
appendToFile 通常不受支持
checksum 通常的校驗和是“NONE
chgrp 通常不支持的權限模型;無操作no-op
chmod 通常不支持的權限模型;無操作no-op
chown 通常不支持的權限模型;無操作no-op
createSnapshot 通常不受支持
deleteSnapshot 通常不受支持
df 通常顯示默認值
getfacl 可能支持或可能不支持
getfattr 普遍支持
renameSnapshot 通常不受支持
setfacl 通常不受支持的權限模型
setfattr 通常不受支持的權限模型
setrep 沒有效果
truncate 通常不受支持

不同的對象存儲客戶端可能支持以下命令:請查閱文檔並針對目標存儲進行測試。

 

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