Hadoop 文件系统命令

翻译: http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/FileSystemShell.html
版本: 2.9.0

概观

文件系统(FS)shell包含各种类似shell的命令,可直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统(如Local FS,HFTP FS,S3 FS等)进行交互。FS 命令的调用方式如下:

bin/hadoop fs <args>

所有FS shell命令都将路径URI作为参数。URI格式是scheme://authority/path. 。对于HDFS,方案是 hdfs ,而对于本地FS,方案是 file 。该scheme 和authority是可选的。如果未指定,则使用在配置中指定的默认方案。在HDFS文件系统中,像/ parent / child这样的文件或目录可以被指定为hdfs://namenodehost/parent/child 或者简单地指定为 /parent/child (假设你的配置设置为 hdfs://namenodehost)。

FS shell中的大多数命令都像对应的Unix命令一样。每个命令都会描述差异。错误信息发送到stderr,输出发送到stdout。

如果正在使用HDFS,则 hdfs dfs 是同义词。

可以使用相对路径。对于HDFS,当前工作目录是通常必须手动创建的/user/<username>。HDFS主目录也可以隐式访问,例如,当使用HDFS垃圾文件夹时, .Trash 目录在主目录中。

有关通用shell选项的信息,请参见命令手册

appendToFile

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

将单个src或多个srcs从本地文件系统追加到目标文件系统。也从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。

cat

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

将源路径复制到标准输出。

选项

  • 该-ignoreCrc 选项禁用checkshum验证。

例:

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

退出代码:

成功时返回0,错误时返回-1。

checksum

用法:hadoop fs -checksum URI

返回文件的校验和信息。

例:

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

chgrp

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

更改文件的组关联。用户必须是文件的所有者,否则是超级用户。其他信息在“ 权限指南”中

选项

  • -R选项将通过目录结构递归地进行更改。

chmod

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

更改文件的权限。使用-R,通过目录结构递归地进行更改。用户必须是文件的所有者,否则是超级用户。其他信息在“ 权限指南”中

选项

  • -R选项将通过目录结构递归地进行更改。

chown

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

更改文件的所有者。用户必须是超级用户。其他信息在“ 权限指南”中

选项

  • -R选项将通过目录结构递归地进行更改。

copyFromLocal

用法:hadoop fs -copyFromLocal <localsrc> URI

与 fs -put 命令类似,只是源限制为本地文件引用。

选项:

  • -p :保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)
  • -f :覆盖目标,如果它已经存在。
  • -l :允许DataNode延迟将文件保存到磁盘,强制复制因子为1.此标志将导致耐久性降低。小心使用。
  • -d :跳过创建后缀为 .COPYING 的临时文件。

copyToLocal

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

与get命令类似,但目标仅限于本地文件引用。

count

用法:hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] <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”或“archive”以外不区分大小写。

-h选项以可读格式显示大小。

-v选项显示标题行。

-x选项排除结果计算中的快照。如果没有-x选项(默认),结果将始终从所有INode计算得出,包括给定路径下的所有快照。如果给出-u或-q选项,则忽略-x选项。

例:

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

退出代码:

成功时返回0,错误时返回-1。

cp

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

将文件从源复制到目标。该命令也允许多个源,在这种情况下,目标必须是目录。

如果(1)源文件系统和目标文件系统支持它们(仅限HDFS),并且(2)所有源和目标路径名都位于/.reserved/raw层次结构中,则'raw。'命名空间扩展属性将被保留。确定是否保留raw。名称空间xattrs独立于-p(保留)标志。

选项:

  • 如果它已经存在,-f选项将覆盖目标。
  • -p选项将保留文件属性[topx](时间戳,所有权,权限,ACL,XAttr)。如果-p指定不带arg,则保留时间戳,所有权和权限。如果指定了-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。

createSnapshot

请参阅HDFS快照指南

deleteSnapshot

请参阅HDFS快照指南

df

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

显示可用空间。

选项:

  • -h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)

例:

  • hadoop dfs -df / user / hadoop / dir1

du

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

显示给定目录中包含的文件和目录的大小,或者文件的长度。

选项:

  • -s选项将导致显示文件长度的汇总摘要,而不是单个文件。如果没有-s选项,计算是通过从给定路径进入1级深度完成的。
  • -h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)
  • -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。

dus

用法:hadoop fs -dus <args>

显示文件长度的摘要。

注意:此命令已弃用。而是使用<tt>hadoop fs -du -s</tt>。

expunge

用法:hadoop fs -expunge

永久删除比垃圾目录中的保留阈值更早的检查点中的文件,并创建新的检查点。

当创建检查点时,垃圾桶中最近删除的文件将在检查点下移动。在下一次调用<tt>-expunge</tt>命令时,检查点中比<tt>fs.trash.interval</tt>更早的文件将被永久删除。

如果文件系统支持该功能,则用户可以配置为通过以 fs.trash.checkpoint.interval (在core-site.xml中)存储的参数定期创建和删除检查点。该值应该小于或等于 fs.trash.interval 。

有关HDFS的垃圾功能的更多信息,请参阅HDFS体系结构指南

find

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

查找与指定表达式匹配的所有文件并将选定的操作应用于它们。如果没有指定路径,则默认为当前工作目录。如果未指定表达式,则默认为-print。

以下主要表达式被识别:

  • -name 模式
    -iname 模式

    如果文件的基本名称与使用标准文件系统匹配的模式匹配,则评估为true。如果使用-iname,则匹配不区分大小写。

  • -print
    -print0

    总是评估为真。使当前路径名写入标准输出。如果使用-print0表达式,则会附加ASCII NULL字符。

以下操作符被认可:

  • expression -a expression
    expression -and expression
    expression expression

    用于连接两个表达式的逻辑AND运算符。如果两个子表达式都返回true,则返回true。由两个表达式的并置所暗示,因此不需要明确指定。如果第一个表达式失败,则不会应用第二个表达式。

例:

hadoop fs -find / -name test -print

退出代码:

成功时返回0,错误时返回-1。

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。

选项:

  • <tt>-p</tt>:保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)
  • <tt>-f</tt>:覆盖目标,如果它已经存在。
  • <tt>-ignorecrc</tt>:跳过对下载的文件进行CRC校验。
  • <tt>-crc</tt>:为下载的文件写入CRC校验和。

getfacl

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

显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl也会显示默认ACL。

选项:

  • -R:递归列出所有文件和目录的ACL。
  • 路径:要列出的文件或目录。

例子:

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

退出代码:

成功时返回0,错误时返回非零值。

getfattr

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

显示文件或目录的扩展属性名称和值(如果有)。

选项:

  • -R:递归列出所有文件和目录的属性。
  • -n name:转储指定的扩展属性值。
  • -d:转储与路径名关联的所有扩展属性值。
  • -e encoding:检索后对其进行编码。有效的编码是“文本”,“十六进制”和“base64”。编码为文本字符串的值用双引号(“)括起来,编码为十六进制和base64的值分别以0x和0作为前缀。
  • path:文件或目录。

例子:

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

退出代码:

成功时返回0,错误时返回非零值。

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,错误时返回非零值。

help

用法: hadoop fs -help

返回使用输出。

ls

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

选项:

  • -C:仅显示文件和目录的路径。
  • -d:目录被列为纯文件。
  • -h:以人类可读的方式格式化文件大小(例如64.0m而不是67108864)。
  • -q:打印?而不是不可打印的字符。
  • -R:递归列出遇到的子目录。
  • -t:按修改时间排序输出(最近的第一个)。
  • -S:按文件大小排序输出。
  • -r:反转排序顺序。
  • -u:使用访问时间而不是修改时间进行显示和排序。

对于文件,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

退出代码:

成功时返回0,错误时返回-1。

lsr

用法: hadoop fs -lsr <args>

ls的递归版本。

注意:此命令已弃用。而是使用<tt>hadoop fs -ls -R</tt>

mkdir

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

以路径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。

moveFromLocal

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

与put命令类似,区别在于源localsrc在复制后被删除。

moveToLocal

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

显示“尚未实施”消息。

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。

put

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

将单个src或多个srcs从本地文件系统复制到目标文件系统。如果源设置为“ - ”,还从标准输入读取输入并写入目标文件系统

如果文件已经存在,则复制失败,除非给出-f标志。

选项:

  • <tt>-p</tt>:保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)
  • <tt>-f</tt>:覆盖目标,如果它已经存在。
  • <tt>-l</tt>:允许DataNode延迟将文件保存到磁盘,强制复制因子为1.此标志将导致耐久性降低。小心使用。
  • <tt>-d</tt>:跳过创建后缀为<tt>.COPYING</tt>的临时文件。

例子:

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。

renameSnapshot

请参阅HDFS快照指南

rm

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

删除指定为args的文件。

如果启用垃圾箱,文件系统会将删除的文件移动到垃圾目录(由FileSystem#getTrashRoot提供)。

目前,垃圾功能默认是禁用的。用户可以通过为参数<tt>fs.trash.interval</tt>(在core-site.xml中)设置大于零的值来启用垃圾桶。

请参阅删除垃圾桶中的文件。

选项:

  • 如果文件不存在,-f选项将不显示诊断消息或修改退出状态以反映错误。
  • -R选项递归删除目录及其下的任何内容。
  • -r选项等同于-R。
  • -skipTrash选项将绕过垃圾箱(如果启用),并立即删除指定的文件。当需要从超配额目录中删除文件时,这会很有用。
  • 在删除大于 hadoop.shell.delete.limit.num.files (在core-site.xml中,缺省值为 100)的文件总数之前,-safely选项需要安全确认。它可以与-skipTrash一起使用,以防止意外删除大型目录。预计在递归查看大目录以计算要确认之前要删除的文件数量时,会出现延迟。

例:

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

退出代码:

成功时返回0,错误时返回-1。

rmdir

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

删除一个目录。

选项:

  • --ignore-fail-on-non-empty :使用通配符时,如果目录仍包含文件,请不要失败。

例:

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

设置文件和目录的访问控制列表(ACL)。

选项:

  • -b:删除除基本ACL条目以外的所有条目。为了与许可位兼容,用户,组和其他条目保留。
  • -k:删除默认ACL。
  • -R:递归地将操作应用于所有文件和目录。
  • -m:修改ACL。新条目添加到ACL中,并保留现有条目。
  • -x:删除指定的ACL条目。其他ACL条目被保留。
  • <tt>--set</tt>:完全替换ACL,丢弃所有现有条目。所述acl_spec必须包括用户,组条目和其他用于与权限位兼容性。
  • acl_spec:逗号分隔的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

退出代码:

成功时返回0,错误时返回非零值。

setfattr

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

为文件或目录设置扩展属性名称和值。

选项:

  • -n名称:扩展属性名称。
  • -v value:扩展属性值。该值有三种不同的编码方法。如果参数用双引号引起来,那么值就是引号内的字符串。如果参数的前缀为0x或0X,则将其视为十六进制数字。如果参数以0或0S开始,那么它被视为base64编码。
  • -x名称:删除扩展属性。
  • 路径:文件或目录。

例子:

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

退出代码:

成功时返回0,错误时返回非零值。

setrep

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

更改文件的复制因子。如果path是一个目录,那么该命令会递归地更改以path为根的目录树下的所有文件的复制因子。

选项:

  • -w标志请求该命令等待复制完成。这可能需要很长时间。
  • -R标志被接受用于向后兼容。它没有效果。

例:

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

退出代码:

成功时返回0,错误时返回-1。

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日UTC以来的毫秒数。如果未指定格式,则默认使用%y。

例:

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

退出代码:成功时返回0,错误时返回-1。

tail

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

将文件的最后一个千字节显示到stdout。

选项:

  • 随着文件的增长,-f选项将输出附加数据,就像在Unix中一样。

例:

  • hadoop fs -tail路径名

退出代码:成功时返回0,错误时返回-1。

test

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

选项:

  • -d:f路径是一个目录,返回0。
  • -e:如果路径存在,则返回0。
  • -f:如果路径是文件,则返回0。
  • -s:如果路径不为空,则返回0。
  • -r:如果路径存在并且授予读取权限,则返回0。
  • -w:如果路径存在并且写入权限被授予,则返回0。
  • -z:如果文件长度为零,则返回0。

例:

  • <tt>hadoop fs -test -e文件名</tt>

text

用法: hadoop fs -text <src>

采用源文件并以文本格式输出文件。允许的格式是zip和TextRecordInputStream。

touchz

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

创建一个零长度的文件。如果文件存在且长度非零,则返回错误。

例:

  • <tt>hadoop fs -touchz路径名</tt>

退出代码:成功时返回0,错误时返回-1。

truncate

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

将与指定文件模式匹配的所有文件截断为指定的长度。

选项:

  • 该<tt>-w</tt>标志的要求,对块恢复命令如有必要,等待完成。没有-w标志的文件可能在恢复过程中一段时间​​内保持未关闭状态。在此期间文件不能重新打开以便追加。

例:

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>

返回单个命令的帮助。

使用对象存储

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://yourcontainer@youraccount.blob.core.windows.net/touched

与普通文件系统不同,重命名对象存储中的文件和目录通常需要与被操作对象的大小成比例的时间。由于许多文件系统shell操作使用重命名作为操作的最后阶段,跳过该阶段可以避免长时间的延迟。

特别是, 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://yourcontainer@youraccount.blob.core.windows.net/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://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或其他文件系统时慢得多

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

其他慢速命令包括<tt>find</tt>,<tt>mv</tt>,<tt>cp</tt>和<tt>rm</tt>。

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

Rename

重命名文件的时间取决于其大小。

重命名目录的时间取决于该目录下所有文件的数量和大小。
hadoop fs -mv s3a://bucket/datasets s3a://bucket/historical

如果操作中断,对象存储将处于未定义状态。

Copy

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

复制操作读取每个文件,然后将其写回对象存储; 完成的时间取决于要复制的数据量以及本地计算机和对象存储之间的双向带宽。

计算机离对象存储区越远,复制时间越长

删除对象

rm命令删除对象和目录对象。如果对象存储最终保持一致,则<tt>fs ls</tt>命令和其他访问器可能会简要地返回现在删除的对象的详细信息; 这是无法避免的对象存储的人工产物。

如果文件系统客户端配置为将文件复制到垃圾目录,则这将位于存储桶中; 那么<tt>rm</tt>操作将花费与数据大小成正比的时间。此外,被删除的文件将继续产生存储成本。

要避免这种情况,请使用<tt>-skipTrash</tt>选项。

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

移动到<tt>.Trash</tt>目录的数据可以使用<tt>expunge</tt>命令进行<tt>清除</tt>。由于此命令仅适用于默认文件系统,因此必须将其配置为使默认文件系统成为目标对象存储区。

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

覆盖对象

如果对象存储最终一致的,那么覆盖现有对象的任何操作可能不会立即对所有客户/查询可见。即:查询同一对象的状态或内容的后续操作可能会获得先前的对象。这有时可以在同一个客户端中,同时读取单个对象。

避免有一系列覆盖对象然后立即处理更新数据的命令; 有可能会使用以前的数据。

时间戳

对象库中对象和目录的时间戳可能不遵循HDFS中文件和目录的行为。

  1. 对象的创建和初始修改时间将是它在对象存储上创建的时间; 这将在编写过程结束时,而不是开始。
  2. 时间戳将取自对象存储基础架构的时钟,而不是客户端的时钟。
  3. 如果一个对象被覆盖,修改时间将被更新。
  4. 目录可能有也可能没有有效的时间戳。当更新下面的对象时,他们不可能更新其修改时间。
  5. 该<tt>atime的</tt>访问时间特征不被任何在Apache Hadoop的代码库中找到的对象存储的支持。

请查阅<tt>DistCp</tt>文档以获取有关这可能如何影响<tt>distcp -update</tt>操作的详细信息。

安全模型和操作

对象库的安全和权限模型通常与Unix风格的文件系统的安全和权限模型非常不同; 查询或操作权限的操作通常不受支持。

适用的操作包括:chgrp, chmod, chown, getfacl, and setfacl.。相关的属性命令<tt>getfattr</tt>和<tt>setfattr</tt>通常也不可用。

  • 列出权限和用户/组详细信息的文件系统命令通常模拟这些细节。

  • 尝试保留权限的操作(例如<tt>fs -put -p</tt>)不会因此原因保留权限。(特例:<tt>wasb://</tt>,保留权限但不强制执行)。

当与只读对象存储进行交互时,“list”和“stat”命令中的权限可能表明用户具有写入权限,但事实上他们不具有写权限。

对象商店通常拥有自己的权限模型,模型可以通过特定于商店的工具进行操纵。请注意,对象存储可能提供的某些权限(例如只写路径或根路径上的不同权限)可能与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. 所有目录似乎都具有完整的<tt>rwx</tt>权限。
  3. 所有文件的复制计数为“1”。
  4. 所有文件和目录的所有者被声明为当前用户(<tt>mapred</tt>)。
  5. 所有目录的时间戳实际上是<tt>-ls</tt>操作执行的时间。这是因为这些目录不是商店中的实际对象; 它们是基于其路径下存在对象的模拟目录。

当试图删除其中一个文件时,操作失败 - 尽管<tt>ls</tt>命令显示的权限如下:

$ 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 自己的模型和工具

价值有限的命令

以下是通常不起作用的shell命令列表 - 可能实际上会失败。


图片.png

不同的对象存储客户端可能支持这些命令:请参考文档并针对目标商店进行测试。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容