内容简介:文件系统(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 [格式] <路径> ...
以指定格式打印有关
例:
-
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操作使用重命名作为操作的最后阶段,因此跳过该阶段可以避免长时间的延迟。
特别是, 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
可以下载和查看对象:
#将目录复制到本地文件系统 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/
其他慢速命令包括 find
, mv
, cp
和 rm
。
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风格的文件系统非常不同; 查询或操纵权限的操作通常不受支持。
适用的操作包括: chgrp
, chmod
, chown
, getfacl
和 setfacl
。相关属性命令 getfattr
和 setfattr
通常也不可用。
- 列出权限和用户/组详细信息的文件系统命令通常模拟这些详细信息。
-
尝试保留权限的操作(例如
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 |
不同的对象存储客户端 可能 支持这些命令:请查阅文档并针对目标存储进行测试。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法概论
Sanjoy Dasgupta、Christos Papadimitriou、Umesh Vazirani / 钱枫 注、邹恒明 注 / 机械工业出版社 / 2009-1 / 55.00元
《算法概论(注释版)》源自加州大学伯克利分校和加州大学圣迭戈分校本科生的算法课讲义,以独特的视角展现了算法设计的精巧技术及魅力。在表达每一种技术时,强调每个算法背后的简洁数学思想,分析其时间和空间效率,运用与其他技术类比的方法来说明特征,并提供了大量实例。《算法概论(注释版)》以人类最古老的算法(算术运算)为起点,将各种算法中优美而有代表性的内容囊括书中,并以最前沿的理论(量子算法)结束,构成了较......一起来看看 《算法概论》 这本书的介绍吧!