来源:https://www.bilibili.com/video/av36033875?from=search&seid=12700632591522714293
1.集群间数据拷贝
1.1 scp实现两个远程主机之间的文件复制
scp -r hello.txt root@pdc:/user/pdc/hello.txt // 推 push
scp -r root@pdc:/user/pdc/hello.txt hello.txt // 拉 pull
scp -r root@pdc:/user/pdc/hello.txt root@pdc2:/user/pdc //是通过本地主机中转实现两个远程主机的文件复制;如果在两个远程主机之间ssh没有配置的情况下可以使用该方式。
1.2 采用discp命令实现两个hadoop集群之间的递归数据复制
bin/hadoop distcp hdfs://pdc:9000/user/pdc/hello.txt hdfs://pdc2:9000/user/pdc/hello.txt
2.存档
2.1 背景
每个文件均按块存储,每个块的元数据存储在namenode的内存中,因此hadoop存储小文件会非常低效,因为大量的小文件会耗尽namenode中的大部分内存(无论文件多小,如创建时间、路径等都不能少)。
但注意,存储小文件所需要的磁盘容量和存储这些文件原始内容所需要的磁盘空间相比也不会增多。例如,一个1MB的文件以大小为128MB的块存储,使用的是1MB的磁盘空间,而不是128MB。
Hadoop存档文件或HAR文件,是一个更高效的文件存档工具,它将文件存入HDFS块,在减少namenode内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop存档文件可以用作MapReduce的输入。
假设有1w个1k的文件,块大小为128M,则可以将128M大小的文件打成HAR文件,放入块中,这样就能使块的数量大大减小,检索的时候也能按块检索了
2.2 实例
1.需要启动yarn进程,因为要跑mapReduce
start-yarn.sh
2.归档文件
归档成一个叫做xxx.har的文件夹,该文件夹下有相应的数据文件。Xx.har目录是一个整体,该目录看成是一个归档文件即可。(-p必须加)
bin/hadoop archive -archiveName myhar.har -p /user/root /user/my
3.查看归档
hadoop fs -lsr /user/my/myhar.har
hadoop fs -lsr har:///myhar.har
4.解归档文件,即拷贝到/user/root
hadoop fs -cp har:///user/my/myhar.har /* /user/root
3.快照管理
快照相当于对目录做一个备份。
并不会立即复制所有文件,而是指向同一个文件。当写入发生时,才会产生新文件。
基本语法:
(1)hdfs dfsadmin -allowSnapshot 路径 (功能描述:开启指定目录的快照功能)
(2)hdfs dfsadmin -disallowSnapshot 路径 (功能描述:禁用指定目录的快照功能,默认是禁用)
(3)hdfs dfs -createSnapshot 路径 (功能描述:对目录创建快照)
(4)hdfs dfs -createSnapshot 路径 名称 (功能描述:指定名称创建快照)
(5)hdfs dfs -renameSnapshot 路径 旧名称 新名称 (功能描述:重命名快照)
(6)hdfs lsSnapshottableDir (功能描述:列出当前用户所有可快照目录)
(7)hdfs snapshotDiff 路径1 路径2 (功能描述:比较两个快照目录的不同之处)
(8)hdfs dfs -deleteSnapshot(功能描述:删除快照)
4.垃圾回收站
4.1 默认回收站
默认值fs.trash.interval=0,0表示禁用回收站。我们可以设置删除文件的存活时间。
默认值fs.trash.checkpoint.interval=0,为检查回收站的间隔时间。
要求fs.trash.checkpoint.interval<=fs.trash.interval,即检查时间小于等于删除时间
流程:
4.2启用回收站
修改core-site.xml,配置垃圾回收时间为1分钟。
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
4.3 查看回收站
回收站在集群中的;路径:/user/pdc/.Trash/….
4.4 修改访问垃圾回收站用户名称
进入垃圾回收站用户名称,默认是dr.who,修改为pdc用户
[core-site.xml]:
<property>
<name>hadoop.http.staticuser.user</name>
<value>pdc</value>
</property>
4.5 JavaAPI
通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站
Trash trash = New Trash(conf);
trash.moveToTrash(path);
4.6 恢复回收站还存在的数据
hadoop fs -mv /user/atguigu/.Trash/Current/user/atguigu/input /user/atguigu/input
4.7 清空回收站
hdfs dfs -expunge