文件系统(FS)外壳程序包括各种类似于外壳程序的命令,这些命令可直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统(例如本地FS,WebHDFS,S3 FS等)进行交互。FS Shell通过以下方式调用:
bin / hadoop fs <args>
所有FS Shell命令都将路径URI作为参数。URI格式为scheme:// authority / path。对于HDFS,方案为hdfs,对于本地FS,方案为file。方案和权限是可选的。如果未指定,则使用配置中指定的默认方案。可以将HDFS文件或目录(例如/ parent / child)指定为hdfs:// namenodehost / parent / child或简单地指定为/ parent / child(假设您的配置设置为指向hdfs:// namenodehost)。
FS Shell中的大多数命令的行为类似于相应的Unix命令。每个命令都描述了差异。错误信息将发送到stderr,输出将发送到stdout。
如果使用HDFS,则hdfs dfs是同义词。
可以使用相对路径。对于HDFS,当前工作目录是HDFS主目录/ user / <用户名>,该目录通常必须手动创建。也可以隐式访问HDFS主目录,例如,当使用HDFS垃圾文件夹时,主目录中的.Trash目录。
有关通用外壳程序选项,请参见《命令手册》。
用法:hadoop fs -appendToFile <localsrc> ... <dst>
从本地文件系统附加一个或多个src到目标文件系统。还从stdin读取输入,并将其追加到目标文件系统。
退出代码:
成功返回0,错误返回1。
用法:hadoop fs -cat [-ignoreCrc] URI [URI ...]
将源路径复制到标准输出。
选件
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -checksum URI
返回文件的校验和信息。
例:
用法:hadoop fs -chgrp [-R] GROUP URI [URI ...]
更改文件的组关联。用户必须是文件的所有者,或者是超级用户。其他信息在“ 权限指南”中。
选件
用法:hadoop fs -chmod [-R] <MODE [,MODE] ... | OCTALMODE> URI [URI ...]
更改文件的权限。使用-R,通过目录结构递归进行更改。用户必须是文件的所有者,或者是超级用户。其他信息在“ 权限指南”中。
选件
用法:hadoop fs -chown [-R] [OWNER] [:[GROUP]] URI [URI]
更改文件的所有者。该用户必须是超级用户。其他信息在“ 权限指南”中。
选件
用法:hadoop fs -copyFromLocal <localsrc> URI
与fs -put命令相似,不同之处在于源仅限于本地文件引用。
选项:
用法:hadoop fs -count [-q] [-h] [-v] [-x] [-t [<存储类型>]] [-u] [-e] <路径>
计算与指定文件模式匹配的路径下的目录,文件和字节数。获取配额和使用情况。具有-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是文件策略的名称。如果在该文件上设置了擦除编码策略,它将返回该策略的名称。如果未设置擦除编码策略,它将返回“已复制”,这表示它使用复制存储策略。
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -cp [-f] [-p | -p [topax]] URI [URI ...] <目标>
将文件从源复制到目标。此命令也允许多个源,在这种情况下,目标必须是目录。
如果(1)源文件系统和目标文件系统支持它们(仅HDFS),并且(2)所有源文件路径和目标路径名都在/.reserved/raw层次结构中,则保留'raw。*'名称空间扩展属性。确定是否保留raw。*名称空间xattrs与-p(保留)标志无关。
选项:
例:
退出代码:
成功返回0,错误返回-1。
请参阅《HDFS快照指南》。
请参阅《HDFS快照指南》。
用法:hadoop fs -df [-h] URI [URI ...]
显示可用空间。
选项:
例:
用法:hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]
显示给定目录中包含的文件和目录的大小,或仅在文件的情况下显示文件的长度。
选项:
du以以下格式返回三列:
大小disk_space_consumed_with_all_replicas full_path_name
例:
退出代码:成功返回0,错误返回-1。
用法:hadoop fs -expunge [-immediate]
永久删除垃圾箱目录中早于保留阈值的检查点中的文件,并创建新的检查点。
创建检查点时,垃圾桶中最近删除的文件将移动到检查点下。下次调用-expunge命令时,检查点中早于fs.trash.interval的文件将被永久删除。
如果文件系统支持该功能,则用户可以配置为通过存储在fs.trash.checkpoint.interval(在core-site.xml中)的参数定期创建和删除检查点。该值应小于或等于fs.trash.interval。
如果传递了-immediate选项,则将立即删除垃圾桶中当前用户的所有文件,而忽略fs.trash.interval设置。
有关HDFS垃圾功能的更多信息,请参阅HDFS体系结构指南。
用法:hadoop fs -find <路径> ... <表达式> ...
查找与指定表达式匹配的所有文件,并对它们应用选定的操作。如果未指定路径,则默认为当前工作目录。如果未指定表达式,则默认为-print。
可以识别以下主要表达式:
-name模式
-iname模式
如果文件的基本名称使用标准文件系统全局匹配模式,则评估为true。如果使用-iname,则匹配不区分大小写。
-print
-print0
始终评估为true。使当前路径名写入标准输出。如果使用-print0表达式,则将附加ASCII NULL字符。
可以识别以下运算符:
用于连接两个表达式的逻辑AND运算符。如果两个子表达式都返回true,则返回true。由两个表达式的并置暗示,因此不需要明确指定。如果第一个表达式失败,则第二个表达式将不适用。
例:
hadoop fs-查找/-名称测试-打印
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
将文件复制到本地文件系统。未通过CRC检查的文件可以使用-ignorecrc选项进行复制。可以使用-crc选项复制文件和CRC。
例:
退出代码:
成功返回0,错误返回-1。
选项:
用法:hadoop fs -getfacl [-R] <路径>
显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl还将显示默认ACL。
选项:
例子:
退出代码:
成功返回0,错误返回非零。
用法:hadoop fs -getfattr [-R] -n名称| -d [-e en] <路径>
显示文件或目录的扩展属性名称和值(如果有)。
选项:
例子:
退出代码:
成功返回0,错误返回非零。
用法:hadoop fs -getmerge [-nl] <src> <localdst>
将源目录和目标文件作为输入,并将src中的文件串联到目标本地文件中。可以选择将-nl设置为允许在每个文件的末尾添加换行符(LF)。-skip-empty-file可以用于在文件为空的情况下避免不需要的换行符。
例子:
退出代码:
成功返回0,错误返回非零。
用法:hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>
选项:
对于文件ls以以下格式返回文件的状态:
权限number_of_replicas userid groupid文件大小修改日期修改时间文件名
对于目录,它返回其直接子级列表,如Unix中一样。目录列出为:
权限userid groupid修改日期修改时间目录名
默认情况下,目录中的文件按文件名排序。
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -mkdir [-p] <路径>
将路径uri作为参数并创建目录。
选项:
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -mv URI [URI ...] <目标>
将文件从源移动到目标。此命令还允许多个源,在这种情况下,目标位置必须是目录。不允许跨文件系统移动文件。
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -put [-f] [-p] [-l] [-d] [-| <localsrc1> ..]。<dst>
将单个src或多个src从本地文件系统复制到目标文件系统。如果源设置为“-”,还从stdin读取输入并写入目标文件系统
如果文件已经存在,则复制失败,除非指定了-f标志。
选项:
例子:
退出代码:
成功返回0,错误返回-1。
请参阅《HDFS快照指南》。
用法:hadoop fs -rm [-f] [-r | -R] [-skipTrash] [-安全地] URI [URI ...]
删除指定为args的文件。
如果启用了垃圾桶,则文件系统会将已删除的文件移动到垃圾桶目录(由FileSystem#getTrashRoot提供)。
当前,默认情况下禁用垃圾桶功能。用户可以通过为参数fs.trash.interval(在core-site.xml中)设置一个大于零的值来启用垃圾箱。
选项:
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -rmdir [-非空时忽略失败] URI [URI ...]
删除目录。
选项:
例:
用法:hadoop fs -setfacl [-R] [-b | -k -m | -x <acl_spec> <path>] | [-set <acl_spec> <path>]]
设置文件和目录的访问控制列表(ACL)。
选项:
例子:
退出代码:
成功返回0,错误返回非零。
用法:hadoop fs -setfattr -n名称[-v值] | -x名称<路径>
设置文件或目录的扩展属性名称和值。
选项:
例子:
退出代码:
成功返回0,错误返回非零。
用法:hadoop fs -setrep [-R] [-w] <numReplicas> <路径>
更改文件的复制因子。如果path是目录,则该命令以递归方式更改以path为根的目录树下所有文件的复制因子。执行此命令时,将忽略EC文件。
选项:
例:
退出代码:
成功返回0,错误返回-1。
用法:hadoop fs -stat [格式] <路径> ...
以指定格式打印有关<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。
例:
退出代码:成功返回0,错误返回-1。
用法:hadoop fs -tail [-f] URI
显示要输出的文件的最后千字节。
选项:
例:
退出代码:成功返回0,错误返回-1。
用法:hadoop fs -test-[defswrz] URI
选项:
例:
用法:hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]
将URI指定的文件的访问和修改时间更新为当前时间。如果该文件不存在,则会在URI上创建一个零长度的文件,并将当前时间作为该URI的时间戳。
时间戳格式如下:* yyyy四位数的年份(例如2018)* MM两位数字的月份(例如08表示八月)* dd两位数字的月份(例如01表示每月的第一天)* HH以24小时表示法表示一天中的两位数小时(例如23代表11 pm,11代表11 am)* mm两位数字的分钟* ss分钟的两位数字,例如20180809230000表示2018年8月9日,11 pm
例:
退出代码:成功返回0,错误返回-1。
用法:hadoop fs -touchz URI [URI ...]
创建一个零长度的文件。如果文件存在非零长度,则返回错误。
例:
退出代码:成功返回0,错误返回-1。
用法:hadoop fs -truncate [-w] <长度> <路径>
将与指定文件模式匹配的所有文件截断为指定长度。
选项:
例:
用法:hadoop fs -usage命令
返回单个命令的帮助。
Hadoop FileSystem Shell与对象存储(例如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
与普通文件系统不同,重命名对象存储中的文件和目录通常花费的时间与要操作的对象的大小成正比。由于许多文件系统外壳程序操作都将重命名用作操作的最后阶段,因此跳过该阶段可以避免长时间的延迟。
特别是,put和copyFromLocal命令都应将-d选项设置为直接上载。
#从集群文件系统上传文件 hadoop fs -put -d /datasets/example.orc s3a:// bucket / datasets / #从本地文件系统中用户主目录下上传文件。 #注意,它是shell扩展“〜”,而不是hadoop fs命令 hadoop fs -copyFromLocal -d -f〜/ datasets / devices.orc s3a:// bucket / datasets / #从stdin创建文件 #特殊的“-”来源表示“使用标准输入” 回声“你好” | 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。
找
在提供路径下有许多目录的大型商店中,这可能非常慢。
#枚举对象存储容器中的所有文件。 hadoop fs-查找s3a:// bucket / -print #记得先对通配符进行转义,以阻止shell尝试先扩展通配符 hadoop fs-查找s3a:// bucket / datasets / -name \ *。txt -print
改名
重命名文件的时间取决于其大小。
重命名目录的时间取决于该目录下所有文件的数量和大小。
hadoop fs -mv s3a:// bucket / datasets s3a:// bucket / historical
如果操作被中断,则对象存储将处于未定义状态。
复制
hadoop fs -cp s3a:// bucket / datasets s3a:// bucket / historical
复制操作读取每个文件,然后将其写回到对象存储;完成时间取决于要复制的数据量,以及本地计算机和对象存储之间双向的带宽。
计算机离对象存储库越远,副本花费的时间越长
该RM命令删除对象和目录满对象。如果对象存储最终是一致的,则fs ls命令和其他访问器可能会短暂返回现在删除的对象的详细信息;否则,可能会返回错误信息。这是无法避免的对象存储工件。
如果将文件系统客户端配置为将文件复制到回收站目录,则该目录将位于存储桶中;该RM那么操作需要一定的时间正比于数据的大小。此外,删除的文件将继续产生存储费用。
为避免这种情况,请使用-skipTrash选项。
hadoop fs -rm -skip垃圾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://,保留权限但不强制执行权限)。
与只读对象存储库交互时,在“列表”和“状态”命令中找到的权限可能表明用户具有写访问权,而实际上却没有。
对象存储通常具有自己的权限模型,可以通过特定于存储的工具来操纵模型。请注意,对象存储可能提供的某些权限(例如,只写路径或根路径上的不同权限)可能与Hadoop文件系统客户端不兼容。这些趋向于要求对他们向其中写入数据的整个对象存储桶/容器具有完全的读取和写入访问权限。
作为如何模拟权限的示例,以下是亚马逊的公共,只读存储区的Landsat图像列表:
$ hadoop fs -ls s3a:// landsat-pds / 找到10项 drwxrwxrwx-映射0 2016-09-26 12:16 s3a:// landsat-pds / L8 -rw-rw-rw-1映射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已映射105 2016-08-19 18:12 s3a://landsat-pds/robots.txt -rw-rw-rw-1已映射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映射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-映射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:删除s3a://landsat-pds/scene_list.gz: com.amazonaws.services.s3.model.AmazonS3Exception:拒绝访问(服务:Amazon S3; 状态码:403;错误代码:AccessDenied; 要求编号:1EF98D5957BCAB3D), S3扩展请求ID:wi3veOXFuFqWBUCJgV3Z + NQVj9gWgZVdXlPU4KBbYMsw / gA + hyhRXcaQ + PogOsDgHh31HlTCebQ =
这表明列出的权限不能被视为写访问权限的证据;只有对象操作才能确定这一点。
请注意,Microsoft Azure WASB文件系统确实允许设置和检查权限,但是实际上并未强制执行权限。此功能提供了使用DistCp备份HDFS目录树的功能,保留了其权限,并且在将目录复制回HDFS时可以恢复权限。但是,为了保护对对象存储中数据的访问,必须使用 Azure 自己的模型和工具。
这是通常无效的shell命令列表,并且实际上可能会失败。
命令 | 局限性 |
---|---|
appendToFile | 通常不受支持 |
校验和 | 通常的校验和是“无” |
chgrp | 通常不支持的权限模型;无操作 |
chmod | 通常不支持的权限模型;无操作 |
wn | 通常不支持的权限模型;无操作 |
createSnapshot | 通常不受支持 |
deleteSnapshot | 通常不受支持 |
df | 通常显示默认值 |
getfacl | 可能支持或可能不支持 |
getfattr | 普遍支持 |
重命名快照 | 通常不受支持 |
Setfacl | 通常不受支持的权限模型 |
setfattr | 通常不受支持的权限模型 |
setrep | 没有效果 |
截短 | 通常不受支持 |
不同的对象存储客户端可能支持以下命令:请查阅文档并针对目标存储进行测试。