Hadoop分布式文件系统命令行接口(HDFS Shell)详细版

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42278880/article/details/102549563

处事有何定凭?但求此心过得去
立业无论大小,总要此身做得来

HDFS快速入门

Hadoop分布式文件系统(HDFS)快速入门

HDFS知识梳理详细版

Hadoop分布式文件系统(HDFS)知识梳理(超详细)

HDFS Shell详细介绍

  1. appendToFile
    hadoop fs -appendToFile <localsrc> ... <dst>
    添加(追加)一个或多个源文件到目标文件中,或者将标准输入中的数据写入目标文件
  2. balancer
    hdfs balancer [-threshold <threshold>] [-policy <policy>] [-exclude [-f <hosts-file> | <comma-separated list of hosts>]] [-include [-f <hosts-file> | <comma-separated list of hosts>]] [-idleiterations <idleiterations>]
    用于平衡Hadoop集群中各DataNode中的文件块分布,以避免出现部分DataNode磁盘占用率高的问题
选项名称 说明
-threshold <threshold> 表示平衡的阀值,取值范围在0%到100%之间
即每个DataNode中空间使用率与HDFS集群总的空间使用率的差距百分比
-policy <policy> 平衡策略,默认DataNode
应用于重新平衡HDFS存储的策略,默认DataNode策略平衡了DataNode 级别的存储,这类似于之前发行版的平衡策略
BlockPool 策略平衡了块池级别和DataNode级别的存储,BlockPool策略仅适用于Federated HDFS服务
-exclude/include 参数-exclude-include是用来选择Balancer时,可以指定哪几个DataNode之间重分布
也可以从HDFS集群中排除哪几个节点不需要重分布
-idleiterations <iterations> 迭代检测的次数
  1. cat
    hadoop fs -cat URI [URI ...]
    将路径指定文件的内容输入到stdout
  2. chgrp
    hadoop fs -chgrp [-R] GROUP URI [URI ...]
    改变文件或目录的组信息
  3. chmod
    hadoop fs -chmod [-R] <MODE[,MODE] ... | OCTALMODE> URI [URI ...]
    修改文件权限,修改者必须拥有该目录权限,或者是拥护者的父用户
    -R表示递归
  4. chwon
    hadoop fs -chwon [-R] [OWNER] [:[GROUP]] URI [URI ...]
    修改文件拥有者,修改者必须拥有该文件或者是其父用户
    -R表示递归
  5. copyFromLocal
    hadoop fs -copyFromLocal <localsrc> URI
    拷贝本地文件到HDFS,类似于put命令,但可以拷贝目录
    -f表示覆盖原来已存在目录
  6. copyToLocal
    hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
    拷贝HDFS文件到本地,类似于get命令,但可以拷贝目录
  7. count``
    hadoop fs -count [-q] [-h] [-v] <paths>
    统计目录下的文件数和空间占用情况
    -h表示输出格式化后的信息
    -v表示输出表头
-count -count -q 输出列 说明
QUOTA 命名空间quota(创建的文件数目)
REMAINING_QUOTA 剩余的命名空间quota(剩余能创建的文件数目)
SPACE_QUOTA 物理空间quota(限制磁盘空间占用大小)
REMAININNG_SPACE_QUOTA 剩余的物理空间
DIR_COUNT 目录数目
FILE_COUNT 文件数目
CONTEXT_SIZE 目录逻辑空间大小
PATHNAME 路径
  1. cp
    hadoop fs -cp [-f] [-p | -p[topax]] URI [URI ...] <dest>
    将文件从源路径复制到目标路径
    该命令允许有多个源路径,此时目标路径必须是一个目录
    -f表示如果目标目录已存在,则覆盖之前的目录
  2. distcp
    hadoop distcp <param> <src>
    分布式拷贝(DistCp)是用于大规模集群内部和集群之间拷贝的工具
    它使用Map/Reduce实现文件分发、错误处理和恢复以及报告生成
    它把文件和目录的列表作为Map任务的输入,每个任务会完成源列表中部分文件的拷贝
    由于使用了Map/Reduce方法,这个工具在语义和执行上都会有特殊的地方
标识 描述 备注
-p[rbugp] Preserve
r:replication number
b:blocak size
u:user
g:group
p:permission
修改次数不会被保留
当指定-update时,更新的状态不会被同步,除非文件大小不同,比如文件被重新创建
-i 忽略失败 该选项回避默认情况提供关于拷贝的更精确的统计,同时它还将保留失败拷贝操作的日志,这些日志信息可以用于调试
如果一个Map失败了,但并没完成所有分块任务的尝试,这不会导致整个作业的失败
-log <logdir> 记录日志到<logdir> DisCp为每个文件的每次尝试拷贝操作都记录入职,并把日志作为Map的输出
如果一个Map失败了,当重新执行时这个日志不会被保留
-m <num_maps> 同时拷贝的最大数目 指定了拷贝数据时Map的数目
并不是Map越多吞吐量越大
-overwrite 覆盖目标 如果一个Map失败并且没有使用i选项,不仅仅那些拷贝失败的文件,这个分块任务中的所有文件都会被重新拷贝
它会改变生成目标路径的语义,用户需要小心使用该选项
-update 如果源和目标的大小不一样则进行覆盖 这不是“同步”操作,是否执行覆盖的唯一标准是源文件和目标文件大小是否相同
如果不同,则源文件替换目标文件
它会改变生成目标路径的语义,用户需要小心使用该选项
-f <urilist_uri> 使用<urilist_uri>作为源文件列表 等价于把所有文件名列在命令行中
urilist_uri列表应该是完整合法的URI

参考官网
12. df
hadoop fs -df [-h] URI [URI ...]
显示目录空闲空间
-h表示转换为更加易读的方式,比如67108864用64M代替
13. dfsadmin
hadoop dfsadmin [GENERIC_OPTIONS]
hadoop dfsadmin支持一些和HDFS管理相关的操作
hadoop dfsadmin -help能列出所有当前支持的命令

命令选项 描述
-report 报告文件系统的基本信息和统计信息
-safemode enter | leave | get | wait 安全模式维护命令
安全模式是NameNode的一个状态,在这种状态下,NameNode不接受对名字空间的更改(只读),并且不复制或者删除块
NameNode会在启动时自动进入安全模式,当配置的块最小百分比数满足最小的副本数条件时,会自动离开安全模式
安全模式可以手动进入,但是这样的话也必须手动关闭安全模式
-refreshNodes 重新读取hosts和exclude文件
更新允许连到NameNode的或那些需要退出或入编的DataNode的集合
-finalizeUpgrade 中街HDFS的升级操作,DataNode删除前一个版本的工作目录,之后NameNode也删除前一个版本的工作目录
这个操作完结整个升级过程
-upgradeProgress status | details | force 请求当前系统的升级状态以及状态细节,或者强制进行升级操作
-metasave filename 保存NameNode的主要数据结构到hadoop.log.dir属性指定的目录下的<filename>文件
对于下面每一项,<filename>中均有一行内容与之对应
1. NameNode收到的DataNode心跳信号
2. 等待被复制的块
3. 正在被复制的块
4. 等待被删除的块
-setQuota <quota> <dirname> … <dirname> 为每个目录<dirname>设定配额<quota>,目录配额是一个长整型整数,强制限定了目录树下的名字个数
下列情况之一会报错
1. N不是一个正整数
2. 用户不是管理员
3. 这个目录不存在或者是文件
4. 目录会马上超出新设定的配额
-clrQuota <dirname> … <dirname> 为每个目录<dirname>清除配额设定
下列情况之一会报错
1. 这个目录不存在或者是文件
2. 用户不是管理员
如果目录原来没有配额则不会报错
  1. expunge
    hadoop fs -expunge
    清空回收站
  2. fsck
    hdfs fsck <path> [-list-corruptfileblocks |[-move | -delete | -openforwrite] [-files [-blocks [-locations | - racks]]] [-includeSnapshots] [-storagepolicies] [-blockId <blk_Id>]
    检查HDFS上文件和目录的健康状态、获取文件的Block信息和位置信息等
选项名 说明
-list -corruptfileblocks 查看文件中损坏的块
-move 将损坏的文件移动至 /lost+found 目录
-delete 删除损坏的文件
-files 检查并列出所有文件状态
-openforwrite 检查并打印正在被打开执行写操作的文件
-blocks 打印文件的Block报告(需要和-files一起使用)
-locations 打印文件块的位置信息(需要和-files -blocks一起使用)
-racks 打印文件块位置所在的机架信息
  1. get
    hadoop fs -get [-ignorecrc] [-crc] <src> <localdst>
    复制文件到本地文件系统
  2. getConf
    hdfs getconf <COMMAND_OPTION>
    用于获取HDFS配置信息
命令选项 说明
path 从此路径开始检查
-delete 删除损坏的文件
-files 打印出正在检查的文件
-files -blocks 打印块报告
-files -blocks -locations 打印每个块的位置
-files -blocks -racks 打印出DataNode位置的网络拓扑
-includeSnapshots 如果给定路径指示快照表目录或其下有快照表目录,则包含快照数据
-list -corruptfileblocks 打印出丢失的块和它们所属的文件的列表
-move 将损坏的文件移至 /lost+found
-openforwrite 打印出已打开以供写入的文件
-storagepolicies 打印出块的存储策略摘要
-blockId 打印出该块的信息

参考官网

  1. getmerge
    hadoop fs -getmerge <src> <localhost> [addnl]
    接受一个源目录和一个目标作为输入,并且将源目录中所有的文件连接成本地目标文件
    addnl是可选的,用于指定在每个文件结尾添加一个换行符
  2. ls
    hadoop fs -ls <args>
  3. lsr
    hadoop fs -lsr <args>
    ls命令的递归版本,类似于Unix中ls -R
  4. mkdir
    hadoop fs -mkdir <paths>
    接受路径指定的URI作为参数,创建这些目录
    其行为类似于Unix的mkdir -p,它会创建路径中的各级父目录
  5. mv
    hadoop fs -mv URI [URI ...] <dest>
    将文件从源路径移动到目标路径
    该命令允许有多个源路径,此时目标路径必须是一个目录
    不允许在不同的文件系统间移动文件
  6. oev
    hdfs oev [OPTIONS] i INPUT_FILE -o OUTPUT_FILE
    用于查看edits文件
参数名 说明 必选参数 可选参数
-i, –inputFile <arg> 输入edits文件,如果是xml后缀,表示XML格式,其他表示二进制
-o,–outputFile <arg> 输出文件,如果已存在,则会覆盖原文件
-p,–processor <arg> 指定转换类型:binary (二进制格式),xml (默认,XML格式),stats (打印edits文件的静态统计信息)
-f, –fix -txids 重置输入edits文件中的transaction IDs
-r, –recover 使用recovery模式,跳过eidts中的错误记录
-v, –verbose 打印处理过程的输出
  1. oiv
    hdfs oiv [OPTIONS] -i INPUT_FILE
    用于将FsImage文件转换成其他格式文件,如文本文件、XML文件
    参数名 | 说明 | 必选参数 | 可选参数
    :-: | :-: | :-: | :-:
    -i, –inputFile <arg>|输入FsImage文件|√|
    -o, –outputFile <arg>|输出转换后的文件,如果已存在,则会覆盖原文件|√|
    -p, –processor <arg>|将FsImage文件转换成其他格式(LS\XML\FileDistribution),默认为LS||√
    -h, –help|显示帮助信息||√

  2. put
    hadoop fs -put <localsrc> ... <dst>
    从本地文件系统中复制单个或多个源路径到目标文件系统,也支持从标准输入中读入输入写入目标文件系统

  3. rm
    hadoop fs -rm URI [URI ...]
    删除指定的文件,只删除非空目录和文件
    -r 表示递归删除

  4. setrep
    hadoop fs -setrep [-R] [-w] <numReplicas> <path>
    改变一个文件的副本系数
    -R选项用于递归改变目录下所有文件的副本系数
    -w选项指定该请求等待操作执行结束

  5. stat
    hadoop fs -tail [-f] URI
    返回执行路径的统计信息

-f选项 说明
%F 文件类型
%b 文件大小
%g 所属组
%o Block大小
%n 文件名
%r 复制因子数
%u 文件所有者
%Y, %y 修改日期
  1. tail
    hadoop fa -tail [-f] URI
    将文件尾部1KB字节内容输出到stdout
    -f表示根据文件描述符进行追踪,当文件改名或被删除,追踪停止
  2. text
    hadoop fs -text <src>
    类似于cat,将源文件输出为文本格式
    允许的格式是zip和TextRecordInputStream
  3. touchz
    hadoop fs -touchz URI [URI ...]
    创建一个0字节的空文件
  4. truncate
    hadoop fs -truncate [-w] <length> <paths>
    文件截断
    -w表示要求该命令等待回复完成
  5. usage
    hadoop fs -usage command
    返回命令的帮助信息
  6. find
    hadoop fs - find <path > .. <expression>
    查找满足表达式的文件和文件夹
    没有配置path,默认是全部目录/
    没有配置表达式,默认为-print
expression选项 说明
-name pattern 不区分大小写,对大小写不敏感
-iname pattern 对大小写敏感
-print 打印
-print0 打印在一行
  1. getfacl
    hadoop fs -getfacl [-R] <path>
    获取文件的ACL权限
    -R指定递归查找
  2. HDFS快照
  • HDFS快照是一个只读的基于时间点文件系统拷贝,快照可以是整个文件系统的,也可以是其中的一部分,常用来作为数据备份和容灾,防止用户错误
  • 在DataNode上面的Blocks不会被复制,做Snapshot 的文件纪录了Block的列表和文件的大小,但是没有数据的复制
  • Snapshot 并不会影响HDFS 的正常操作,即修改会按照时间的反序记录,这样可以直接读取到最新的数据,快照数据是根据当前数据减去修改的部分计算出来
  • 快照会存储在snapshottable目录下,snapshottable存储的快照最多为65535个
  • snapshottable的目录数量没有限制,管理员可以将任何目录设置为snapshottable
  • 如果snapshottable里面已存放快照,那么该文件夹不能删除或者改名
命令 说明
hdfs dfsadmin -allowSnapshot <path> 建立快照目录
如果该操作成功,那么目录会变成snapshottable
hdfs dfsadmin -disallowSnapshot <path> 文件夹里面所有快照在快照失效前必须被删除,如果没有该目录,则会建立
hdfs dfsadmin -createSnapshot <path> [<snapshotName>] snapshottable目录创建一个快照
该命令需要snapshottable目录的权限
hdfs dfsadmin -deleteSnapshot <path> <snapshotName> 从一个snapshottable目录删除快照
该命令需要snapshottable目录的权限
hdfs dfsadmin -renameSnapshot <path> <oldName> <newName> 重命名快照
该命令需要snapshottable目录的权限
hdfs lsSnapshottableDir 获取当前用户的所有snapshottable
hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot> 得到两个快照之间的不同
该命令需要两个目录的权限

有疑问的朋友可以在下方留言或者私信我,我尽快回答
欢迎各路大神萌新指点、交流!
求关注!求点赞!求收藏!

猜你喜欢

转载自blog.csdn.net/weixin_42278880/article/details/102549563
今日推荐