hadoop文件系统上的小文件合并-Hadoop Archives

1. 什么是Hadoop archives#

Hadoop archives是特殊的档案格式。一个Hadoop archive对应一个文件系统目录。 Hadoop archive的扩展名是.har。Hadoop archive包含元数据(形式是_index和_masterindx)和数据(part-)文件。_index文件包含了档案中的文件的文件名和位置信息。

2. 创建archives#

创建archives是一个Map/Reduce job。你应该在map reduce集群上运行这个命令。
用法:hadoop archive -archiveName name -p <parent> <src>* <dest>

(1) -archiveName用来指定要创建的archive的文件名,必须以.har结尾,例如:foo.har;
(2) 参数"-p"为src path的前缀

示例1:

Copy
hadoop archive -archiveName IotBillBackup201805.har -p /IotBillBackup201805 /har/IotBillBackup201805

在上面的例子中,/IotBillBackup201805目录下的所有文件会被归档到这个文件系统目录下/har/IotBillBackup201805/IotBillBackup201805.har。
示例2:

Copy
hadoop archive -archiveName foo.har -p /user/hadoop dir1 dir2 /user/zoo/

在上面的例子中,/user/hadoop/dir1 和 /user/hadoop/dir2 会被归档到这个文件系统目录下/user/zoo/foo.har。
注意:当创建archive时,源文件不会被更改或删除

3. 访问archives#

Copy
hdfs dfs -ls har:///har/IotBillBackup201805/IotBillBackup201805.har hdfs dfs -ls har:///user/zoo/foo.har

4. 解压archives#

(1) 串行解压

Copy
# 把IotBillBackup201805.har中的文件全部解压到/IotBillBackup201805目录下 hdfs dfs -cp har:///har/IotBillBackup201805/IotBillBackup201805.har/* hdfs:/IotBillBackup201805 hdfs dfs -cp har:////user/hadoop/dir1 hdfs:/user/zop/newdir1 hdfs dfs -cp har:////user/hadoop/dir2 hdfs:/user/zop/newdir2

(2) 并行解压(Map/Reduce job),使用DistCp:

Copy
hadoop distcp har:///har/IotBillBackup201805/IotBillBackup201805.har/* hdfs:/IotBillBackup201805

启动一个Mapreduce任务来完成解压

5. archives的局限性#

(1) 创建archive文件要消耗和原文件一样多的硬盘空间;
(2) archive文件不支持压缩,尽管archive文件看起来象已经被压缩过了;
(3) archive文件一旦创建就无法改变,这就意味这你要改一些东西的话,你需要重新创建archive文件。

posted @   redcoder54  阅读(778)  评论(0)    收藏  举报
编辑推荐:
· JavaScript中如何遍历对象?
· 领域模型应用
· 记一次 ADL 导致的 C++ 代码编译错误
· MySQL查询执行顺序:一张图看懂SQL是如何工作的
· 为什么PostgreSQL不自动缓存执行计划?
阅读排行:
· 从被喷“假开源”到登顶 GitHub 热榜,这个开源项目上演王者归来!
· Stack Overflow,轰然倒下!
· 35+程序员的转型之路:经济寒冬中的希望与策略
· 2025年推荐6个好用的 Postman 替代工具
· 全球首位 AI 程序员 Devin 诞生了,对于程序员的影响到底多大?
点击右上角即可分享
微信分享提示
CONTENTS