文章目录

  • 1. 集群间数据拷贝
  • 2. Hadoop归档
  • 3. 快照
  • 4. 回收站


1. 集群间数据拷贝

1)scp实现两个远程主机之间的文件复制

# 推 push
scp -r hello.txt root@bigdata111:/user/during/hello.txt		

# 拉 pull
scp -r root@bigdata112:/user/during/hello.txt  hello.txt		

scp -r root@bigdata112:/opt/module/hadoop-2.8.4/LICENSE.txt root@bigdata113:/opt/module/hadoop-2.8.4/LICENSE.txt

2)采用distcp命令实现两个hadoop集群之间的递归数据复制(注:不用设置其他,直接写IP)

bin/hadoop distcp hdfs://192.168.1.51:9000/LICENSE.txt hdfs://192.168.1.111:9000/HAHA

2. Hadoop归档

节省NameNode的内存空间。

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

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

# 前提:需要开启yarn
start-yarn.sh

# 创建目录并上传文件
hadoop fs -mkdir /guidang
hadoop fs -put a /guidang
hadoop fs -put b /guidang
hadoop fs -put c /guidang 
hadoop fs -put d /guidang 

# hadoop archive -archiveName 归档名称 -p 父目录 -r 复制因子 原路径(可多个)目的路径
hadoop archive -archiveName during.har -p /guidang -r 3 a b c d /

# 查看归档文件
hadoop fs -lsr har:///during.har 

# 取消归档
hadoop fs -cp har:///during.har/* /user/

3. 快照

快照相当于对目录做一个备份。并不会立即复制所有文件,而是指向同一个文件。当写入发生时,才会产生新文件。

# 开启快照
hdfs dfsadmin -allowSnapshot /idea 

# 禁止快照
hdfs dfsadmin -disallowSnapshot /idea 

# 创建快照,hdfs dfs -createSnapshot 路径
hdfs dfs -createSnapshot /idea 

# 查看快照内容
hadoop fs -ls /idea/快照名称 

# 重命名,hdfs dfs -renameSnapshot 路径 旧名称 新名称
hdfs dfs -renameSnapshot /idea 原快照名称 001 

# 列出用户所有可快照目录
hdfs lsSnapshottableDir 

# 删除一些文件后,通过复制文件恢复
hadoop fs -cp /idea/001/a /idea 

# 创建快照002, hdfs dfs -createSnapshot 路径 名称
hdfs dfs -createSnapshot /idea 002 

# 比较两次快照
hdfs snapshotDiff /idea 001 002 

# 删除快照 hdfs dfs -deleteSnapshot <path> <snapshotName>
hdfs dfs -deleteSnapshot /idea

4. 回收站

core-site.xml

<!-- 配置垃圾回收时间,即删除的文件的存活时间 -->
<!-- fs.trash.interval默认0,不回收。一般设成一周或半月。单位分钟。 -->
<property>
	<name>fs.trash.interval</name>
	<value>0</value>
</property>

<!-- fs.trash.checkpoint.interval=0,检查回收站的间隔时间。
要求fs.trash.checkpoint.interval<=fs.trash.interval。-->

<!-- 配置访问垃圾回收站用户名称(默认是dr.who) -->
<property>
	<name>hadoop.http.staticuser.user</name>
	<value>during</value>
</property>
# 还原被移到回收站的文件。
# hadoop fs -mv 文件在回收站的路径 要恢复到的路径 
hadoop fs -mv /user/during/.Trash/Current/user/during/input    /user/during/input

# 清空回收站
hdfs dfs -expunge
  • 通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站。
Trash trash = New Trash(conf);
trash.moveToTrash(path);
  • 回收站在集群中的路径:/user/during/.Trash/….