Hadoop小文件解决方案

简介: Hadoop小文件解决方案

1.背景

HDFS并不擅长存储小文件,因为每个文件最少一个block,每个block的元数据都会在NameNode占用内存,如果存在大量的小文件,它们会吃掉NameNode节点的大量内存。如下所示,模拟小文件场景:

2.Archive概述

Hadoop Archives可以有效的处理以上问题,它可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件。

3.创建Archive

Usage: hadoop archive -archiveName name -p <parent> <src>* <dest>

          -archiveName 指要创建的存档的名称。扩展名应该是*.har。

          -p 指定文件档案文件src的相对路径。

比如:-p /foo/bar a/b/c e/f/g,这里的/foo/bar是a/b/c与e/f/g的父路径,所以完整路径为/foo/bar/a/b/c与/foo/bar/e/f/g。

示例:

案例:存档一个目录/smallfile下的所有文件:

hadoop archive -archiveName test.har -p /smallfile /outputdir

这样就会在/outputdir目录下创建一个名为test.har的存档文件。

注意:Archive归档是通过MapReduce程序完成的,需要启动YARN集群。

4.查看 Archive归档之后的样子

hadoop fs -ls /outputdir/test.har

   这里可以看到har文件包括:两个索引文件,多个part文件(本例只有一个)以及一个标识成功与否的文件。part文件是多个原文件的集合, 通过index文件可以去找到原文件。

   例如上述的三个小文件1.txt 2.txt 3.txt内容分别为1,23。进行archive操作之后,三个小文件就归档到test.har里的part-0一个文件里。

5.查看Archive归档之前的样子

在查看har文件的时候,如果没有指定访问协议,默认使用的就是hdfs://,此时所能看到的就是归档之后的样子。

此外,Archive还提供了自己的har uri访问协议。如果用har uri去访问的话,索引、标识等文件就会隐藏起来,只显示创建档案之前的原文件:

Hadoop Archives的URI是:

har://scheme-hostname:port/archivepath/fileinarchive  

scheme-hostname格式为hdfs-域名:端口

6.提取Archive

按顺序解压存档(串行):

hadoop fs -cp har:///outputdir/test.har/* /smallfile1

要并行解压存档,请使用DistCp,对应大的归档文件可以提高效率:

hadoop distcp har:///outputdir/test.har/* /smallfile2

7.Archive使用注意事项

1. Hadoop archive是特殊的档案格式。一个Hadoop archive对应一个文件系统目录。archive的扩展名是*.har;

2. 创建archives本质是运行一个Map/Reduce任务,所以应该在Hadoop集群上运行创建档案的命令;

3. 创建archive文件要消耗和原文件一样多的硬盘空间;

4. archive文件不支持压缩,尽管archive文件看起来像已经被压缩过;

5. archive文件一旦创建就无法改变,要修改的话,需要创建新的archive文件。事实上,一般不会再对存档后的文件进行修改,因为它们是定期存档的,比如每周或每日;

6. 当创建archive时,源文件不会被更改或删除;

8.其他解决方法

# 使用Sequence File合并小文件

可以编写一个程序将所有的小文件写入到一个Sequence File中,即将文件名作为key,文件内容作为value序列化到Sequence File大文件中。

 

相关文章
|
4月前
|
存储 缓存 分布式计算
|
4月前
|
消息中间件 分布式计算 Hadoop
利用Hadoop进行实时数据分析的挑战与解决方案
【8月更文第28天】随着大数据技术的快速发展,企业和组织面临着越来越复杂的实时数据处理需求。Hadoop 作为一种分布式存储和处理大数据的框架,虽然擅长于批处理任务,但在处理实时数据流时存在一定的局限性。为了克服这些限制,Hadoop 经常与其他实时处理框架(如 Apache Kafka 和 Apache Storm)结合使用。本文将探讨如何利用 Hadoop 结合 Kafka 和 Storm 实现近实时的数据处理,并提供相关的代码示例。
530 0
|
6月前
|
存储 分布式计算 NoSQL
|
6月前
|
数据采集 SQL 分布式计算
|
7月前
|
存储 分布式计算 Hadoop
Hadoop 集群小文件归档 HAR、小文件优化 Uber 模式
该文介绍了Hadoop中两种小文件管理策略。首先,通过Hadoop Archive (HAR)将小文件归档成大文件以减少存储和管理开销。操作包括使用`hadoop archive`命令进行归档和解档。其次,文章讨论了小文件优化的Uber模式,这种模式在同一JVM中运行所有MapReduce任务以提高效率和局部性,但可能引发单点故障和资源限制问题。启用Uber模式需在`mapred-site.xml`配置文件中设置相关参数。文中还提供了使用WordCount例子验证Uber模式配置的步骤。
257 0
|
7月前
|
SQL 数据采集 分布式计算
Hadoop和Hive中的数据倾斜问题及其解决方案
Hadoop和Hive中的数据倾斜问题及其解决方案
115 0
|
SQL 存储 分布式计算
大数据Hadoop小文件问题与企业级解决方案
大数据Hadoop小文件问题与企业级解决方案
91 0
|
消息中间件 SQL 运维
【大数据开发运维解决方案】hadoop+kylin安装及官方cube/steam cube案例文档
对于hadoop+kylin的安装过程在上一篇文章已经详细的写了, 请读者先看完上一篇文章再看本本篇文章,本文主要大致介绍kylin官官方提供的常规批量cube创建和kafka+kylin流式构建cube(steam cube)的操作过程,具体详细过程请看官方文档。
【大数据开发运维解决方案】hadoop+kylin安装及官方cube/steam cube案例文档
|
存储 分布式计算 Java
|
分布式计算 运维 Hadoop
【大数据开发运维解决方案】Hadoop2.7.6+Spark单机伪分布式安装
一、安装spark依赖的Scala 1.1 下载和解压缩Scala 下载地址: 点此下载 或则直接去官网挑选下载: 官网连接 在Linux服务器的opt目录下新建一个名为scala的文件夹,并将下载的压缩包上载上去: [root@hadoop opt]# cd /usr/ [root@hadoop usr]# mkdir scala [root@hadoop usr]# cd scala/ [ro...
【大数据开发运维解决方案】Hadoop2.7.6+Spark单机伪分布式安装