Hadoop—hadoop fs 命令使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


FS Shell 简介

FS Shell
调用文件系统(FS)Shell命令应使用 hadoop fs 的形式。

所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。

对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。

一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child,以下示例中的文件或者目录都可以表示为这两种形式。(假设你配置文件中的默认值是namenode:namenodeport)。

大多数FS Shell命令的行为和对应的Unix Shell命令类似,不同之处在于操作的是hdfs文件系统内的文件。出错信息会输出到stderr,其他信息输出到stdout。


一、主要命令

命令 说明
hadoop fs -ls [-r ] < path > 查看HDFS目录下的文件和子目录
hadoop fs -mkdir < path > 创建HDFS目录
hadoop fs -rm [-r] < path > 删除HDFS下的文件及子目录
hadoop fs -touchz < path > 创建一个0字节的文件
hadoop fs -put /-moveFromLocal/-copyFromLocal < path > 上传文件到HDFS
hadoop fs -get < path > 下载文件到HDFS
hadoop fs -getmerge/-copyToLocal < path > 合并文件到HDFS
hadoop fs -mv < path > 移动HDFS上文件
hadoop fs -cp < path > 复制HDFS上文件
hadoop fs -cat/-text < path > 查看HDFS上文件
hadoop fs -tail < path > 查看HDFS文件最后1000个字节
hadoop fs -du [-s] [-h] < path > 查看HDFS文件的空间
hadoop fs -stat < path > 查看HDFS文件的创建时间
hadoop fs -count < path > 计算HDFS文件数和大小
hadoop fs -test < path > 检查HDFS文件
hadoop fs -chmod < path > 修改HDFS文件权限
hadoop fs -chown < path > 修改HDFS文件所有者和组
hadoop fs -chgrp < path > 修改HDFS所属的组
hadoop fs -setrep < path > 修改HDFS文件副本数
hadoop fs -expunge < path > 清空回收站

二、使用示例

1. 查看 HDFS 文件/目录

ls

使用方法:hadoop fs -ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [ < path > …

1)查看HDFS根目录下面列表
查看目录,返回它直接子文件的一个列表,就像在Unix中一样。
目录返回列表的信息如下:目录名 修改日期 修改时间 权限 用户ID 组ID

示例:

#列出目录下的文件内容
hadoop fs -ls /
#递归列出目录、子目录及文件信息
hadoop fs -ls -r /
hadoop fs -lsr /

2)查看HDFS文件
若查看文件,则返回文件信息如下:文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID

示例:

hadoop fs -ls /user/file1

2. 创建 HDFS 目录

mkdir

使用方法:hadoop fs -mkdir [-p] < path > …

示例:

#创建单个目录
hadoop fs -mkdir -p /file1
#创建多级目录
hadoop fs -mkdir -p /file1/file2/…

3. 删除 HDFS 目录/文件

rm

使用方法:hadoop fs -rm [-f] [-r|-R] [-skipTrash] [-safely] < src > …

示例:

#删除HDFS上指定文件
hadoop fs -rm /user/file1
#递归删除HDFS文件目录及文件
hadoop fs -rmr /user/file1
#为了避免误删数据,加了一个确认
hadoop fs -rmi /user/file1

4. 创建一个0字节的文件

touchz

使用方法:hadoop fs -touchz < path > …

示例:

hadoop fs -touchz /user/file1

5. 上传文件

put : 从本地系统拷贝文件到DFS
使用方法:hadoop fs -put [-f] [-p] [-l] [-d] [-t < thread count >] < localsrc > … < dst >

moveFromLocal : 等价于hadoop fs -put
使用方法:hadoop fs -moveFromLocal [-f] [-p] [-l] [-d] < localsrc > … < dst >

copyFromLocal : 等价于hadoop fs -put
使用方法:hadoop fs -copyFromLocal [-f] [-p] [-l] [-d] [-t < thread count >] < localsrc > … < dst >

示例:

hadoop fs -put /user/file1
hadoop fs -moveFromLocal /user/file1
hadoop fs -copyFromLocal /user/file1

6. 下载文件

get : 从DFS拷贝文件到文件系统,若多个文件,则dst必须是目录

使用方法:hadoop fs -get [-f] [-p] [-ignoreCrc] [-crc] < src > … < localdst >

示例:

hadoop fs -get /user/file1

7. 合并文件

getmerge : 从DFS拷贝多个文件,合并排序为一个文件到本地文件系统
使用方法:hadoop fs -getmerge [-nl] [-skip-empty-file] < src > < localdst >

copyToLocal : 等价于hadoop fs -get
使用方法:hadoop fs -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] < src > … < localdst >

示例:

hadoop fs -getmerge /user/file1
hadoop fs -copyToLocal /user/file1

8. 移动文件

mv : 将制定格式的文件move到指定的目标位置,若src为多个文件,则dst必须是目录

使用方法 : hadoop fs -mv < src > … < dst >

示例:

hadoop fs -mv /user/file1

9. 复制文件

cp : 拷贝文件到目标位置,当scr为多个文件时,dst必须是个目录。

使用方法:hadoop fs -cp [-f] [-p | -p[topax]] [-d] <
src > … < dst >

示例:

hadoop fs -cp /user/file1

10. 查看文件内容

cat
使用方法:hadoop fs -cat [-ignoreCrc] < src > …

text :将源文件输出为文本格式。允许的格式是zip和TextRecordInputStream,如果是压缩文件会先解压再查看
使用方法:hadoop fs -text [-ignoreCrc] < src > …

示例:

hadoop fs -cat hdfs://file1
hadoop fs -text hdfs://file1

11. 查看文件尾部

tail : 将文件的最后1000字节(1k)的内容输出到stdout

使用方法:hadoop fs -tail [-f] [-s ] < file >

示例:

hadoop fs -tail /user/file1

12. 查看文件空间大小

du

使用方法 : hadoop fs -du [-s] [-h] [-v] [-x] < path > …

示例:

hadoop fs -du /user/file1

#对应路径下每个文件夹和文件的大小,文件的大小用方便阅读的形式表示,例如用64M代替67108864
hadoop fs -du -h /user/file1

#显示文件大小,s代表显示只显示总计,显示此文件大小。
hadoop fs -du -s /user/file1
hadoop fs -dus

13. 查看文件状态

stat : 当使用-stat选项但不指定format时候,只打印文件创建日期,相当于%y

使用方法 : hadoop fs -stat [format] < path > …
说明:
当向HDFS上写文件时,可以通过设置dfs.block.size配置项来设置文件的block size,这导致HDFS上不同文件的block size是不同的。有时候我们需要知道HDFS上某个文件的block size,比如想知道该该文件作为job的输入会创建几个map等。Hadoop FS Shell提供了一个-stat选项可以达到目的。
hadoop fs -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

示例:

#打印文件创建日期
hadoop fs -stat hdfs://b1/apps/summary_fz_province/hive/summary_fz_province/cdc_zxt_user_info_tmp
2022-11-02 08:35:45 #文件创建日期

#打印文件的block size和备份个数
hadoop fs -stat “%o %r” hdfs://b1/apps/summary_fz_province/hive/summary_fz_province/cdc_zxt_user_info_tmp
0 0 #block size和备份个数

14. 统计文件数和大小

count :计数文件个数及所占空间的详情
输出表格的列的含义依次为:DIR_COUNT,FILE_COUNT,CONTENT_SIZE,FILE_NAME
或者如果加了-q的话,还会列出QUOTA,REMAINING_QUOTA,SPACE_QUOTA,REMAINING_SPACE_QUOTA。

使用方法 : hadoop fs -count [-q] [-h] [-v] [-t []] [-u] [-x] [-e] < path > …

示例:

hadoop fs -count [-q] hdfs://b1/apps/file1

15. 检查文件

test

使用方法 : hadoop fs -test -[defswrz] < path >
-e 检查文件是否存在,如果存在返回为0
-z 检查文件是0字节,如果是则返回0
-d 如果路径是个目录,则返回1,否则返回0

示例:

hadoop fs -test -e hdfs://b1/apps/file1

16. 修改文件权限

chmod : 改变文件的权限,使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。

使用方法 : hadoop fs -chmod [-R] <MODE[,MODE]… | OCTALMODE> PATH…

17. 修改文件的所有者和组

chown:改变文件的拥有者。使用-R将使改变在目录结构下递归进行。命令的使用者必须是超级用户。

使用方法 : hadoop fs -chown [-R] [OWNER][:[GROUP]] PATH…

18. 修改文件目录的属组

chgrp : 改变文件所属的组,使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。等价于-chown … GROUP …。

使用方法 : hadoop fs -chgrp [-R] GROUP PATH…

19. 修改文件的副本系数

setrep : 设置文件的备份级别。-R标志控制是否递归设置子目录及文件。

使用方法 : hadoop fs -setrep [-R] [-w]

示例:

#查看副本数
hadoop fs -ls hdfs://b1/apps/file
-rw-r–r-- 3 root analy 29318252 2022-11-02 16:35 hdfs://b1/apps/file #第二列为副本数

#修改副本数
hadoop fs -setrep -w 2 -R hdfs://b1/apps/file1

#再次查看副本数,变成2
hadoop fs -ls hdfs://b1/apps/file
-rw-r–r-- 2 root analy 29318252 2022-11-02 16:35 hdfs://b1/apps/file #第二列为副本数

20. 清空回收站

expunge

使用方法 : hadoop fs -expunge [-immediate]

示例:

hadoop fs -expunge


三、实际应用

实现目标:定时核查记录 hive 每天的更新时间
实现过程
1 、找表的存储路径
一种方法通过hive命令" desc formatted table_name " 得到表的详细信息,找到表的存储路径 “Location : 'hdfs://b1/apps/analy/hive/';
另一种方法通过hive命令 "show create table table_name ",找到 "LOCATION 'hdfs://b1/apps/analy/hive/ "
2、利用 hadoop fs -ls location 第六列是表的更新时间

猜你喜欢

转载自blog.csdn.net/sodaloveer/article/details/127666195