Hadoop 常用 Shell 命令

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> ...
# 创建一个空文件,如果存在指定名称的非空文件,则返回错误
  • 帮助

    详细帮助

    -help [cmd …]

    用法

    -usage [cmd …]

  • 查看相关

查看文件

-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 -report

    2、进入和离开安全模式
    命令:hdfs dfsadmin -safemode enter/leave
    注意:安全模式是只读模式

    3、获取当前安全模式
    命令:hdfs dfsadmin -safemode get

    4、保存集群的名字空间
    命令:hdfs dfsadmin -saveNamespace

    5、回滚编辑日志
    命令:hdfs dfsadmin -rollEdits

    6、设置恢复失效存储
    命令:hdfs dfsadmin -restoreFailedStorage true

    7、刷新节点
    命令:hdfs dfsadmin -refreshNodes

    8、设置目录文件配额(目录+文件的个数)
    命令:hdfs dfsadmin -setQuota

    9、设置空间配额
    命令:hdfs dfsadmin -setSpaceQuota

    10、刷新ACL服务
    命令:hdfs dfsadmin -refreshServiceAcl

    11、刷新组图
    命令:hdfs dfsadmin -refreshUserToGroupsMappings

    12、刷新超级用户组配置
    命令:hdfs dfsadmin -refreshSuperUserGroupsConfiguration

    13、刷新重新配置host:port
    命令:hdfs dfsadmin -reconfig datanode

    14、回滚升级
    命令:hdfs dfsadmin -rollingUpgrade

    15、保存namenode的元数据
    命令:hdfs dfsadmin -metasave meta

    16、打印机架和机架上的节点信息
    命令:hdfs dfsadmin -printTopology

    17、设置负载均衡带宽
    命令:hdfs dfsadmin -setBalancerBandwidth

    18、允许对某条路径进行快照
    命令:hdfs dfsadmin -allowSnapshot

    19、下载镜像文件到本地
    命令:dfsadmin -fetchImage /tmp/test

    19、停止某个数据节点
    命令:hdfs dfsadmin -shutdownDatanode node3:8010

    20、获取数据节点信息
    命令:hdfs dfsadmin -getDatanodeInfo

    21、触发指定的数据节点做一次数据块报告
    命令:hdfs dfsadmin -triggerBlockReport

  • hdfs getconf 命令集

    1、获取namenode信息
    命令:hdfs getconf -namenodes

    2、获取secondary nodenode信息
    命令:hdfs getconf -secondaryNameNodes

    3、获取名字节点rpc通信地址
    命令:hdfs getconf -nnRpcAddresses

    4、获取配置值
    命令:hdfs getconf -confKey ‘dfs.blockreport.intervalMsec’

    5、获取备份节点列表
    命令:hdfs getconf -backupNodes

  • hdfs fsck 命令集

    1、需要检测某个文件或文件夹的状态
    命令:hdfs fsck path
    查看文件或目录状态(HEALTHY/CORRUPT):

    如果检查结果为corrupt,说明文件中有损坏的块,需要修复

    2、打印出丢失的块和它们所属的文件列表
    命令:hdfs fsck -list-corruptfileblocks path

    3、打印文件和块信息
    命令:hdfs fsck /tmp/ -files -blocks
    注意:当指定的是目录时,-files会列出每个文件的block数,再加-blocks会打印每个文件的block的详细信息

    4、打印文件块的位置信息
    命令:hdfs fsck /tmp -files -blocks -locations

    5、打印文件块的机架信息
    命令:hdfs fsck /tmp/ -files -blocks -racks

    6、检查文件和文件快照
    命令:hdfs fsck /tmp/ -includeSnapshots

    7、删除损坏的块
    命令:hdfs fsck /tmp/map.tar.gz -delete

    8、打印副本的详细信息
    命令:hdfs fsck /tmp/map.tar.gz -replicaDetails

    9、查看存储策略
    命令:hdfs fsck / -storagepolicies

    10、 打印某个block所属的文件和位置信息
    命令:hdfs fsck / -blockId blk_1073741825

    11、将损坏的块删除(放到/lost+found)
    命令:hdfs fsck /tmp -move

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值