一、hdfs dfs与hadoop fs
命令的形式:hdfs dfs -linux命令
这与linux中命令操作是一样的。
hadoop fs等同于hdfs dfs
二、Hadoop命令
hadoop classpath: 打印当前hadoop环境的配置路径
(base) [root@hb-dev-hadoop-01 ~]# hadoop classpath
/opt/module/hadoop-3.2.0/etc/hadoop:/opt/module/hadoop-3.2.0/share/hadoop/common/lib/*:/opt/module/hadoop-3.2.0/share/hadoop/common/*:/opt/module/hadoop-3.2.0/share/hadoop/hdfs:/opt/module/hadoop-3.2.0/share/hadoop/hdfs/lib/*:/opt/module/hadoop-3.2.0/share/hadoop/hdfs/*:/opt/module/hadoop-3.2.0/share/hadoop/mapreduce/lib/*:/opt/module/hadoop-3.2.0/share/hadoop/mapreduce/*:/opt/module/hadoop-3.2.0/share/hadoop/yarn:/opt/module/hadoop-3.2.0/share/hadoop/yarn/lib/*:/opt/module/hadoop-3.2.0/share/hadoop/yarn/*
三、HDFS常用命令
(1)查看文件夹下的文件目录:hdfs dfs -ls
hdfs dfs -ls # 列出工作主目录下的信息
hdfs dfs -ls / # 列出hdfs文件系统中
hdfs dfs -ls /data/output # 列示/data/output/文件夹下的目录
(2)创建新文件夹:hdfs dfs -mkdir
# path可以是绝对路径,也可以是相对路径。
hdfs dfs -mkdir [-p] <path>
hdfs dfs -mkdir tmp # 在hdfs文件系统中/user/hadoop001目录下创建tmp目录
hdfs dfs -mkdir ./tmp # 同上 hdfs dfs -ls 查看
hdfs dfs -mkdir /tmp # 在hdfs文件系统的根目录下创建一个tmp目录
hdfs dfs -mkdir -p /tmp/data # 创建嵌套目录
(3)删除目录:hdfs dfs -rm -r -f
hdfs dfs -rm [-r] [-f] <uri> # 删除目录或文件,-r -f不能组合成-rf
hdfs dfs -rm -r -f /test # 删除根目录下的test目录
hdfs dfs -rmdir /test # 删除目录:只能删除空目录
hdfs dfs -rm -r /data/output # 删除data/output的目录
若开启回收站功能,目录并不会真正的被删除。
开启回收站配置:
# 打开配置文件 core-site.xml
vi /usr/local/hadoop-3.2.0/etc/hadoop/core-site.xml
# 添加如下属性配置,1440代表回收站保存一天数据
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
回收站位置:
hdfs dfs -ls #删除目录也会在终端打印回收站路径
当删除文件过大,超过了回收站的大小删除失败,添加如下参数:
# 删除文件 LICENSE.txt
# -skipTrash :代表永久删除,无法找回
hdfs dfs -rm -skipTrash hdfs://bigdata01:9000/README.txt
(4)查看目录:hdfs dfs -cat
hdfs dfs -cat <URI>
# 查看/user/hadoop001/tmp/exception.log 文件内容
hdfs dfs -cat ./tmp/exception.log
(5)寻找文件:hdfs dfs -find
# 从根目录下精确搜索exception.log文件
hdfs dfs -find / -name exception.log
# 从/user/hadoop001目录下搜索名称中包含ex字符串的文件
hdfs dfs -find /user/hadoop001 -name '*ex*'
(6)本地文件拷贝到hdfs:hdfs dfs -put
hdfs dfs -put [-f] [-p] [-l] [-d] [-t <thread count>] [ - | <localsrc1> .. ]. <dst>
# -f 如果已存在就覆盖
# -p 递归拷贝
hdfs dfs -put head.png tmp/head.png # 拷贝文件
hdfs dfs -put /tmp/pycharm_project_962/data/input/sf-crime /data/input/ # 将服务器sf-crime的文件夹拷贝到/data/input/文件夹
(7)hdfs文件下载到本地
hdfs dfs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>
# -p 保留访问权限 修改时间等信息
# -f 如果目标文件已存在,直接覆盖。
hdfs dfs -get ./tmp ./hdfs-temp-dic # 将hdfs中的tmp目录下载到本地并重命名
(8)复制文件:hdfs dfs -cp
hdfs dfs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
# -f 如果存在,直接覆盖。
hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2
hdfs dfs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
hdfs dfs -cp tmp ./temp # 将tmp拷贝并重命名为temp
(9)统计目录下文件夹数量、文件数量、目录下文件总字节数:
hadoop fs -count [-q] [-h] [-v] [-x] [-t [<storage type>]] [-u] [-e] [-s] <paths>\
hdfs dfs -count /user/hadoop001 # 对/user/hadoop001目录进行统计
结果每列含义:目录数 文件数 总大小(字节) 目录名称
(10)hdfs内部移动文件:hdfs dfs -mv
hdfs dfs -mv URI [URI ...] <dest>
# mv命令只能在hdfs文件系统中使用,不能跨系统。
hdfs dfs -mv tmp /tmp_home
(11)过滤hdfs中某个Block块大小超过10G
hdfs fsck / -blocks -locations | awk 'BEGIN{FS=": | +|"} $2=="Block" && $4>10*1024*1024*1024 {print $0}'
(12)过滤hdfs中某个目录的大小超过10G
hdfs dfs -du -s /path/directory | awk -v limit=10 '{ if ($1 > limit * 1024 * 1024 * 1024) print $0 }'
若需要过滤嵌套子目录的大小,可以使用以下方式:
hdfs dfs -du -s /path/directory/* | awk -v limit=10 '{ if ($1 > limit * 1024 * 1024 * 1024) print $0 }'