文件系统(FS)shell包括各种类似shell的命令,它们直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统交互,例如Local FS,WebHDFS,S3 FS等。FS shell由以下方式调用:
bin/hadoop fs
所有FS shell命令都将路径URI作为参数。URI格式是 scheme://authority/path 。对于HDFS,scheme 是hdfs,对于本地FS,scheme是file。该scheme和authority是可选的。如果未指定,则使用配置中指定的默认方案。可以将HDFS文件或目录(例如/parent/child)指定为hdfs://namenodehost/parent/child 或简单地指定为/parent/child (假设您的配置设置为指向hdfs//namenodehost)。
FS shell中的大多数命令都表现得像对应的Unix命令。使用每个命令描述差异。错误信息发送到stderr,输出发送到stdout。
如果正在使用HDFS,则hdfs dfs是同义词。
可以使用相对路径。对于HDFS,当前工作目录是HDFS主目录/user/
有关通用shell选项,请参阅命令手册。
用法: hadoop fs -appendToFile
将单个src或多个srcs从本地文件系统附加到目标文件系统。还从stdin读取输入并附加到目标文件系统。
Exit Code:
Returns 0 on success and 1 on error.
用法:hadoop fs -cat [-ignoreCrc] URI [URI ...]
将源路径 复制到mstdout。
选项
Example:
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -checksum URI
返回文件的校验和信息。
例:
用法:hadoop fs -chgrp [-R] GROUP URI [URI ...]
更改文件的组关联。用户必须是文件的所有者,否则必须是超级用户。其他信息在“ 权限指南”中。
选项
用法:hadoop fs -chmod [-R]
更改文件的权限。使用 -R,通过目录结构递归更改。用户必须是文件的所有者,否则必须是超级用户。其他信息在“ 权限指南”中。
选项
用法:hadoop fs -chown [-R] [OWNER] [:[GROUP]] URI [URI]
更改文件的所有者。用户必须是超级用户。其他信息在“ 权限指南”中。
选项
用法:hadoop fs -copyFromLocal
与fs -put命令类似,但源仅限于本地文件引用。
选项:
用法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI
与get命令类似,但目标仅限于本地文件引用。
用法: hadoop fs -count [-q] [-h] [-v] [-x] [-t [
计算与指定文件模式匹配的路径下的目录,文件和字节数。获取配额和使用情况。-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选项。
-e选项显示每个文件的擦除编码策略。
-count -e的输出列为:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,ERASURECODING_POLICY,PATHNAME
ERASURECODING_POLICY是文件策略的名称。如果在该文件上设置了擦除编码策略,则它将返回策略的名称。如果未设置擦除编码策略,则将返回“已复制”,这意味着它使用复制存储策略。
Example:
Exit Code:
Returns 0 on success and -1 on error.
cp
用法:hadoop fs -cp [-f] [-p | -p [topax]] URI [URI ...]
将文件从源复制到目标。此命令也允许多个源,在这种情况下,目标必须是目录。
如果(1)源文件系统和目标文件系统支持它们(仅限HDFS),并且(2)所有源和目标路径名都在/.reserved/raw层次结构中,则保留'raw。*'命名空间扩展属性。是否保留raw。* namespace xattrs的确定与-p(保留)标志无关。
Options:
Example:
Exit Code:
Returns 0 on success and -1 on error.
请参阅“ HDFS快照指南”。
请参阅“ HDFS快照指南”。
用法:hadoop fs -df [-h] URI [URI ...]
显示可用空间。
选项:
例:
用法:hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]
显示给定目录中包含的文件和目录的大小或文件的长度,以防它只是一个文件。
选项:
du返回三列,格式如下:
size disk_space_consumed_with_all_replicas full_path_name
Example:
Exit Code: Returns 0 on success and -1 on error.
用法:hadoop fs -dus
显示文件长度的摘要。
注意:不推荐使用此命令。而是使用hadoop fs -du -s。
用法:hadoop fs -expunge
从trash目录中永久删除早于保留阈值的检查点中的文件,并创建新的检查点。
创建检查点时,垃圾箱中最近删除的文件将移动到检查点下。早于fs.trash.interval的检查点中的文件将在下次调用-expunge命令时被永久删除。
如果文件系统支持该功能,则用户可以配置为通过存储为fs.trash.checkpoint.interval(在core-site.xml中)的参数定期创建和删除检查点。该值应小于或等于fs.trash.interval。
有关HDFS垃圾功能的更多信息,请参阅HDFS体系结构指南。
用法:hadoop fs -find
查找与指定表达式匹配的所有文件,并将选定的操作应用于它们。如果未指定路径,则默认为当前工作目录。如果未指定表达式,则默认为-print。
识别以下主要表达式:
-name pattern
-iname pattern
如果文件的基名与使用标准文件系统globbing的模式匹配,则求值为true。如果使用-iname,则匹配不区分大小写。
-print
-print0
始终评估为true。使当前路径名写入标准输出。如果使用-print0表达式,则附加ASCII NULL字符。
以下操作得到承认:
例:
hadoop fs -find / -name test -print
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f]
将文件复制到本地文件系统。可以使用-ignorecrc选项复制CRC校验失败的文件。可以使用-crc选项复制文件和CRC。
Example:
Exit Code:
Returns 0 on success and -1 on error.
选项:
用法:hadoop fs -getfacl [-R]
显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl还会显示默认ACL。
选项:
Examples:
Exit Code:
Returns 0 on success and non-zero on error.
用法:hadoop fs -getfattr [-R] -n name | -d [-e en]
显示文件或目录的扩展属性名称和值(如果有)。
选项:
Examples:
Exit Code:
Returns 0 on success and non-zero on error.
用法:hadoop fs -getmerge [-nl]
将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件。可选地,-nl可以设置为允许在每个文件的末尾添加换行符(LF)。-skip-empty-file可用于在空文件的情况下避免不需要的换行符。
Examples:
Exit Code:
Returns 0 on success and non-zero on error.
用法:hadoop fs -head URI
显示文件的第一个千字节到stdout。
Example:
Exit Code: Returns 0 on success and -1 on error.
用法:hadoop fs -help
返回使用量输出。
用法:hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e]
选项:
对于文件,ls使用以下格式返回文件的stat:
permissions number_of_replicas userid groupid filesize modification_date modification_time filename
对于目录,它返回其直接子节点的列表,如在Unix中。目录列为:
permissions userid groupid modification_date modification_time dirname
默认情况下,目录中的文件按文件名排序。
Example:
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -lsr
ls的递归版本。
注意:不推荐使用此命令。而是使用hadoop fs -ls -R
用法:hadoop fs -mkdir [-p]
将路径uri作为参数并创建目录。
选项:
Example:
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -moveFromLocal
与put命令类似,只是在复制后删除了源localsrc。
用法:hadoop fs -moveToLocal [-crc]
显示“尚未实现”消息。
用法:hadoop fs -mv URI [URI ...]
将文件从源移动到目标。此命令允许多个源,在这种情况下,目标需要是目录。不允许跨文件系统移动文件。
Example:
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -put [-f] [-p] [-l] [-d] [ - |
将单个src或多个srcs从本地文件系统复制到目标文件系统。如果源设置为“ - ”,还从stdin读取输入并写入目标文件系统
如果文件已存在,则复制失败,除非给出-f标志。
选项:
Examples:
Exit Code:
Returns 0 on success and -1 on error.
请参阅“ HDFS快照指南”。
用法:hadoop fs -rm [-f] [-r | -R] [-skipTrash] [-safely] URI [URI ...]
删除指定为args的文件。
如果启用了垃圾箱,则文件系统会将已删除的文件移动到垃圾箱目录(由FileSystem#getTrashRoot提供)。
目前,默认情况下禁用垃圾箱功能。用户可以通过为参数fs.trash.interval(在core-site.xml中)设置大于零的值来启用垃圾。
请参阅删除有关删除垃圾箱中文件的信息。
选项:
Example:
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
删除目录。
选项:
Example:
用法:hadoop fs -rmr [-skipTrash] URI [URI ...]
删除的递归版本。
注意:不推荐使用此命令。而是使用hadoop fs -rm -r
用法:hadoop fs -setfacl [-R] [-b | -k -m | -x
设置文件和目录的访问控制列表(ACL)。
选项:
Examples:
Exit Code:
Returns 0 on success and non-zero on error.
用法:hadoop fs -setfattr -n name [-v value] | -x name
设置文件或目录的扩展属性名称和值。
选项:
Examples:
Exit Code:
Returns 0 on success and non-zero on error.
用法:hadoop fs -setrep [-R] [-w]
更改文件的复制因子。如果path是目录,则命令以递归方式更改以path为根的目录树下的所有文件的复制因子。执行此命令时将忽略EC文件。
选项:
Example:
Exit Code:
Returns 0 on success and -1 on error.
用法:hadoop fs -stat [格式] <路径> ...
以指定格式打印有关
Example:
Exit Code: Returns 0 on success and -1 on error.
用法:hadoop fs -tail [-f] URI
显示文件的最后一千字节到stdout。
选项:
Example:
Exit Code: Returns 0 on success and -1 on error.
用法:hadoop fs -test - [defsz] URI
选项:
例:
用法:hadoop fs -text
获取源文件并以文本格式输出文件。允许的格式为zip和TextRecordInputStream。
用法:hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]
将URI指定的文件的访问和修改时间更新为当前时间。如果该文件不存在,则在URI处创建零长度文件,其中当前时间作为该URI的时间戳。
时间戳格式如下* yyyy四位数年份(例如2018年)* MM一年中的两位数月份(例如8月份的08月份)* dd月份的两位数日期(例如,每月第一天的01)* HH一天中的两位数小时使用24小时表示法(例如23表示晚上11点,11表示上午11点)* mm两位数小时* ss两位数分钟,例如20180809230000代表2018年8月9日,晚上11点
Example:
Exit Code: Returns 0 on success and -1 on error.
用法:hadoop fs -touchz URI [URI ...]
创建一个零长度的文件。如果文件存在非零长度,则返回错误。
Example:
Exit Code: Returns 0 on success and -1 on error.
用法:hadoop fs -truncate [-w]
将与指定文件模式匹配的所有文件截断为指定的长度。
选项:
Example:
用法:hadoop fs -usage command
返回单个命令的帮助。
Hadoop FileSystem shell可与Object Stores(如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
与普通文件系统不同,重命名对象库中的文件和目录通常需要与被操作对象的大小成比例的时间。由于许多文件系统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://[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。
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中文件和目录的行为。
有关这可能如何影响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
当尝试删除其中一个文件时,操作失败 - 尽管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 自己的模型和工具。
以下是通常没有效果的shell命令列表 - 实际上可能会失败。
命令 | 限制 |
---|---|
appendToFile | 通常不受支持 |
checksum | 通常的校验和是“无” |
chgrp | 通常不受支持的权限模型; 空操作 |
chmod | 通常不受支持的权限模型; 空操作 |
chown | 通常不受支持的权限模型; 空操作 |
createSnapshot | 通常不受支持 |
deleteSnapshot | 通常不受支持 |
df | 通常会显示默认值 |
getfac | 可能支持也可能不支持 |
getfattrl |
普遍支持 |
renameSnapshot | 通常不受支持 |
setfacl | 通常不受支持的权限模型 |
setfattr | 通常不受支持的权限模型 |
setrep | 没有效果 |
truncate | 通常不受支持 |
不同的对象存储客户端可能支持这些命令:请查阅文档并针对目标存储进行测试。
原文链接: https://hadoop.apache.org/docs/r3.2.0/