HDFS常见功能
集群间数据拷贝
-
scp实现两个远程主机之间的文件复制
scp -r hello.txt root@bigdata111:/user/itstar/hello.txt // 推 push scp -r root@bigdata112:/user/itstar/hello.txt hello.txt // 拉 pull
需要注意的是,无论是拷过去还是拷过来,路径都需要包含文件名。
适用于如果在两个远程主机之间ssh没有配置的情况下可以使用该方式。 -
采用distcp命令实现两个hadoop集群之间的递归数据复制(注:不用设置其他,直接写IP)
eg:bin/hadoop distcp hdfs://192.168.1.51:9000/LICENSE.txt hdfs://192.168.1.111:9000/HAHA
文件归档
每个文件均按块存储,每个块的元数据存储在namenode的内存中,因此hadoop存储小文件会非常低效。因为大量的小文件会耗尽namenode中的大部分内存。但注意,存储小文件所需要的磁盘容量和存储这些文件原始内容所需要的磁盘空间相比也不会增多。例如,一个1MB的文件以大小为128MB的块存储,使用的是1MB的磁盘空间,而不是128MB。
Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少namenode内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop存档文件可以用作MapReduce的输入。
操作过程:
(1)需要启动yarn进程。
start-yarn.sh
(2)归档成一个叫做xxx.har的文件夹,该文件夹下有相应的数据文件。Xx.har目录是一个整体,该目录看成是一个归档文件即可。
hadoop archive -archiveName 归档名称 -p 父目录 [-r <复制因子>] 原路径(可以多个) 目的路径
(3)查看归档
eg:
hadoop fs -lsr /user/my/myhar.har
hadoop fs -lsr har:///myhar.har
(4)解归档文件
eg:
//取消存档(要创建目的路径):
hadoop fs -cp har:/// user/my/myhar.har /* /user/itstar
//并行解压缩(目的路径不存在):
hadoop distcp har:/foo.har /001
hadoop distcp har:/A.har /123
快照管理
快照相当于对目录做一个备份。并不会立即复制所有文件,而是指向同一个文件。当写入发生时,才会产生新文件。
相关命令:
命令 | 功能 |
---|---|
hdfs dfsadmin -allowSnapshot 路径 | 开启指定目录的快照功能 |
hdfs dfsadmin -disallowSnapshot 路径 | 禁用指定目录的快照功能,默认是禁用 |
hdfs dfs -createSnapshot 路径 | 对目录创建快照 |
hdfs dfs -createSnapshot 路径 名称 | 指定名称创建快照 |
hdfs dfs -renameSnapshot 路径 旧名称 新名称 | 重命名快照 |
hdfs lsSnapshottableDir | 列出当前用户所有已快照目录 |
hdfs snapshotDiff 路径1 路径2 | 比较两个快照目录的不同之处 |
hdfs dfs -deleteSnapshot [path] [snapshotName] | 删除快照 |
回收站
在/opt/module/hadoop-2.8.4/etc/hadoop路径打开core-site.xml文件,进行回收站的配置。
(1)启用回收站:修改core-site.xml,配置垃圾回收时间为1分钟。
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
默认值fs.trash.interval=0,0表示禁用回收站,可以设置删除文件的存活时间。
默认值fs.trash.checkpoint.interval=0,检查回收站的间隔时间。
要求fs.trash.checkpoint.interval<=fs.trash.interval。
(2)查看回收站
回收站在集群中的路径:/user/itstar/.Trash/….
(3)修改访问垃圾回收站用户名称
进入垃圾回收站用户名称,默认是dr.who,修改用户仍然在core-site.xml中进行修改
<property>
<name>hadoop.http.staticuser.user</name>
<value>newname</value>
</property>
(4)通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站
需要在代码加入:
Trash trash = New Trash(conf);
trash.moveToTrash(path);
(5)恢复回收站数据
hadoop fs -mv 回收站路径 恢复路径
(6)清空回收站
hdfs dfs -expunge