目录
前言
文件系统的shell包含了各种各样的类linux shell的命令,用户可借助这些命令直接与HDFS或Hadoop支持的其它文件系统进行交互(比如本地文件系统, WebHDFS, S3 FS等等)。
调用FS shell的命令为:
bin/hadoop fs <args>
所有的文件系统shell命令都以路径URI为参数,URI格式:scheme://authority/path。比如对于HDFS来说,这里的scheme即为hdfs,对于本地文件系统,sheme就是file。scheme和authority是可选的,不指定时,默认使用配置文件中配置的scheme。比如:一个HDFS文件路径或者目录/parent/child也可以写成hdfs://namenodehost/parent/child。
文件系统shell的大多数命令跟类Unix系统的shell命令相似。每个命令都有不同之处。错误信息和输出均被发送到标准输出端。
如果HDFS能够正常使用,hadoop fs 命令与hdfs dfs是等价的。
也可以使用相对路径。对HDFS而言,当前工作路径指定的是HDFS的主目录(/user/username),这个目录通常会被自动创建。HDFS主目录也可以被隐式访问。比如HDFS的垃圾目录,一般即为.Trash。
appendToFile
用法:
hadoop fs -appendToFile <localsrc> ... <dst>
将本地单个或多个文件追加到HDFS,同时在标准输出中打印这几个文件的内容
返回值为0表示成功,1表示失败。
cat
用法:
hadoop fs -cat [-ignoreCrc] URI [URI ...]
在标准输出端打印文件内容
可用-ignorecrc选项复制CRC校验失败的文件:使用-CRC选项复制文件以及CRC信息。
例:
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完成递归操作。用户必须是资源的拥有者,或者超级用户。
chown
用法:
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
修改资源拥有者。操作者必须是超级用户。-R完成递归操作
copyFromLocal
用法:
hadoop fs -copyFromLocal <localsrc> URI
作用类似于put命令, 但这里的源被限制为本地文件引用(put的源可以是标准输出)。
可选参数:
- -p : 保留访问和修改时间、所有权和权限。(权限可跨文件系统时)
- -f : 目标文件已存在时,覆盖写入。
- -l : 允许DataNode惰性地将文件持久化到磁盘,强制复制因子为1。这将导致持久性下降。谨慎使用。
- -d : 跳过以. _COPYING_为后缀的临时文件的创建过程。
copyToLocal
用法:
hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
作用类似于get命令,但这里的目的文件被限制为本地文件引用(get的目的文件可以是标准输出)。
count
用法:
hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] <paths>
获取与指定模式匹配的路径的目录个数、文件个数、字节数。获取配额和使用情况。输出栏包括的信息依次为:目录个数、文件个数、所占字节数以及路径名称
可选参数:
- -q 显示配额(QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, DIR_COUNT, FILE_COUNT, CONTENT_SIZE, PATHNAME)
- -u 限制只显示配额和使用情况(QUOTA, REMAINING_QUOTA, SPACE_QUOTA, REMAINING_SPACE_QUOTA, PATHNAME)
- -t 显示每种存储类型的配额和使用情况。如果没有给出-u或-q选项,则忽略-t选项。可以在-t选项中使用的可选参数的列表:"", "all", "ram_disk", "ssd", "disk", "archieve"。
- -h 以人类可读的形式显示字节大小
- -v 显示头行
- -x 从结果计算中排除快照。没有-x选项时,结果通常是由所有节点进行计算。如果使用了-u或者-q,则-x会被忽略。
- -e 显示每个文件的擦除编码策略。DIR_COUNT, FILE_COUNT, CONTENT_SIZE, ERASURECODING_POLICY, PATHNAME
cp
用法:
hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
将文件从源端复制到目标文件夹,支持一次性复制多个文件,目标文件夹必须是一个目录
Snapshot
本部分内容篇幅较大,迁移到专门的博文
df
hadoop fs -df [-h] URI [URI ...]
显示空闲空间。
可选参数:
- -h 将文件尺寸以可读的形式展示出来(例如:显示64.0m而不是67108864)
例:
hadoop fs -df /user/hadoop/dir1
du
用法:
hadoop fs -du [-s] [-h] [-v] [-x] URI [URI ...]
显示给定目录中包含的文件和目录的大小或文件的长度(如果它只是一个文件)。
可选参数
- -s 将显示文件长度的汇总,而不是单个文件。如果没有-s选项,计算是通过从给定路径深入1级来完成的。
- -h 将文件尺寸以可读的形式展示出来(例如:显示64.0m而不是67108864)
- -v 在首行显示列名
- -x 从结果计算中排除快照。没有-x选项时,结果通常是由所有节点进行计算。
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
成功时返回1,失败时返回-1
dus
hadoop fs -dus <args>
粗略的显示文件大小。
不建议使用此命令。而是使用hadoop fs -du -s。
expunge
hadoop fs -expunge [-immediate]
从垃圾目录中永久删除比保留阈值早的检查点中的文件,并创建新的检查点。
当创建检查点时,最近删除的垃圾文件将在检查点下移动。在下次调用-expunge命令时,fs. waste .interval之前的检查点中的文件将被永久删除。
如果文件系统支持该特性,用户可以配置为通过存储为fs.trash.checkpoint.interval(在core-site.xml中)的参数定期创建和删除检查点。这个值应该小于或等于fs.trash.interval。
如果传递了-immediate选项,那么当前用户在trash中的所有文件将立即被删除,忽略fs.trash.interval设置。
find
hadoop fs -find <path> ... <expression> ...
查找与指定表达式匹配的所有文件,并对其应用选定的操作。如果没有指定路径,则默认为当前工作目录。如果没有指定表达式,则默认为-print。
get
hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
将文件拷贝到本地文件系统。CRC较验失败的文件可以加上-ignorecrc参数,使用-crc参数时,文件和CRC均会被复制
可选参数:
- -p : 保留访问和修改时间、所有权和权限。(权限可跨文件系统时)
- -f : 如果目标已经存在,则重写它。
- -ignorecrc : 跳过对下载的文件的CRC检查。
- -crc : CRC较验和较验文件下载
getfacl
用法:
hadoop fs -getfacl [-R] <path>
显示文件和目录的ACL(Access Control Lists),如果目录拥有默认的ACL,此命令也将显示默认的ACL
可选参数:
- -R : 递归显示指定路径下的目录和文件的ACL
- path : 需列出信息的文件或目录
getfattr
用法:
hadoop fs -getfattr [-R] -n name | -d [-e en] <path>
显示文件或目录的扩展属性名称和值(如果有的话)。
可选参数:
- -R : 递归
- -n name : 转储命名扩展属性值。
- -d : 转储与路径名关联的所有扩展属性值。
- -e encoding : 在检索后对值进行编码。有效的编码是“text”、“hex”和“base64”。用文本字符串编码的值用双引号(")括起来,用十六进制和base64编码的值分别用0x和0作为前缀。
- path : 路径,文件或目录
例:
hadoop fs -getfattr -d /file
hadoop fs -getfattr -R -n user.myAttr /dir
getmerge
用法:
hadoop fs -getmerge [-nl] <src> <localdst>
接收一个源目录(或多个源文件)和一个本地的目标文件,合并源目录的多个文件并输出到目标文件
设置-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
head
用法:
hadoop fs -head pathname
将文件的前几行显示到标准输出
help
用法:
hadoop fs -help
打印显示hadoop fs的用法
ls
用法:
fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] <args>
- -C: 只显示文件和目录的路径。
- -d: 目录作为普通文件列出。
- -h: 用人类可读的方式格式化文件大小(例如64.0m而不是67108864)。
- -q: 用?替代不可打印的字符。
- -R: 递归列出子目录。
- -t: 根据修改时间(最近的第一个)排序
- -S: 按文件大小排序输出。
- -r: 反转排序顺序。
- -u: 使用访问时间而不是修改时间来显示和排序。
- -e: 只显示文件和目录的删除编码策略。
lsr
用法:
hadoop fs -lsr <args>
ls的递归版本。
不推荐使用lsr,而是使用 hadoop fs -ls -R。
mkdir
用法:
hadoop fs -mkdir [-p] <paths>
创建目录
可选参数:
- -p 与Unix一样,沿着路径创建父目录。
例:
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
moveFromLocal
用法:
hadoop fs -moveFromLocal <localsrc> <dst>
与put命令类似,但此命令会删除被移动后的资源。
moveToLocal
用法:
hadoop fs -moveToLocal [-crc] <src> <dst>
与get命令类似,但此命令会删除被移动后的资源。
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
put
用法:
hadoop fs -put [-f] [-p] [-l] [-d] [ - | <localsrc1> .. ]. <dst>
从本地文件系统复制单个资源或多个资源到目标文件系统,如果将源设置为"-",则可进行标准输出,写入到目标文件系统。
可选参数:
- -p : 保留访问和修改时间、所有权和权限。(权限可跨文件系统时)。
- -f : 如果目标文件已存在,则覆盖目标文件。
- -l : 允许DataNode惰性地将文件持久化到磁盘,强制复制因子为1。这将导致持久性下降。谨慎使用。
- -d : 跳过以. _COPYING_为后缀的临时文件的创建过程。
rm
用法:
hadoop fs -rm [-f] [-r |-R] [-skipTrash] [-safely] URI [URI ...]
删除指定文件。
如果启用了trash,文件系统则会在执行此命令时将指定文件移动到垃圾存放目录
当前版本的hadoop(3.2.1)trash默认是关闭的,用户可在core-site.xml中设置fs.trash.interval值大于零,即可开启trash。
可选参数:
- -f: 文件不存在时,不显示诊断信息或修改反映错误的退出状态
- -R: 递归地删除目录及其下的所有内容。
- -r: 与-R相同
- -skipTrash: 将绕过trash(如果启用),并立即删除指定的文件。这在需要从超配额目录中删除文件时非常有用。
- -safely: 在删除文件总数大于hadoop.shell.delete.limit. number .files(在core-site.xml中)的目录之前需要进行安全确认。xml,默认值:100)。它可以与-skipTrash一起使用,以防止大目录的意外删除。当递归地遍历大目录以计算在确认之前要删除的文件数量时,预期会出现延迟。
rmdir
用法:
hadoop fs -rmdir [--ignore-fail-on-non-empty] URI [URI ...]
删除一个目录
可选参数:
- --ignore-fail-on-non-empty: 当使用通配符时,目录中仍然包含文件的情况下不会失败。
rmr
用法:
hadoop fs -rmr [-skipTrash] URI [URI ...]
递归版本的rm命令,不推荐使用。
推荐使用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规范只包含访问项,则保留现有的默认项。如果ACL规范只包含默认条目,则保留现有的访问条目。如果ACL规范同时包含访问和默认条目,则两者都将被替换。
- 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:r-x /dir
hadoop fs -setfacl -m default:user:hadoop:r-x /dir
setfattr
用法:
hadoop fs -setfattr -n name [-v value] | -x name <path>
为文件或目录设置扩展属性名称和值。
可选参数:
- -n name: 扩展属性名。
- -v value: 扩展属性值。有三种不同的值编码方法。如果参数用双引号括起来,那么值就是引号内的字符串。如果参数以0x或0x为前缀,则将其视为十六进制数。如果参数以0或0开头,那么它被认为是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
setrep
用法:
hadoop fs -setrep [-R] [-w] <numReplicas> <path>
更改文件的复制因子。如果path是一个目录,则该命令递归地更改以path为根的目录树下所有文件的复制因子。当执行此命令时,EC文件将被忽略。
可选参数:
- -w: 要求命令等待复制完成。这可能需要很长时间。
- -R: 为了向后兼容。没有实际效果。
例:
hadoop fs -setrep -w 3 /user/hadoop/dir1
stat
用法:
hadoop fs -stat [format] <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
tail
用法:
hadoop fs -tail [-f] URI
可选参数:
- -f 随着文件的增长输出追加的数据。(跟Unix里面的命令一样)
test
用法:
hadoop fs -test -[defswrz] URI
可选参数
- -d: 如果路径是一个目录,返回0。
- -e: 如果路径存在,返回0。
- -f: 如果路径是文件,返回0。
- -s: 如果路径不为空,返回0。
- -w: 如果路径存在并且授予了写权限,则返回0。
- -r: 如果路径存在并且授予了读权限,则返回0。
- -z: 如果文件大小为零,则返回0。
text
用法:
hadoop fs -text <src>
获取一个源文件并以文本格式输出该文件。允许的格式为:zip, TextRecordInputStream。
touch
用法:
hadoop fs -touch [-a] [-m] [-t TIMESTAMP] [-c] URI [URI ...]
将URI指定的文件的访问和修改时间更新为当前时间。如果该文件不存在,则在URI上创建一个空文件,并将当前时间作为该URI的时间戳。
可选参数:
- -a: 只更改访问时间
- -m: 只更改修改时间
- -t: 指定时间戳(格式为yyyyMMddHHmmss)
- -c: 如果文件不存在,使用此选项将不创建文件
touchz
用法:
hadoop fs -touchz URI [URI ...]
创建一个空文件。如果文件非空,则返回错误。
也就是说,如果存在一个非空的同名文件,则执行此命令时,将返回错误。
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 command
返回单个命令的帮助。
对象存储部分将另写博文介绍。