Hadoop: FileSystem Shell

栏目: 服务器 · 发布时间: 5年前

内容简介:文件系统(FS)shell包括各种类似shell的命令,这些命令直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统交互,例如本地FS,HFTP FS,S3 FS等。FS shell由以下方式调用:所有FS shell命令都将路径URI作为参数。URI格式为FS shell中的大多数命令都表现得像对应的Unix命令。使用每个命令描述差异。错误信息发送到stderr,输出发送到stdout。

文件系统(FS)shell包括各种类似 shell 的命令,这些命令直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统交互,例如本地FS,HFTP FS,S3 FS等。FS shell由以下方式调用:

bin/hadoop fs <args>

所有FS shell命令都将路径URI作为参数。URI格式为 scheme:// authority / path 。对于HDFS,方案是 hdfs ,对于本地FS,方案是 文件 。该计划和权限是可选的。如果未指定,则使用配置中指定的默认方案。可以将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 目录。

有关通用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

退出代码:

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

cat

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

将源路径复制到stdout。

选项

  • -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 [<存储类型>]] [-u] <路径>

计算与指定文件模式匹配的路径下的目录,文件和字节数。获取配额和使用情况。-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。 namespace 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>

显示文件长度的摘要。

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

expunge

用法: hadoop fs -expunge

从trash目录中永久删除早于保留阈值的检查点中的文件,并创建新的检查点。

创建检查点时,垃圾箱中最近删除的文件将移动到检查点下。早于 fs.trash.interval的 检查点中的文件将在下次调用 -expunge 命令时被永久删除。

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

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

find

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

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

识别以下主要表达式:

  • -name pattern

    -iname pattern

    如果文件的基名与使用标准文件系统通配符的模式匹配,则求值为true。如果使用-iname,则匹配不区分大小写。

  • -print

    -print0

    始终评估为true。导致将当前路径名写入标准输出。如果使用-print0表达式,则附加ASCII NULL字符。

识别以下运算符:

  • 表达式-a表达式

    表达式和表达式

    表达式表达式

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

例:

hadoop fs -find / -name test -print

退出代码:

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

get

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

将文件复制到本地文件系统。可以使用-ignorecrc选项复制CRC校验失败的文件。可以使用-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

getfacl

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

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

选项:

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

例子:

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:转储与pathname关联的所有扩展属性值。
  • -e encoding :检索后 对代码 值进行编码。有效编码为“text”,“hex”和“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使用以下格式返回文件的stat:

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的递归版本。

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

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

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从本地文件系统复制到目标文件系统。如果源设置为“ - ”,还从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

退出代码:

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

renameSnapshot

请参阅“ HDFS快照指南”

rm

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

删除指定为args的文件。

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

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

请参阅 删除 有关删除垃圾箱中文件的信息。

选项:

hadoop.shell.delete.limit.num.files

例:

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

退出代码:

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

rmdir

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

删除目录。

选项:

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

例:

  • hadoop fs -rmdir / user / hadoop / emptydir

rmr

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

删除的递归版本。

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

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_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:rx / dir
hadoop fs -setfacl -m default:user:hadoop:rx / dir

退出代码:

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

setfattr

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

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

选项:

  • -n name:扩展属性名称。
  • -v value:扩展属性值。该值有三种不同的编码方法。如果参数用双引号括起来,那么值就是引号内的字符串。如果参数的前缀为0x或0X,则将其视为十六进制数。如果参数以0或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,错误时返回非零。

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 [格式] <路径> ...

以指定格式打印有关 的文件/目录的统计信息。格式接受八进制(%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。

例:

  • hadoop fs -test -e filename

text

用法: hadoop fs -text <src>

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

touchz

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

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

例:

  • hadoop fs -touchz pathname

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

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

usage

用法: hadoop fs -usage命令

返回单个命令的帮助。

使用对象存储

Hadoop FileSystem shell可与Object Stores(如Amazon S3,Azure WASB和OpenStack Swift)配合使用。

#创建一个目录
hadoop fs -mkdir s3a:// bucket / datasets /

#从群集文件系统上传文件
hadoop fs -put /datasets/example.orc s3a:// bucket / datasets /

#触摸文件
hadoop fs -touchz wasb://yourcontainer@youraccount.blob.core.windows.net/touched

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

特别是, putcopyFromLocal 命令都应该为直接上载设置 -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

可以下载和查看对象:

#将目录复制到本地文件系统
hadoop fs -copyToLocal s3a:// bucket / datasets /

#将文件从对象库复制到集群文件系统。
hadoop fs -get wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt / examples

#打印对象
hadoop fs -cat wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt

#打印对象,必要时解压缩
hadoop fs -text wasb://yourcontainer@youraccount.blob.core.windows.net/hello.txt

##将日志文件下载到本地文件中
hadoop fs -getmerge wasb://yourcontainer@youraccount.blob.core.windows.net/logs \ * log.txt

列出许多文件的命令往往比使用HDFS或其他文件系统时慢得多

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

其他慢速命令包括 findmvcprm

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 命令删除对象和目录满对象。如果对象存储 最终一致的 ,则 fs ls 命令和其他访问器可能会暂时返回现在删除的对象的详细信息; 这是对象存储的工件,无法避免。

如果文件系统客户端配置为将文件复制到废纸篓目录,则该文件系统将位于存储桶中; 然后, rm 操作将花费与数据大小成比例的时间。此外,删除的文件将继续产生存储成本。

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

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

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

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

覆盖对象

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

避免使用一系列覆盖对象的命令,然后立即处理更新的数据; 存在以下风险:将使用先前的数据。

时间戳

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

atime的

有关这可能如何影响 distcp -update 操作的详细信息,请参阅 DistCp 文档。

安全模型和操作

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

适用的操作包括: chgrpchmodchowngetfaclsetfacl 。相关属性命令 getfattrsetfattr 通常也不可用。

  • 列出权限和用户/组详细信息的文件系统命令通常模拟这些详细信息。
  • 尝试保留权限的操作(例如 fs -put -p )不会因此原因保留权限。(特例: wasb:// ,它保留权限但不强制执行)。

当与只读对象存储交互时,“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
rwx
mapred
-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 自己的模型和工具

Commands of limited value

以下是通常没有效果的shell命令列表 - 实际上可能会失败。

command limitations
appendToFile generally unsupported
checksum the usual checksum is “NONE”
chgrp generally unsupported permissions model; no-op
chmod generally unsupported permissions model; no-op
chown generally unsupported permissions model; no-op
createSnapshot generally unsupported
deleteSnapshot generally unsupported
df default values are normally displayed
getfacl may or may not be supported
getfattr generally supported
renameSnapshot generally unsupported
setfacl generally unsupported permissions model
setfattr generally unsupported permissions model
setrep has no effect
truncate generally unsupported

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

《电脑报》2005年合订本(上下)

《电脑报》2005年合订本(上下)

电脑报社主编 / 西南师范大学出版社 / 2006-1 / 45.00元

全套上、下两册,浓缩2005年电脑报精华文章;附录包含70余篇简明IT应用指南,涵盖软件、硬件、数码、网络四大领域,配赠权威实用的2005-2006中国计算机年鉴光盘,近1.4GB海量信息与资源超值奉献,提供2005-2006全系列硬件、数码产品资讯,兼具知识性与资料性,连结购买每年《电脑报合订本》,你将拥有一套完整的实用大型电脑文库。一起来看看 《《电脑报》2005年合订本(上下)》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具