一、集羣間數據拷貝
- scp實現兩個遠程主機之間的文件複製
scp -r hello.txt root@hadoop103:/user/kino/hello.txt // 推 push scp -r root@hadoop103:/user/kino/hello.txt hello.txt // 拉 pull scp -r root@hadoop103:/user/kino/hello.txt root@hadoop104:/user/kino //是通過本地主機中轉實現兩個遠程主機的文件複製;如果在兩個遠程主機之間ssh沒有配置的情況下可以使用該方式。
- 採用distcp命令實現兩個Hadoop集羣之間的遞歸數據複製
[kino@hadoop102 hadoop-2.7.2]$ bin/hadoop distcp
hdfs://hadoop102:9000/user/kino/hello.txt
hdfs://hadoop103:9000/user/kino/hello.txt
二、小文件存檔
-
HDFS 存儲小文件弊端
每個文件均按照塊存儲, 每個塊的元數據存儲在 NameNode 的內存中, 因此 HDFS 存儲小文件會非常低效。 因爲 大量的小文件會耗盡 NameNode 中的大部分內存。 單注意, 存儲小文件所需要的磁盤容量和數據塊的大小無關。 例如, 一個 1MB 的文件設置爲 128M 的塊存儲, 實際上使用的是 1MB 的磁盤空間, 而非 128MB。 -
解決存儲小文件辦法之一
HDFS 存檔文件或 HAR 文件, 是一個更高效的文件存檔工具, 她將文件存入 HDFS 塊, 在減少 NameNode 內存使用的同事, 允許對文件進行透明的訪問。 具體說來, HDFS 存檔文件對內還是一個個獨立的文件, 對 NameNode 而言卻是一個整體, 減少了 NameNode 的內存。
-
案例
① 需要啓動 YARN 進程
[kino@hadoop102 hadoop-2.7.2]$ start-yarn.sh
② 歸檔文件
把/user/kino/input目錄裏面的所有文件歸檔成一個叫input.har的歸檔文件,並把歸檔後文件存儲到/user/kino/output路徑下[kino@hadoop102 hadoop-2.7.2]$ bin/hadoop archive -archiveName input.har –p /user/kino/input /user/kino/output
③ 查看歸檔
[kino@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr /user/kino/output/input.har [kino@hadoop102 hadoop-2.7.2]$ hadoop fs -lsr har:///user/kino/output/input.har
④ 解歸檔文件
[kino@hadoop102 hadoop-2.7.2]$ hadoop fs -cp har:/// user/kino/output/input.har/* /user/kino