1. 基本语法
使用Hadoop命令的两种方式:
hadoop fs -具体命令 命令参数
【推荐用这种方式】hdfs dfs -具体命令 命令参数
:底层还是调用hadoop fs 具体命令
- l两者区别:前者可操作任意文件系统,不仅仅是hdfs文件系统,还能操作本地、谷歌GFS等,使用范围更广;后者只能操作hdfs文件系统。
注意:因为配置了
$HADOOP_HOME
及相关环境变量。所以可以在linux系统的任意地方敲上面的命令。
2. 查看帮助信息
- 查看所有命令:
hadoop fs
- 查看某个命令细节:
hadoop fs -help 具体命令
,如:hadoop fs -help rm
3. 常用命令
3.1 文件相关命令
-
打印目录:
hadoop fs -ls /
-
创建文件夹:
hadoop fs -mkdir /wcinput
-
删除文件:
hadoop fs -rm /wcoutput
①-rm
用于删除非递归文件夹/文件
②-rmr
用于递归删除文件夹 -
剪切粘贴文件:
hadoop fs -mv 原文件地址 目标文件地址
会删除源文件 -
复制粘贴:
hadoop fs -cp 原文件地址 目标文件地址
不会删除源文件 -
修改权限位:
hadoop fs -chmod 777 /a.txt
-
修改文件拥有者和所属组:
- 只修改拥有者:
hadoop fs -chown hao /a.txt
- 同时修改拥有者和所属组:
hadoop fs -chown hao:root /a.txt
- 只修改拥有者:
-
打印文本内容:
- 全部:
hadoop fs -cat /a.txt
- 前5行:
hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | head -n 5
- 末尾5行:
hadoop fs -cat /test/gonganbu/scene_analysis_suggestion/* | tail -n 5
- 打印文本末尾1KB内容:
hadoop fs -tail /a.txt
- 全部:
-
查看文件属性:
-
查看文本行数:
hadoop fs -cat hdfs://172.16.0.226:8020/test/sys_dict/sysdict_case_type.csv |wc -l
-
查看文件大小(单位byte):
hadoop fs -du -s -h hdfs://172.16.0.226:8020/test/sys_dict/*
可选参数
①hadoop fs -du
用于显示Hadoop分布式文件系统(HDFS)中指定目录或文件的大小
②-s
列出总大小,不加该参数时会列出文件夹下每个文件大小
③-h
以适当的单位展示可以一次性查看多个文件:
-
查看文件夹大小:
hadoop fs -dus 集群文件夹
-
查看文件数量:
hadoop fs -count hdfs://172.16.0.226:8020/test/sys_dict/*
-
-
将文本文件或某些格式的非文本文件通过文本格式输出:
hadoop fs -text < hdsf file>
-
测试文件/目录是否存在:
hadoop fs -test -[ezd] URI
(在开发中会遇到)
hadoop fs -Dhadoop.job.ugi=xxx,xxx -fs.default.name=afs://kunpeng.afs:9902 -test -e "/user/vinovel/settlement/share/cep/xiaoshuo$DATE"
3.2 变量
- 打印变量值:
hadoop fs -echo $PATH
3.2 上传 / 下载 命令
-
本地–>服务器
- 剪切上传:
hadoop fs -moveFromLocal shuguo.txt /sanguo
- 复制上传
hadoop fs -copyFromLocal weiguo.txt /sanguo
hadoop fs -put aa.txt /wcinput/aa.txt
注意:上传时,目的地址是文件地址,并不是文件夹地址!!!所以是
/wcinput/aa.txt
不是/wcinput/
# 实际使用例子 /home/work/env/hadoop_env/hadoop-client/hadoop/bin/hadoop fs -D hadoop.job.ugi=xxx -D fs.default.name=afs://tianqi.afs.baidu.com:9902 -put bbsJob.jar /user/feed/biglog/bbs/jar/bbsJob.jar # /home/work/env/hadoop_env/hadoop-client/hadoop/bin/hadoop 是没有配置环境变量下,执行hadoop # -D 是设置hadoop的参数 # hadoop.job.ugi用于指定ugi账号密码 # fs.default.name用于指定集群地址 # -put 是用于上传文件
- 细节:不支持覆盖写入,使用"put"命令将本地的一个文件写入到HDFS中已经存在的同名文件时,系统会报错。可以先删除,在写入
hadoop fs -rm /path/to/existingfile hadoop fs -put /local/path/newfile /path/to/existingfile
- 剪切上传:
-
服务器–>本地
- 复制下载
hadoop fs -copyToLocal /sanguo/shuguo.txt ./
hadoop fs -get /wcinput/aa.txt a.txt
- 复制下载
3.3 查看覆盖配置信息
-
设置或覆盖 Hadoop 配置参数:
-D
hadoop fs -D hadoop.job.ugi=username,password -D fs.default.name=afs://tianqi.afs.baidu.com:9902 -ls /user/username # -D hadoop.job.ugi=username,password 是设置ugi # -D fs.default.name=afs://tianqi.afs.baidu.com:9902 是设置集群地址
3.4 其他
-
追加一个文件到已经存在的文件末尾:
hadoop fs -appendToFile liubei.txt /sanguo/shuguo.txt
: liubei.txt追加到shuguo.txt文件末尾 -
设置HDFS中文件副本数量:
hadoop fs -setrep 10 /jinguo/weiguo.txt
注意:设置/jinguo/weiguo.txt的副本数量为10个副本。但是我们目前集群中只有3台服务器,所以最多只有3个副本,此时 hdfs 会先将 /jinguo/weiguo.txt副本数量设置为10,等将来节点数量如果增加了,就会在新节点中也备份/jinguo/weiguo.txt副本。