HDFS常用命令
<path> … hdfs中一个或多个路径,如果未指定,默认为/user/<currentUser>
<localsrc> … 本地文件系统的的一个或多个路径
<dst> hdfs中目标路径
查看帮助
命令:hdfs dfs -help [cmd ...]
参数:
cmd... 需要查询的一个或多个命令
创建目录
命令:hdfs dfs -mkdir [-p] <path> ...
参数:
-p 进行递归创建
创建一个空文件
命令:hdfs dfs -touchz <path> ...
查看目录或文件
命令:hdfs dfs -ls [-C] [-d] [-h] [-R] [-t] [-S] [-r] [-u] [<path> ...]
参数:
-C 仅显示文件和目录的路径
-d 目录列为普通文件
-h 以人类可读的方式格式化文件大小,而不是按字节数
-R 递归地列出目录的内容
-t 按修改时间对文件排序(最近的第一次)
-S 按大小对文件进行排序
-r 颠倒排序顺序
-u 使用上次访问的时间而不是修改来显示和排序
上传目录或文件
# put与copyFromLocal本质是进行复制操作,moveFromLocal本质是剪切操作
命令:hdfs dfs -put [-f] [-p] [-d] <localsrc> ... <dst>
参数:
-f 如果目标已存在,则覆盖该目标
-p 保留访问和修改时间、所有权和模式
-d 跳过临时文件的创建
命令:hdfs dfs -copyFromLocal [-f] [-p] [-d] <localsrc> ... <dst>
参数:
-f 如果目标已存在,则覆盖该目标
-p 保留访问和修改时间、所有权和模式
-d 跳过临时文件的创建
命令:hdfs dfs -moveFromLocal <localsrc> ... <dst>
下载目录或文件
# get与copyToLocal本质是进行复制操作
# 注意:下载多个文件时,目标必须是目录。
命令:hdfs dfs -get [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
参数:
-f 如果目标已存在,则覆盖该目标
-ignoreCrc 忽略CRC校验
-crc 使用CRC校验
命令:hdfs dfs -copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>
参数:
-f 如果目标已存在,则覆盖该目标
-ignoreCrc 忽略CRC校验
-crc 使用CRC校验
HDFS中复制目录或文件
命令:hdfs dfs -cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>
参数:
-f 如果目标已存在,则覆盖该目标
-p | -p[topax] 保留状态,参数[topax]分别表示(时间戳、所有权、权限、ACL、XAttr),无参数则不保留状态
-d 跳过临时文件的创建
HDFS中剪切目录或文件
命令:hdfs dfs -mv <src> ... <dst>
HDFS中删除目录或文件
命令:hdfs dfs -rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...
参数:
-f 如果文件不存在,不显示诊断消息或修改退出状态以反映错误
-[rR] 递归删除目录
-skipTrash 删除时不经过回收站,直接删除
-safely 需要安全确认
本地文件附加到目标文件中
命令:hdfs dfs -appendToFile <localsrc> ... <dst>
显示文件内容
命令:hdfs dfs -cat [-ignoreCrc] <src> ...
参数:
-ignoreCrc 忽略CRC校验
修改目录或文件权限
命令:hdfs dfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...
参数:
-R 递归修改文件
<MODE> 模式与用于shell命令的模式相同
<OCTALMODE> 数字表示
修改目录或文件所有者和组
命令:hdfs dfs -chown [-R] [OWNER][:[GROUP]] PATH...
参数:
-R 递归修改文件
OWNER 所有者
GROUP 所属组
命令:hdfs dfs -chgrp [-R] GROUP PATH...
参数:
-R 递归修改文件
GROUP 所属组
统计指定路径下,目录数、文件数、字节数
命令:hdfs dfs -count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] <path> ...
参数:
-q 显示配额和配额的使用情况
-h 以人类可读的方式格式化文件大小,而不是按字节数
-v 显示标题行
-t [<storage type>] 按存储类型显示配额,需要与参数-q或-u一起使用
-u 显示配额和配额的使用情况,但不显示详细的内容摘要
-x 不计算快照
显示文件系统的容量、可用空间和已用空间
命令:hdfs dfs -df [-h] [<path> ...]
参数:
-h 以人类可读的方式格式化文件大小,而不是按字节数
显示目录或文件的使用情况
命令:hdfs dfs -du [-s] [-h] [-x] <path> ...
参数:
-s 显示总使用情况,不显示每个独立目录或文件的使用情况
-h 以人类可读的方式格式化文件大小,而不是按字节数
-x 不计算快照
清空回收站
命令:hdfs dfs -expunge
查找目录或文件
# 查找与指定表达式匹配的所有文件,并对其应用选定的操作。如果未指定,则默认为当前工作目录。如果未指定表达式,则默认为-print
命令:hdfs dfs -find <path> ... <expression> ...
<expression>:
-name 匹配内容
-iname 忽略大小写匹配内容
-print 使当前路径名写入标准输出,后跟换行符
-print0 如果使用-print0表达式,则会附加ASCII空字符,而不是换行符。
显示文件末尾的1kb内容
命令:hdfs dfs -tail [-f] <file>
参数:
-f 随着文件的增长显示附加数据
合并下载文件
命令:hdfs dfs -getmerge [-nl] [-skip-empty-file] <src> <localdst>
参数:
-nl 在每个文件的末尾添加换行符
-skip-empty-file 不要为空文件添加新行字符
文件配额操作
设置数量配额
命令:hdfs dfsadmin -setQuota <quota> <dirname>...
参数:
quota 限额数量(其中目录会占用一个限额,比如设置为2个,实际允许的只有1个)
dirname 需要限额的路径
清除数量配额
命令:hdfs dfsadmin -clrQuota <dirname>...
参数:
dirname 需要限额的路径
设置空间大小限额
命令:hdfs dfsadmin -setSpaceQuota <quota> [-storageType <storagetype>] <dirname>...
参数:
quota 限额空间大小(空间配额会把副本也计算在内,例如1GB的数据,有3个副本,那么将会占用3GB的配额。)
-storageType 设置特定于存储类型的配额
可用的存储类型包括:RAM_DISK、DISK、
SSD、ARCHIVE
dirname 需要限额的路径
清除空间大小限额
命令:hdfs dfsadmin -clrSpaceQuota [-storageType <storagetype>] <dirname>...
参数:
-storageType 清除特定于存储类型的配额
可用的存储类型包括:RAM_DISK、DISK、
SSD、ARCHIVE
dirname 清除限额的路径
快照操作
注:创建快照需要管理员开启允许创建快照
开启允许拍摄快照
命令:hdfs dfsadmin -allowSnapshot <path>
参数:
path snaphottable目录的路径
关闭允许拍摄快照
命令:hdfs dfsadmin -disallowSnapshot <path>
参数:
path snaphottable目录的路径
获取当前用户有权拍摄快照的所有快照表目录
命令:hdfs lsSnapshottableDir
创建快照
命令:hdfs dfs -createSnapshot <snapshotDir> [<snapshotName>]
参数:
snapshotDir 快照目录
snapshotName 快照的名称
恢复快照
命令:hdfs dfs -cp <snapshotDir> <dst>
重命名快照
命令:hdfs dfs -renameSnapshot <snapshotDir> <oldName> <newName>
参数:
snapshotDir 快照目录
oldName 原快照的名称
newName 新快照的名称
删除快照
命令:hdfs dfs -deleteSnapshot <snapshotDir> <snapshotName>
参数:
snapshotDir 快照目录
snapshotName 快照的名称
比较两个快照的差异
命令:hdfs snapshotDiff <snapshotDir> <from> <to>
参数:
snapshotDir 快照目录的路径
from 原快照名称
to 要对比的快照名称
元数据的备份与还原
查看hdfs-site.xml
配置文件数据目录的位置,重点关注这两个目录
将目录里的文件拷贝出来,就可以备份操作。
查看备份前的文件
停止hadoop服务stop-all.sh
创建一个备份文件 mkdir /root/backup
进行元数据所在目录的拷贝cp -r /root/hadoop-2.7.7/hadoopDatas/namenodeDatas/ /root/hadoop-2.7.7/hadoopDatas/nnEdits/ /root/backup/
查看备份的文件ls /root/backup/
为了演示我们可以进行恢复操作,这里就先启动hadoop,修改hdfs里的文件,然后在进行恢复操作。
启动后,我们查看当前hdfs的文件
这就是备份前的内容,现在删除几个目录。等下我们将刚才备份出的元数据进行恢复。
再次查看文件内容
现在文件已经删除了,我们先停止hadoop,然后进行恢复。
我们需要删除原有的元数据rm -rf /root/hadoop-2.7.7/hadoopDatas/namenodeDatas/ /root/hadoop-2.7.7/hadoopDatas/nnEdits/
将备份文件恢复到元数据所在目录cp -r /root/backup/* /root/hadoop-2.7.7/hadoopDatas/
再次启动hadoop,查看文件
已经恢复到备份时的文件,到这备份就操作完成了。