文章目录
- 1. 集群间数据拷贝
- 2. 小文件存档
- 2.1 HDFS 存储小文件弊端
- 2.2 解决存储小文件办法之一
- 2.3 案例操作
- 3. 回收站
- 3.1 开启回收站功能参数说明
- 3.2 回收站工作机制
- 4. 快照管理
- 4.1 快照管理
- 4.2 案例操作
1. 集群间数据拷贝
- scp实现两个远程主机之间的文件复制
推 push
$ scp -r hello.txt root@hadoop103:/user/dwjf321/hello.txt
拉 pull
$ scp -r root@hadoop103:/user/atguigu/hello.txt hello.txt
通过本地主机中转实现两个远程主机的文件复制;如果在两个远程主机之间ssh没有配置的情况下
$ scp -r root@hadoop103:/user/dwjf321/hello.txt root@hadoop104:/user/dwjf321
- 采用
distcp
命令实现两个Hadoop集群之间的递归数据复制
[dwjf321@hadoop102 hadoop-2.7.2]$ bin/hadoop distcp hdfs://haoop102:9000/user/atguigu/hello.txt hdfs://hadoop103:9000/user/atguigu/hello.txt
2. 小文件存档
2.1 HDFS 存储小文件弊端
每个文件均按块存储,每个块的元数据存储在 NameNode 的内存中,因此 HDFS 存储小文件会非常低效。因为大量小文件会耗尽 NameNode 中的大部分内存,并且增加寻址时间。
但注意,存储小文件所需的磁盘容量和数据块的大小无关。例如,一个 1MB 的文件设置为 128MB 的块存储,实际使用的是 1MB 的磁盘空间,而不是 128MB。
2.2 解决存储小文件办法之一
HDFS 存档文件或 HAR 文件,是一个更搞笑的文件存档工具,它将文件存入 HDFS 块,在减少 NameNode 内存使用的同事,允许对文件进行透明的访问。具体来说,HDFS 存档文件对内还是一个一个独立文件,对 NameNode 而言却是一个整体,减少 NameNode 的内存。
2.3 案例操作
- 启动 YARN 进程
[dwjf321@hadoop102 hadoop-2.7.2]$ start-yarn.sh
- 归档文件
把/user/dwjf321/input
目录里面的所有文件归档成一个叫input.har
的归档文件,并把归档后文件存储到/user/dwjf321/output
路径下。
[dwjf321@hadoop102 hadoop-2.7.2]$ bin/hadoop archive -archiveName input.har –p /user/dwjf321/input /user/dwjf321/output
- 查看文档
[dwjf321@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr /user/dwjf321/output/input.har
[dwjf321@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr har:///user/dwjf321/output/input.har
- 解归档文件
[dwjf321@hadoop102 hadoop-2.7.2]$ hadoop fs -cp har:/// user/dwjf321/output/input.har/* /user/dwjf321
3. 回收站
开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。
3.1 开启回收站功能参数说明
-
fs.trash.interval
:默认值0,表示禁用回收站,其他值表示设置文件的存活时间。 -
fs.trash.checkpoint.interval
:检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval
的参数值相等。 - 要求
fs.trash.checkpoint.interval
<fs.trash.interval
。
3.2 回收站工作机制
回收站
- 启用回收站
修改core-site.xml
,配置垃圾回收时间为1分钟。
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
- 查看回收站
回收站在集群中的路径:/user/dwjf321/.Trash/….
- 修改访问垃圾回收站用户名称
进入垃圾回收站用户名称,默认是dr.who
,修改core-site.xml
为dwjf321用户
<property>
<name>hadoop.http.staticuser.user</name>
<value>dwjf321</value>
</property>
- 通过程序删除的文件不会经过回收站,需要调用
moveToTrash()
才进入回收站
Trash trash = New Trash(conf);
trash.moveToTrash(path);
- 恢复回收站数据
[dwjf321@hadoop102 hadoop-2.7.2]$ hadoop fs -mv /user/dwjf321/.Trash/Current/user/dwjf321/input /user/dwjf321/input
- 清空回收站
[dwjf321@hadoop102 hadoop-2.7.2]$ hadoop fs -expunge
4. 快照管理
4.1 快照管理
快照相当于对目录做了一个备份。并不会立即复制所有文件,而是记录文件变化。
操作 | 功能描述 |
hdfs dfsadmin -allowSnapshot 路径 | 开启指定目录的快照功能 |
hdfs dfsadmin -disallowSnapshot 路径 | 禁用指定目录的快照功能,默认是禁用 |
hdfs dfs -reateSnapshot 路径 | 对目录创建快照 |
hdfs dfs -reateSnapshot 路径 名称 | 指定名称创建快照 |
hdfs dfs -renameSnapshot 路径 旧名称 新名称 | 重命名快照 |
hdfs dfs lsSnapshottableDir | 列出当前用户所有可快照目录 |
hdfs dfs snapshotDiff 路径1 路径2 | 比较两个快照目录的不同之处 |
hdfs dfs -deleteSnapshot 路径 快照名 | 删除快照 |
4.2 案例操作
- 开启/禁用指定目录的快照功能
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -allowSnapshot /user/dwjf321/input
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfsadmin -disallowSnapshot /user/dwjf321/input
- 对目录创建快照
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfs -createSnapshot /user/dwjf321/input
通过web访问 hdfs://hadoop102:50070/user/dwjf321/input/.snapshot/s……// 快照和源文件使用相同数据
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfs -lsr /user/dwjf321/input/.snapshot/
- 指定名称创建快照
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfs -createSnapshot /user/dwjf321/input test_20201022
- 重命名快照
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfs -renameSnapshot /user/dwjf321/input/ test_20201022 test_20201023
- 列出当前用户所有可快照目录
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs lsSnapshottableDir
- 比较两个快照目录的不同之处
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs snapshotDiff /user/dwjf321/input/ . .snapshot/test_20201023
- 恢复快照
[dwjf321@hadoop102 hadoop-2.7.2]$ hdfs dfs -cp /user/dwjf321/input/.snapshot/test_20201023-1343233.027 /user