第十三章 HDFS 2.x新特性

一、集群間數據拷貝

1、scp實現兩個遠程主機之間的文件複製

<code># 推 push
scp -r hello.txt bigdata@bigdata102:/user/bigdata/hello.txt  

# 拉 pull
scp -r bigdata@bigdata102:/user/bigdata/hello.txt hello.txt      

# 是通過本地主機中轉實現兩個遠程主機的文件複製;如果在兩個遠程主機之間ssh沒有配置的情況下可以使用該方式。
scp -r bigdata@bigdata102:/user/bigdata/hello.txt bigdata@bigdata103:/user/bigdata/   /<code>

2、採用discp命令實現兩個hadoop集群之間的遞歸數據複製

<code>[bigdata@bigdata101 hadoop-2.7.5]$  hadoop distcp hdfs://bigdata101:9000/user/bigdata/hello.txt hdfs://hadoop102:9000/user/bigdata/<code>


二、Hadoop存檔

1、hdfs存儲小文件弊端

每個文件均按塊存儲,每個塊的元數據存儲在 NameNode 的內存中,因此 hadoop 存儲小文件會非常低效。因為大量的小文件會耗盡 NameNode 中的大部分內存。但注意,存儲小文件所需要的磁盤容量和存儲這些文件原始內容所需要的磁盤空間相比也不會增多。例如,一個1MB的文件以大小為128MB的塊存儲,使用的是1MB的磁盤空間,而不是128MB。


2、解決存儲小文件辦法之一

Hadoop存檔文件或HAR文件,是一個更高效的文件存檔工具,它將文件存入HDFS塊,在減少NameNode內存使用的同時,允許對文件進行透明的訪問。具體說來,Hadoop存檔文件對內還是一個一個獨立文件,對NameNode而言卻是一個整體,減少了NameNode的內存。


3、案例實操

<code># 需要啟動yarn進程
[bigdata@bigdata101 hadoop-2.7.5]$ start-yarn.sh

# 歸檔文件
# 把/user/bigdata/input目錄裡面的所有文件歸檔成一個叫input.har的歸檔文件,並把歸檔後文件存儲到/user/bigdata/output路徑下。
[bigdata@bigdata101 hadoop-2.7.5]$ bin/hadoop archive -archiveName input.har -p /user/bigdata/input   /user/bigdata/output

#查看歸檔
[bigdata@bigdata101 hadoop-2.7.5]$ hadoop fs -lsr /user/bigdata/input/input.har
[bigdata@bigdata101 hadoop-2.7.5]$ hadoop fs -lsr har:///user/bigdata/output/input.har

#解歸檔文件
[bigdata@bigdata101 hadoop-2.7.5]$ hadoop fs -cp har:///user/bigdata/output/input.har/* /user/bigdata/<code>


三、快照管理

快照相當於對目錄做一個備份。並不會立即複製所有文件,而是指向同一個文件。當寫入發生時,才會產生新文件。

1、基本語法

① 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> (功能描述:刪除快照)/<snapshotname>/<path>

2、案例實操

(1)開啟/禁用指定目錄的快照功能

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfsadmin -allowSnapshot /user/bigdata/input
[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfsadmin -disallowSnapshot /user/bigdata/input/<code>

(2)對目錄創建快照

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfs -createSnapshot /user/bigdata/input

#通過web訪問hdfs://bigdata101:50070/user/bigdata/input/.snapshot/s…..// 快照和源文件使用相同數據

[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfs -lsr /user/bigdata/input/.snapshot//<code>

(3)指定名稱創建快照

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfs -createSnapshot /user/bigdata/input  testsnap/<code>

(4)重命名快照

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfs -renameSnapshot /user/bigdata/input/  testsnap new_testsnap/<code>

(5)列出當前用戶所有可快照目錄

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs lsSnapshottableDir/<code>

(6)比較兩個快照目錄的不同之處

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs snapshotDiff/<code>

(7)恢復快照

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hdfs dfs -cp
/user/bigdata/input/.snapshot/s20200304-134303.027 /user/<code>


四、回收站

1、默認回收站 默認值fs.trash.interval=0,0表示禁用回收站,可以設置刪除文件的存活時間。 默認值fs.trash.checkpoint.interval=0,檢查回收站的間隔時間。如果該值為0,則該值設置和fs.trash.interval的參數值相等。 要求fs.trash.checkpoint.interval<=fs.trash.interval。

2、啟用回收站

修改core-site.xml,配置垃圾回收時間為1分鐘。

<code><property>
   <name>fs.trash.interval/<name>
   <value>1/<value>
/<property>/<code>

3.查看回收站

回收站在集群中的路徑:/user/bigdata/.Trash/….

4.修改訪問垃圾回收站用戶名稱

進入垃圾回收站用戶名稱,默認是dr.who,修改為bigdata用戶

[core-site.xml]

<code><property>
 <name>hadoop.http.staticuser.user/<name>
 <value>bigdata/<value>
/<property>/<code>


5、通過程序刪除的文件不會經過回收站,需要調用moveToTrash()才進入回收站

<code>Trash trash = New Trash(conf);
trash.moveToTrash(path);/<code>

6、恢復回收站數據

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hadoop fs -mv
/user/bigdata/.Trash/Current/user/bigdata/input   /user/bigdata/input/<code>

7、清空回收站

<code>[bigdata@bigdata101 hadoop-2.7.5]$ hadoop fs -expunge/<code>



分享到:


相關文章: