写点什么

hdfs 的集群间拷贝、归档、回收站等功能剖析

发布于: 42 分钟前

多个集群之间的数据拷贝


在我们实际工作当中,极有可能会遇到将测试集群的数据拷贝到生产环境集群,或者将生产环境集群的数据拷贝到测试集群,那么就需要我们在多个集群之间进行数据的远程拷贝,hadoop 自带也有命令可以帮我们实现这个功能


1) 本地文件拷贝 scp


cd /export/softwares/


scp -r jdk-8u141-linux-x64.tar.gz root@node02:/export/


集群之间的数据拷贝 distcp


cd /export/servers/hadoop-2.6.0-cdh5.14.0/


bin/hadoop distcp hdfs://node01:8020/jdk-8u141-linux-x64.tar.gz hdfs://cluster2:8020/


hadoop 归档文件 archive


每个文件均按块存储,每个块的元数据存储在 namenode 的内存中,因此 hadoop 存储小文件会非常低效。因为大量的小文件会耗尽 namenode 中的大部分内存。但注意,存储小文件所需要的磁盘容量和存储这些文件原始内容所需要的磁盘空间相比也不会增多。例如,一个 1MB 的文件以大小为 128MB 的块存储,使用的是 1MB 的磁盘空间,而不是 128MB。


Hadoop 存档文件或 HAR 文件,是一个更高效的文件存档工具,它将文件存入 HDFS 块,在减少 namenode 内存使用的同时,允许对文件进行透明的访问。具体说来,Hadoop 存档文件可以用作 MapReduce 的输入。


创建归档文件


第一步:创建归档文件


注意:归档文件一定要保证 yarn 集群启动


cd /export/servers/hadoop-2.6.0-cdh5.14.0


bin/hadoop archive -archiveName myhar.har -p /user/root /user


第二步:查看归档文件内容


hdfs dfs -lsr /user/myhar.har


hdfs dfs -lsr har:///user/myhar.har


第三步:解压归档文件


hdfs dfs -mkdir -p /user/harhdfs dfs -cp har:///user/myhar.har/* /user/har/


hdfs 快照 snapShot 管理


快照顾名思义,就是相当于对我们的 hdfs 文件系统做一个备份,我们可以通过快照对我们指定的文件夹设置备份,但是添加快照之后,并不会立即复制所有文件,而是指向同一个文件。当写入发生时,才会产生新文件


  1. 快照使用基本语法


1、 开启指定目录的快照功能


hdfs dfsadmin  -allowSnapshot  路径 
复制代码


2、禁用指定目录的快照功能(默认就是禁用状态)


hdfs dfsadmin  -disallowSnapshot  路径
复制代码


3、给某个路径创建快照 snapshot


hdfs dfs -createSnapshot  路径
复制代码


4、指定快照名称进行创建快照 snapshot


hdfs dfs  -createSanpshot 路径 名称    
复制代码


5、给快照重新命名


hdfs dfs  -renameSnapshot  路径 旧名称  新名称
复制代码


6、列出当前用户所有可快照目录


hdfs lsSnapshottableDir  
复制代码


7、比较两个快照的目录不同之处


hdfs snapshotDiff  路径1  路径2
复制代码


8、删除快照 snapshot


hdfs dfs -deleteSnapshot <path> <snapshotName>
复制代码


hdfs 回收站


​ 任何一个文件系统,基本上都会有垃圾桶机制,也就是删除的文件,不会直接彻底清掉,我们一把都是将文件放置到垃圾桶当中去,过一段时间之后,自动清空垃圾桶当中的文件,这样对于文件的安全删除比较有保证,避免我们一些误操作,导致误删除文件或者数据


回收站配置两个参数


默认值 fs.trash.interval=0,0 表示禁用回收站,可以设置删除文件的存活时间。


默认值 fs.trash.checkpoint.interval=0,检查回收站的间隔时间。


要求 fs.trash.checkpoint.interval<=fs.trash.interval。


启用回收站


修改所有服务器的 core-site.xml 配置文件


查看回收站


回收站在集群的 /user/root/.Trash/ 这个路径下


通过 javaAPI 删除的数据,不会进入回收站,需要调用 moveToTrash()才会进入回收站


//使用回收站的方式: 删除数据 @Testpublic void deleteFile() throws Exception{//1. 获取 FileSystem 对象 Configuration configuration = new Configuration();FileSystem fileSystem = FileSystem.get(new URI("hdfs://node01:8020"), configuration, "root");//2. 执行删除操作// fileSystem.delete(); 这种操作会直接将数据删除, 不会进入垃圾桶 Trash trash = new Trash(fileSystem,configuration);boolean flag = trash.isEnabled(); // 是否已经开启了垃圾桶机制 System.out.println(flag);


    trash.moveToTrash(new Path("/quota"));
//3. 释放资源 fileSystem.close();
}
复制代码


5、恢复回收站数据


hdfs dfs -mv trashFileDir hdfsdir


trashFileDir :回收站的文件路径


hdfsdir :将文件移动到 hdfs 的哪个路径下


6、清空回收站


hdfs dfs -expunge

发布于: 42 分钟前阅读数: 4
用户头像

还未添加个人签名 2021.03.07 加入

还未添加个人简介

评论

发布
暂无评论
hdfs的集群间拷贝、归档、回收站等功能剖析