1、说明
Hadoop的操作命令基本分为几大类.
// hadoop整体shell命令
hadoop xxx :
// hdfs相关
hdfs xxxx:
// mr相关
yarn xxxx:
等等等
2、hadoop 系统命令
查看Hadoop版本
hadoop version
压缩文件
hadoop archive -archiveName NAME -p <parent path> <src>* <dest>
-NAME:压缩文件名,自己任意取;
-parent dir:压缩文件所在的父目录;
-src:要压缩的文件名;
-hdfs dst:压缩文件存放路径
ex:
hadoop archive -archiveName hadoop.har -p /user 1.txt 2.txt /des
# 将hdfs中/user目录下的文件1.txt,2.txt压缩成一个名叫hadoop.har的文件存放在hdfs中/des目录下
# 如果1.txt,2.txt不写就是将/user目录下所有的目录和文件压缩成一个名叫hadoop.har的文件存放在hdfs中/des目录下
# 显示har的内容可以用如下命令:hadoop fs -ls /des/hadoop.har
# 显示har压缩的是那些文件可以用如下命令:hadoop fs -ls -R har:///des/hadoop.har
两个HDFS之前拷贝数据
Hadoop distcp <srcurl> <desturl>
-i:忽略失败
-log <logdir>:记录日志到 <logdir>
-m <num_maps>:同时拷贝的最大数目
-overwrite:覆盖目标
-update:如果源和目标的大小不一样则进行覆盖
3、hadoop hdfs命令集
以下命令全是基于 hadoop fs [generic options]
- 文件及目录相关命令
创建文件夹
-mkdir [-p] <path>
-p 级联创建文件夹{aa,bb,cc}
上传本地文件到HDFS
-put [-f] [-p] [-l] <localsrc> ... <dst>
-copyFromLocal [-f] [-p] [-l] <localsrc> ... <dst>
-f: 强制覆盖
-p: 级联上传
两者的区别:
-put更宽松,可以把本地或者HDFS上的文件拷贝到HDFS中;而-copyFromLocal则更严格限制只能拷贝本地文件到HDFS中。
如果本地和HDFS上都存在相同路径,则-put跟趋于优先取HDFS的源。
下载HDFS文件到本地
-get [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
-copyToLocal [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
-ignorecrc:复制CRC校验失败的文件
-crc:复制文件以及CRC信息
-p:级联下载
合并多个文件下载到本地
-getmerge [-nl] <src> <localdst>
-nl:合并到local file中的hdfs文件之间会空出一行
ex:
hadoop fs -getmerge /tmp/test/aa.txt /tmp/test/bb.txt ./cc.txt
那么cc.txt里面包含了aa.txt bb.txt的内容。
复制
-cp [-f] [-p | -p[topax]] <src> ... <dst>
-f: 强制覆盖
-p: 级联上传
移动
-mv <src> ... <dst>
删除
# 删除文件或者文件夹
-rm [-f] [-r|-R] [-skipTrash] <src> ...
-r:强制删除
-f:递归删除
# 删除文件夹
-rmdir [--ignore-fail-on-non-empty] <dir> ...
剪切文件
# 从本地剪切文件到HDFS
-moveFromLocal <localsrc> ... <dst>
# 从HDFS剪切文件到本地
-moveToLocal <src> <localdst>
追加文件
-appendToFile <localsrc> ... <dst>
改变文件的所属租
-chgrp [-R] GROUP PATH...
-R:递归修改
# 命令的使用者必须是文件的所有者或者超级用户。
# 用户指南:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_permissions_guide.html
改变文件权限
-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...
-R:递归修改
# 命令的使用者必须是文件的所有者或者超级用户
改变文件的拥有着
-chown [-R] [OWNER][:[GROUP]] PATH...
-R:递归修改
# 命令的使用者必须是超级用户
清空回收站
-expunge
# 详情见:http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html
改变一个文件的副本系数
-setrep [-R] [-w] <rep> <path> ...
-R: 递归改变
-w:指定副本数量 最小为1
检测文件是否存在
-test -[defsz] <path>
-d:是否是目录
-e:文件是否存在
-z: 判断大小是否是0
显示访问控制列表ACLs(Access Control Lists)
-getfacl [-R] <path>
-R:递归显示
# 显示内容:
# file: /input.zip
# owner: hadoop
# group: supergroup
user::rw-
group::r--
other::r--
设置访问控制列表
-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]
[--set <acl_spec> <path>]
-R:递归修改
-m:修改
-x:删除指定规则
-b:基本的acl规则(所有者,群组,其他)被保留,其他规则全部删除.
-k:删除缺省规则
#acls默认未开启,直接使用该命令会报错
# 开启acls,配置hdfs-site.xml
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
扩展属性
-setfattr {-n name [-v value] | -x name} <path>
-n:属性名称
-v:属性值
-x:删除扩展属性
-getfattr [-R] {-n name | -d} [-e en] <path>
-R:递归
-n:显示指定名称的属性值
查找
-find <path> ... <expression> ...
创建一个空文件
-touchz <path> ...
# 创建一个空文件,如果存在指定名称的非空文件,则返回错误
查看文件
-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [<path> ...
-C:每栏由上至下列出项目
-d: –directory 将目录象文件一样显示,而不是显示其下的文件
-h: –human-readable 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
-R: –recursive 同时列出所有子目录层
-t:以文件修改时间排序
-S:根据文件大小排序
-r: –reverse 依相反次序排列
查看文件内容
-cat [-ignoreCrc] <src> ...
输出内容
-text [-ignoreCrc] <src> ...
# 将给定的文件以文本的格式输出,允许的格式zip、TextRecordInputStream、Avro。当文件为文本文件时,等同于cat。
输出文件最后1kb到控制台
-tail [-f] <file>
# 跟Unix命令一样
显示文件的校验和信息
-checksum <src> ...
# 显示文件的校验和信息。因为需要和存储文件每个块的datanode互相通信,因此对大量的文件使用此命令效率可能会低
- 统计相关
统计文件
-count [-q] [-h] [-v] [-x] <path> ...
-q:显示配额信息
(在多人共用的情况下,可以通过限制用户写入目录,并设置目录的quota ,防止不小心就把所有的空间用完造成别人无法存取的情况)。
配额信息包括:QUOTA、REMAINING_QUOTA、SPACE_QUOTA、REMAINING_SPACE_QUOTA
分别表示某个目录下档案及目录的总数、剩余目录或文档数量、目录下空间的大小、目录下剩余空间。
none和inf表示未配置。
-h:大小
-v:显示详情
# 每行代表的意思
# 目录个数,文件个数,文件总计大小,输入路径
查看目录大小
-du [-s] [-h] [-x] <path> ...
-s:汇总显示
-h:显示大小的样式
查看文件系统的使用情况
-df [-h] [<path> ...]
返回对应路径的状态信息
-stat [format] <path> ...]
[format]可选参数有:
%b(文件大小),%o(Block大小),%n(文件名),%r(副本个数),%y(最后一次修改日期和时间)
# 不选择的话默认是最后一次修改日期。
- 快照
快照命令
-createSnapshot <snapshotDir> [<snapshotName>]
-deleteSnapshot <snapshotDir> <snapshotName>
-renameSnapshot <snapshotDir> <oldName> <newName>
4、HDFS命令
-
hdfs dfsadmin 命令集
1、查看各节点的使用情况
命令:hdfs dfsadmin -report2、进入和离开安全模式
命令:hdfs dfsadmin -safemode enter/leave
注意:安全模式是只读模式3、获取当前安全模式
命令:hdfs dfsadmin -safemode get4、保存集群的名字空间
命令:hdfs dfsadmin -saveNamespace5、回滚编辑日志
命令:hdfs dfsadmin -rollEdits6、设置恢复失效存储
命令:hdfs dfsadmin -restoreFailedStorage true7、刷新节点
命令:hdfs dfsadmin -refreshNodes8、设置目录文件配额(目录+文件的个数)
命令:hdfs dfsadmin -setQuota9、设置空间配额
命令:hdfs dfsadmin -setSpaceQuota10、刷新ACL服务
命令:hdfs dfsadmin -refreshServiceAcl11、刷新组图
命令:hdfs dfsadmin -refreshUserToGroupsMappings12、刷新超级用户组配置
命令:hdfs dfsadmin -refreshSuperUserGroupsConfiguration13、刷新重新配置host:port
命令:hdfs dfsadmin -reconfig datanode14、回滚升级
命令:hdfs dfsadmin -rollingUpgrade15、保存namenode的元数据
命令:hdfs dfsadmin -metasave meta16、打印机架和机架上的节点信息
命令:hdfs dfsadmin -printTopology17、设置负载均衡带宽
命令:hdfs dfsadmin -setBalancerBandwidth18、允许对某条路径进行快照
命令:hdfs dfsadmin -allowSnapshot19、下载镜像文件到本地
命令:dfsadmin -fetchImage /tmp/test19、停止某个数据节点
命令:hdfs dfsadmin -shutdownDatanode node3:801020、获取数据节点信息
命令:hdfs dfsadmin -getDatanodeInfo21、触发指定的数据节点做一次数据块报告
命令:hdfs dfsadmin -triggerBlockReport -
hdfs getconf 命令集
1、获取namenode信息
命令:hdfs getconf -namenodes2、获取secondary nodenode信息
命令:hdfs getconf -secondaryNameNodes3、获取名字节点rpc通信地址
命令:hdfs getconf -nnRpcAddresses4、获取配置值
命令:hdfs getconf -confKey ‘dfs.blockreport.intervalMsec’5、获取备份节点列表
命令:hdfs getconf -backupNodes -
hdfs fsck 命令集
1、需要检测某个文件或文件夹的状态
命令:hdfs fsck path
查看文件或目录状态(HEALTHY/CORRUPT):如果检查结果为corrupt,说明文件中有损坏的块,需要修复
2、打印出丢失的块和它们所属的文件列表
命令:hdfs fsck -list-corruptfileblocks path3、打印文件和块信息
命令:hdfs fsck /tmp/ -files -blocks
注意:当指定的是目录时,-files会列出每个文件的block数,再加-blocks会打印每个文件的block的详细信息4、打印文件块的位置信息
命令:hdfs fsck /tmp -files -blocks -locations5、打印文件块的机架信息
命令:hdfs fsck /tmp/ -files -blocks -racks6、检查文件和文件快照
命令:hdfs fsck /tmp/ -includeSnapshots7、删除损坏的块
命令:hdfs fsck /tmp/map.tar.gz -delete8、打印副本的详细信息
命令:hdfs fsck /tmp/map.tar.gz -replicaDetails9、查看存储策略
命令:hdfs fsck / -storagepolicies10、 打印某个block所属的文件和位置信息
命令:hdfs fsck / -blockId blk_107374182511、将损坏的块删除(放到/lost+found)
命令:hdfs fsck /tmp -move