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

Posted concurrencyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:

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

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

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

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

4. 解压archives

(1) 串行解压

# 把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:

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

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

5. archives的局限性

(1) 创建archive文件要消耗和原文件一样多的硬盘空间;

(2) archive文件不支持压缩,尽管archive文件看起来象已经被压缩过了;

(3) archive文件一旦创建就无法改变,这就意味这你要改一些东西的话,你需要重新创建archive文件。




以上是关于hadoop文件系统上的小文件合并-Hadoop Archives的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop:如何将 reducer 输出合并到单个文件中? [复制]

[Hadoop]大量小文件问题及解决方案

[Hadoop]大量小文件问题及解决方案

hadoop 将HDFS上多个小文件合并到SequenceFile里

读《Hadoop权威指南》点滴-Hadoop分布式文件系统

HIVE:小文件合并