Hadoop FS shell

(一)概要

文件系统(FS)shell(以下简称为 FS Shell)包含各种类似于 shell 的命令,FS Shell中的大多数命令的行为类似于相应的 Unix 命令。错误信息将发送到stderr,标准输出将发送到stdout。这些命令可直接与Hadoop分布式文件系统(HDFS)以及Hadoop支持的其他文件系统(例如本地FS,WebHDFS,S3 FS等)进行交互。本文简单介绍几种常用的FS shell。
FS shell 通过以下方式调用:

bin/hadoop fs 
# bin路径位于客户端的 hadoop 目录下,在TDH 中使用时可以参考 [准备TDH客户端环境](https://nj.transwarp.cn:8180/?p=1105 "准备TDH客户端环境")
# 由于 TDH 使用的是 HDFS 文件系统,也可以使用 bin/hdfs dfs 调用;

所有的 FS Shell 都需要带文件系统路径 URI 参数,URI的格式一般是scheme//authority/path,对于 HDFS,格式一般是 hdfs://nameservice1/inceptor1/,其中 schema 和 authority 是可选的,如果不指定,则使用配置中默认的参数。文件系统路径参数可以指定为 hdfs://nameservice1/inceptor1/,也可以简单的指定为 /incpeotr1/。

文件系统路径参数一般建议使用绝对路径,当然也可以使用相对路径,相对路径是当前 hadoop 用户的主目录。比如以下案例:当前用户是 hdfs,访问的时候可以直接看到当前用户的主目录。

$ echo $HADOOP_USER_NAME
hdfs
$ hdfs dfs -ls
2020-03-04 14:48:56,023 INFO util.KerberosUtil: Using principal pattern: HTTP/_HOST
Found 1 items
drwx------   - tableau hadoop          0 2020-03-04 10:10 .Trash

(二)详细说明

appendToFile

用法:hadoop fs -appendToFile …
说明:将一个或者多个本地文件追加到目标文件系统,也可以将标准输入追加到目标文件系统;

  • 案例1:$ hadoop fs -appendToFile srcfile.txt /fsshell/dstfile.txt
    将本地的 srcfile.txt 的内容,追加到 hdfs 的 /fsshell/dstfile.txt 文件中
  • 案例2:$ hadoop fs -appendToFile - /fsshell/dstfile.txt
    将终端标准输入的内容,追加到 hdfs 的 /fsshell/dstfile.txt 文件中

cat

用法:hadoop fs -cat [-ignoreCrc] URI [URI …]
说明:将文件系统的文件复制到标准输出,也就是查看文件内容。其中-ignoreCrc选项是禁用checkshum验证,可选参数。

  • 案例1:hadoop fs -cat /fsshell/dstfile.txt
    将文件系统的dstfile.txt的内容输出到标准输出,也即是查看文件系统的 dstfile.txt 的内容

checksum

用法:hadoop fs -checksum URI
说明:返回文件的校验和信息

  • 案例1:hadoop fs -checksum /fsshell/dstfile.txt
    计算文件系统 dstfile.txt 的 checksum 结果

chgrp

用法:hadoop fs -chgrp [-R] GROUP URI [URI …]
说明:更改文件的组关联。用户必须是文件的所有者,或者是超级用户。-R选项是将通过目录结构递归修改组关联。

  • 案例1:hadoop fs -chgrp hbase /fsshell/dstfile.txt
    将文件系统的 dstfile.txt 的所属组修改为 hbase 组。

chmod

用法:hadoop fs -chmod [-R] <MODE [,MODE] … | OCTALMODE> URI [URI …]
说明:更改文件的权限,用户必须是文件的所有者,或者是超级用户。-R选项是将通过目录结构递归修改权限。

  • 案例1:hadoop fs -chmod 755 /fsshell/dstfile.txt
    修改文件系统的 /fsshelld/stfile.txt 的 权限修改为755

chown

用法:hadoop fs -chown [-R] [OWNER] [:[GROUP]] URI [URI]
说明:更改文件的所有者,执行用户必须是文件的所有者,或者是超级用户。

  • 案例1:hadoop fs -chown tableau:hbase /fsshell/dstfile.txt
    修改文件系统的 /fsshelld/stfile.txt 的所有者为 tableau,所属组为 hbase

copyFromLocal

用法:hadoop fs -copyFromLocal URI
说明:与fs -put命令类似,不同之处在于源文件仅限于本地文件引用。而 put 可以是hdfs上的文件,并且优先检测 hdfs 文件.

  • 案例1:hadoop fs -copyFromLocal /root/copyfile.txt /fsshell/
    将本地文件系统的 copyfile.txt copy 到 fsshell 系统的
    -p:保留访问和修改时间,所有权和权限。(假设权限可以在本地文件系统和 hdfs 之间传播)
    -f:如果目的地已经存在,则将其覆盖。
    -l:允许DataNode将文件延迟保存到磁盘,将复制因子强制为1。此标志将导致持久性降低。谨慎使用。
    -d:跳过后缀为._COPYING_的临时文件的创建。

copyToLocal

用法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI
说明:与get命令类似,copyToLocal目标仅限于本地文件。

  • 案例1:hadoop fs -copyToLocal /fsshell/copyfile.txt /tmp/
    将/fsshell/copyfile.txt 文件 copy 到本地的 /tmp/目录下

count

用法:hadoop fs -count [-q] [-h] [-t []] [-e] 说明:计算与指定文件模式匹配的路径下的目录,文件和字节数。获取配额和使用情况。具有-count的输出列是:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,PATHNAME;
常用参数:
-q表示显示配额,
-h选项以人性化可读的格式显示大小。

  • 案例1:hadoop fs -count /eastmoney/
    统计文件系统 /eastmoney/ 下的DIR_COUNT,FILE_COUNT,CONTENT_SIZE,PATHNAME

cp

用法:hadoop fs -cp [-f] [-p | -p [topax]] URI [URI …] <目标>
说明:将文件从源复制到目标。此命令也允许多个源,在多个源的情况下,目标必须是目录。常用参数:如果目标已经存在,则-f选项将覆盖该目标。
-p选项将保留文件属性[topax](时间戳,所有权,权限,ACL,XAttr)。如果-p不带arg,则保留时间戳,所有权,权限。如果指定了-pa,则还将保留权限,因为ACL是权限的超集。确定是否保留原始名称空间扩展属性与-p标志无关。

  • 案例1:hadoop fs -cp /fsshell/copyfile.txt /fsshell/dstfile.txt /eastmoney/
    将文件系统的 /fsshell/copyfile.txt 和/fsshell/dstfile.txt copy 到 hdfs 的/eastmoney/路径下。

createSnapshot

用法:参考HDFS Snapshot 使用指南

deleteSnapshot

用法:参考HDFS Snapshot 使用指南

df

用法: hadoop fs -df [-h] URI [URI …]
说明:显示文件系统可用空间。

  • 案例1:hadoop fs -df /fsshell/
    显示文件系统 /fsshell/ 的可用空间

du

用法:hadoop fs -du [-s] [-h] URI [URI …]
说明:显示给定目录中包含的文件和目录的大小,或仅在文件的情况下显示文件的大小。
常用参数:
-s选项将导致显示文件大小的汇总结果,而不是单个文件的结果。如果没有-s选项,则通过从给定路径深入1级来完成计算。
-h选项将以人性化的方式显示文件大小(例如64.0m而不是67108864)

  • 案例1:hadoop fs -du -h -s /fsshell/
    汇总展示 /fsshell/ 文件系统下文件以及目录的大小结果。

expunge

用法:hadoop fs -expunge
说明:永久删除垃圾箱目录中早于保留阈值的检查点中的文件,并创建新的检查点。用户可以通过配置fs.trash.checkpoint.interval(在core-site.xml中)的参数来定期创建和删除检查点。该值应小于或等于fs.trash.interval。

  • 案例1:hadoop fs -expunge
    手动触发一次永久删除垃圾箱目录中早于保留阈值的检查点中的文件,并创建新的检查点的行为。

find

用法:hadoop fs -find … …
说明:查找与指定表达式匹配的所有文件,并对它们应用选定的操作。如果未指定路径,则默认为当前工作目录。如果未指定表达式,则默认为-print。

  • 案例1:hadoop fs -find /fsshell/ -name copyfile.txt
    查找文件系统 fsshell 下的名为 copyfile 的文件。

get

用法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f]
说明:将文件复制到本地文件系统。未通过CRC检查的文件可以使用-ignorecrc选项进行复制。可以使用-crc选项复制文件和CRC。
常用参数:
-p:保留访问和修改时间,所有权和权限。(假设权限可以在文件系统之间传播)
-f:如果目的地已经存在,则将其覆盖。

  • 案例1:hadoop fs -get -f /fsshell/copyfile.txt
    将文件系统的copyfile.txt 文件copy到本地文件系统,如果本地文件系统已存在则覆盖。

getfacl

用法:hadoop fs -getfacl [-R] <路径>
说明:显示文件和目录的访问控制列表(ACL)。如果目录具有默认ACL,则getfacl还将显示默认ACL。-R:递归列出所有文件和目录的ACL。

  • 案例1:hadoop fs -getfacl -R /fsshell/
    递归显示文件系统 /fsshell/ 下的所有文件或者目录的访问权限

getfattr

用法:hadoop fs -getfattr [-R] -n名称| -d [-e en] <路径>
说明:显示文件或目录的扩展属性名称和值(如果有)。
常用参数:
-R:递归列出所有文件和目录的属性。
-n name:转储命名扩展属性值。
-d:转储与路径名关联的所有扩展属性值。

  • 案例1:hadoop fs -getfattr -R -d /fsshell/
    显示 /fsshell/ 路径下所有的文件和目录的扩展属性。

getmerge

用法:hadoop fs -getmerge [-nl]
说明:将源目录和目标文件作为输入,并将src中的文件串联到目标本地文件中。可以选择将-nl设置为允许在每个文件的末尾添加换行符(LF)。-skip-empty-file可以用于在文件为空的情况下避免不需要的换行符。

  • 案例1:hadoop fs -getmerge -nl /fsshell/copyfile.txt /fsshell/dstfile.txt /tmp/merge.txt
    将文件系统 copyfile.txt dstfile.txt 的内容merge 到本地文件系统的/tmp/merge.txt中,两个文件内容末尾添加换行符。

head

TDH 集群暂时不支持该命令
用法:hadoop fs -head URI
说明:显示文件的前1000字节。

  • 案例1:hadoop fs -head /fsshell/copyfile.txt
    显示文件系统 /fsshell/copyfile.txt 的前1000字节。

help

用法:hadoop fs -help
说明:输出hadoop fs 的具体用法

ls

用法:hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e]
说明:列出目录的内容,或者文件的描述信息
常用参数:
-C:仅显示文件和目录的路径。
-d:目录被列为纯文件。
-h:以人类可读的格式设置文件大小(例如64.0m而不是67108864)。
-q:打印?而不是不可打印的字符。
-R:递归列出遇到的子目录。
-t:按修改时间对输出进行排序(最新的优先)。
-S:按文件大小排序输出。
-r:反转排序顺序。
-u:使用访问时间而不是修改时间来进行显示和排序。
-e:仅显示文件和目录的擦除编码策略。

  • 案例1:hadoop fs -ls /fsshell/
    列出文件系统/fsshell/下的目录的内容。

lsr

用法:hadoop fs -lsr
说明:ls的递归版本。不推荐使用此命令。而是使用hadoop fs -ls -R

mkdir

用法:hadoop fs -mkdir [-p] <路径>
说明:将路径uri用作参数并创建目录。-p选项的行为与Unix mkdir -p非常相似,它会按照路径创建父目录。

  • 案例1:hadoop fs -mkdir -p /fsshell/childdir/
    按照路径在文件系统上创建/fsshell/childdir/目录,如果父目录不存在则创建父目录。

moveFromLocal

用法:hadoop fs -moveFromLocal localsrc dst
说明:与put命令类似,不同之处在于复制后将源localsrc删除。

  • 案例1:hadoop fs -moveFromLocal /fsshell/dstfile.txt
    将文件系统 dstfile.txt move 到hadoop文件系统,并删除本地源文件。

moveToLocal

用法:hadoop fs -moveToLocal [-crc] src dst
说明:尚未实现的功能

mv

用法:hadoop fs -mv URI [URI …] dest
说明:将文件从源移动到目标。此命令也允许多个源,在这种情况下,目标位置必须是目录。不允许跨文件系统移动文件。

  • 案例1:hadoop fs -mv /fsshell/copyfile.txt /eastmoney/copyfile2.txt
    将文件系统 copyfile.txt move 到/eastmoney/下,并命名为copyfile2.txt。

put

用法:hadoop fs -put localsrc dst
说明:将一个或多个本地文件 copy 到目标。此命令也允许多个源,在多个本地文件系统的情况下,目标位置必须是目录。

  • 案例1:hadoop fs -put localfile /hadoop/hadoopfile
    将文件系统 localfile copy 到 /eastmoney/ 下,并命名为hadoopfile。
  • 案例2:hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
  • 案例3:hadoop fs -put – /hadoop/hadoopfile,从标准输入读取并写入目标文件

renameSnapshot

用法:参考HDFS Snapshot 使用指南

rm

用法:hadoop fs -rm [-f] [-r |-R] [-skipTrash] URI [URI …]
说明:根据参数删除文件或者目录
常用参数:
-f:如果文件不存在,不显示错误信息;
-r/R:递归的方式删除文件以及目录;
-skipTrash:绕过回收站直接删除,谨慎使用;

  • 案例1:hadoop fs -rm /eastmoney/hadoopfile

rmdir

用法:hadoop fs -rmdir [–ignore-fail-on-non-empty] URI [URI …]
说明:根据参数删除目录
常用参数:
–ignore-fail-on-non-empty:通配符时,非空目录忽略失败;

  • 案例1:hadoop fs -rmdir /eastmoney/dir1

rmr

用法:hadoop fs -rmr 等同于 用法:hadoop fs -rm -r 的使用,此处不再赘述;

setfacl

用法:hadoop fs -setfacl [-R] [-b | -k -m | -x <acl_spec>] | [-set <acl_spec>]]
说明:设置文件和目录的访问控制列表(ACL)。TDH 在开启安全的情况下,不推荐使用这种方法赋权;仅作为了解

setfattr

TDH 在开启安全的情况下,不推荐使用这种方法管理扩展属性;

setrep

用法:hadoop fs -setrep [-w] [-R] num 路径名/文件名
说明:将路径uri用作参数,修改该路径下的文件副本数为num。-w选项是等待修改完成返回结果;-R 是向前兼容,可加可不加。

  • 案例1:hadoop fs -setrep 2 /fsshell/copyfile.txt
    将/fsshell/copyfile.txt文件的副本数改成2副本。

stat

返回路径上的统计信息。
其中可选的format被官方文档遗漏了。下面列出了format的形式:
%b:打印文件大小(目录为0)
%n:打印文件名
%o:打印block size (我们要的值)
%r:打印备份数
%y:打印UTC日期 yyyy-MM-dd HH:mm:ss
%Y:打印自1970年1月1日以来的UTC微秒数
%F:目录打印directory, 文件打印regular file
当使用-stat选项但不指定format时候,只打印文件创建日期,相当于%y:

tail

用法:hadoop fs -tail [-f] URI
说明:显示文件的最后几行数据。-f 选项是跟随文件增长显示附加的内容。和 linux 使用方法一致

  • 案例1:hadoop fs -tail -f /fsshell/copyfile.txt
    实时查看 copyfile.txt 文件的数据变化。

test

用法:hadoop fs -test [defsz] URI
说明:根据参数测试路径/文件属性。-d 选项是测试路径是否目录;-e 路径是否存在;-f 路径是否文件;-s 路径是否为空;-z 文件长度是否为空;

  • 案例1:hadoop fs -test -f /fsshell/copyfile
    查看 /fsshell/copyfile 是否为文件,返回 0 为文件;

text

用法:hadoop fs -text src
说明:以 text 格式获取源文件。

  • 案例1:hadoop fs -text /fsshell/copyfile

touch

用法:hadoop fs -touch URI [URI …]
创建一个空文件。

  • 案例1:hadoop fs -touch /fsshell/emptyfile

touchz

用法:hadoop fs -touchz 等同于 用法:hadoop fs -touch 的使用,此处不再赘述;

truncate

用法:hadoop fs -truncate [-w] <长度> <路径>
说明:将指定文件模式匹配的所有文件截断为指定长度。-w 参数在执行阶段文件不可写状态;

 

posted @ 2023-06-22 16:48  ImreW  阅读(26)  评论(0编辑  收藏  举报