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配置文件数据目录的位置,重点关注这两个目录

java判断hdfs文件是否存在 hdfs判断目录是否为空_java判断hdfs文件是否存在


将目录里的文件拷贝出来,就可以备份操作。

查看备份前的文件

java判断hdfs文件是否存在 hdfs判断目录是否为空_java判断hdfs文件是否存在_02


停止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/

java判断hdfs文件是否存在 hdfs判断目录是否为空_递归_03

查看备份的文件ls /root/backup/

java判断hdfs文件是否存在 hdfs判断目录是否为空_hadoop_04


为了演示我们可以进行恢复操作,这里就先启动hadoop,修改hdfs里的文件,然后在进行恢复操作。

启动后,我们查看当前hdfs的文件

java判断hdfs文件是否存在 hdfs判断目录是否为空_big data_05


这就是备份前的内容,现在删除几个目录。等下我们将刚才备份出的元数据进行恢复。

java判断hdfs文件是否存在 hdfs判断目录是否为空_hadoop_06


再次查看文件内容

java判断hdfs文件是否存在 hdfs判断目录是否为空_递归_07


现在文件已经删除了,我们先停止hadoop,然后进行恢复。

我们需要删除原有的元数据rm -rf /root/hadoop-2.7.7/hadoopDatas/namenodeDatas/ /root/hadoop-2.7.7/hadoopDatas/nnEdits/

java判断hdfs文件是否存在 hdfs判断目录是否为空_hdfs_08


将备份文件恢复到元数据所在目录cp -r /root/backup/* /root/hadoop-2.7.7/hadoopDatas/

java判断hdfs文件是否存在 hdfs判断目录是否为空_递归_09


再次启动hadoop,查看文件

java判断hdfs文件是否存在 hdfs判断目录是否为空_big data_10


已经恢复到备份时的文件,到这备份就操作完成了。