`

Hadoop关于处理大量小文件的问题和解决方法

阅读更多

小文件指的是那些size比HDFS 的block size(默认64M)小的多的文件。如果在HDFS中存储小文件,那么在HDFS中肯定会含有许许多多这样的小文件(不然就不会用hadoop了)。
而HDFS的问题在于无法很有效的处理大量小文件。

任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,没一个object占用150 bytes的内存空间。所以,如果有10million个文件,
没一个文件对应一个block,那么就将要消耗namenode 3G的内存来保存这些block的信息。如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限。

不仅如此,HDFS并不是为了有效的处理大量小文件而存在的。它主要是为了流式的访问大文件而设计的。对小文件的读取通常会造成大量从
datanode到datanode的seeks和hopping来retrieve文件,而这样是非常的低效的一种访问方式。


大量小文件在mapreduce中的问题

Map tasks通常是每次处理一个block的input(默认使用FileInputFormat)。如果文件非常的小,并且拥有大量的这种小文件,那么每一个map task都仅仅处理了非常小的input数据,
并且会产生大量的map tasks,每一个map task都会消耗一定量的bookkeeping的资源。比较一个1GB的文件,默认block size为64M,和1Gb的文件,没一个文件100KB,
那么后者没一个小文件使用一个map task,那么job的时间将会十倍甚至百倍慢于前者。

hadoop中有一些特性可以用来减轻这种问题:可以在一个JVM中允许task reuse,以支持在一个JVM中运行多个map task,以此来减少一些JVM的启动消耗
(通过设置mapred.job.reuse.jvm.num.tasks属性,默认为1,-1为无限制)。另一种方法为使用MultiFileInputSplit,它可以使得一个map中能够处理多个split。


为什么会产生大量的小文件?

至少有两种情况下会产生大量的小文件

   1. 这些小文件都是一个大的逻辑文件的pieces。由于HDFS仅仅在不久前才刚刚支持对文件的append,因此以前用来向unbounde files(例如log文件)添加内容的方式都是通过将这些数据用许多chunks的方式写入HDFS中。
   2. 文件本身就是很小。例如许许多多的小图片文件。每一个图片都是一个独立的文件。并且没有一种很有效的方法来将这些文件合并为一个大的文件

这两种情况需要有不同的解决方式。对于第一种情况,文件是由许许多多的records组成的,那么可以通过件邪行的调用HDFS的sync()方法(和append方法结合使用)来解决。或者,可以通过些一个程序来专门合并这些小文件(see Nathan Marz’s post about a tool called the Consolidator which does exactly this).

对于第二种情况,就需要某种形式的容器来通过某种方式来group这些file。hadoop提供了一些选择:

* HAR files

Hadoop Archives (HAR files)是在0.18.0版本中引入的,它的出现就是为了缓解大量小文件消耗namenode内存的问题。HAR文件是通过在HDFS上构建一个层次化的文件系统来工作。一个HAR文件是通过hadoop的archive命令来创建,而这个命令实际上也是运行了一个MapReduce任务来将小文件打包成HAR。对于client端来说,使用HAR文件没有任何影响。所有的原始文件都 visible && accessible(using har://URL)。但在HDFS端它内部的文件数减少了。
Hadoop关于处理大量小文件的问题和解决方法 - nicoleamanda - 只是想要简单的生活

通过HAR来读取一个文件并不会比直接从HDFS中读取文件高效,而且实际上可能还会稍微低效一点,因为对每一个HAR文件的访问都需要完成两层index 文件的读取和文件本身数据的读取(见上图)。并且尽管HAR文件可以被用来作为MapReduce job的input,但是并没有特殊的方法来使maps将HAR文件中打包的文件当作一个HDFS文件处理。 可以考虑通过创建一种input format,利用HAR文件的优势来提高MapReduce的效率,但是目前还没有人作这种input format。需要注意的是:MultiFileInputSplit,即使在HADOOP-4565的改进(choose files in a split that are node local),但始终还是需要seek per small file。

* Sequence Files

通常对于“the small files problem”的回应会是:使用SequenceFile。这种方法是说,使用filename作为key,并且file contents作为value。实践中这种方式非常管用。回到10000个100KB的文件,可以写一个程序来将这些小文件写入到一个单独的 SequenceFile中去,然后就可以在一个streaming fashion(directly or using mapreduce)中来使用这个sequenceFile。不仅如此,SequenceFiles也是splittable的,所以mapreduce 可以break them into chunks,并且分别的被独立的处理。和HAR不同的是,这种方式还支持压缩。block的压缩在许多情况下都是最好的选择,因为它将多个 records压缩到一起,而不是一个record一个压缩。

将已有的许多小文件转换成一个SequenceFiles可能会比较慢。但是,完全有可能通过并行的方式来创建一个一系列的SequenceFiles。(Stuart Sierra has written a very useful post about converting a tar file into a SequenceFile — tools like this are very useful).更进一步,如果有可能最好设计自己的数据pipeline来将数据直接写入一个SequenceFile。
Hadoop关于处理大量小文件的问题和解决方法 - nicoleamanda - 只是想要简单的生活

分享到:
评论

相关推荐

    Hadoop关于处理大量小文件的问题和解决方法.docx

    Hadoop关于处理大量小文件的问题和解决方法.docx

    基于 Hadoop 的海量小文件处理技术研究

    通过 对小文件按类型进行合并,建立多层索引,并对Hadoop平台源代码进行相应改进, 海量小文件在 Hadoop 平台上耗费节点内存的问题得到解决,检索效率得到一定程 度提升、名字节点负担得到减轻、实用性也得到提高。...

    论文研究-一种面向HDFS中海量小文件的存取优化方法.pdf

    为了解决HDFS(Hadoop distributed file system)在存储海量小文件时遇到的NameNode内存瓶颈等问题,提高HDFS处理海量小文件的效率,提出一种基于小文件合并与预取的存取优化方案。首先通过分析大量小文件历史访问...

    Hadoop实战(第2版)

    4.4 本章小结5 优化HDFS 处理大数据的技术5.1 处理小文件技术点24 使用Avro 存储大量小文件5.2 通过压缩提高数据存储效率技术点25 选择合适的压缩解码器技术点26 在HDFS、MapReduce、Pig 和Hive 中使用...

    大数据分析技术基础教学课件3-大数据处理平台Hadoop.pptx

    Hadoop的由来和发展 2003年Google发表了关于云计算核心技术的GFS论文 Apache开源项目Nutch搜索引擎的开发者Doug Cutting, 正面临如何将其架构扩展到处理数十亿网页的规模 他们意识到GFS的技术可以帮助他们解决Nutch...

    Hadoop分布式架构下大数据集的并行挖掘

    基于Hadoop分布式计算平台,给出一种适用于大数据集的并行挖掘算法。...实验结果表明,给出的并行挖掘算法解决了大数据集挖掘过程中产生的大量数据通信、中间数据以及执行大量交集操作的问题,算法高效、可扩展。

    基于Hadoop的Apriori算法研究与优化

    为解决传统数据挖掘算法在大量数据处理时面临的内存占用、计算性能等方面的问题,基于Hadoop平台,应用HBase文件存储系统对海量数据分布式存储以及Map Reduce框架进行分布式计算,实现Apriori经典数据挖掘算法。...

    大数据与Hadoop.doc

    大数据研发的目的是发展大数据技术并将其应用到相关领域, 通过解决大体量数据处理问题促进其突破性发展。因此,大数据时代带来的挑战不仅体 现在如何处理大体量数据并从中获取有价值的信息,也体现在如何加强大数据...

    《数据算法Hadoop Spark大数据处理技巧》PDF 带目录!!

    《数据算法:Hadoop/Spark大数据处理技巧》介绍了很多基本设计模式、优化技术和数据挖掘及机器学习解决方案,以解决生物信息学、基因组学、统计和社交网络分析等领域的很多问题。这还概要介绍了MapReduce、Hadoop和...

    hadoop大数据实战手册

    2.4.1 副本放置策略概念与方法....... . …........ . .....…........ . ........ . ………......... . .... . …….. 72 2.4 .2 副本放置策略的有效前提………………………………………………………………………. ...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点24 使用Avro 存储大量小文件 5.2 通过压缩提高数据存储效率 技术点25 选择合适的压缩解码器 技术点26 在HDFS、MapReduce、Pig 和Hive 中使用数据压缩 技术点27 在MapReduce、Hive 和Pig 中处理可分割的...

    hadoop 大数据集 数据并行挖掘

    基于 [:分布式计算平台,给出一种适用于大数据集的并行挖掘算法%该算法对非结构化的原始...明,给出的并行挖掘算法解决了大数据集挖掘过程中产生的大量数据通信#中间数据以及执行大量交集操作的问题,算法 高效#可扩展%

    Hadoop大数据开发.pptx

    非结构化数据大量产生,传统处理方法难以应对,带动了大数据技术的快速突破,大数据解决方案逐渐走向成熟,形成了并行计算与分布式系统两大核心技术,谷歌的GFD和MapReduce等大数据技术受到追捧,Hadoop平台开始大行...

    基于Hadoop实现的的图像检索之人脸识别系统+源代码+文档说明.

    该项目提出了将当前流行的Hadoop处理技术和监控视频人脸识别技术相结合,开发一套基于Hadoop视频图像检索的人脸识别系统。主要完成了一下工作:  ①分析了国内外在人脸识别方面的现状,了解了人脸识别的...

    大数据整体架构.zip

    zip是一个全面且详尽的文档,它提供了一种结构化的方法来解决处理和分析大量数据的挑战。这份文档深入探讨了大数据生态系统的各个组成部分,包括数据的收集、存储、处理、分析和可视化等环节,并提供了实用的解决...

    数据分析方法与技术.pptx

    Volume 海量的数据规模 Variety 多样的数据类型 Value Velocity 快速的数据流转 发现数据价值 要解决的问题 大数据技术被设计用于在成本可承受的条件下,通过非常快速(velocity)地采集、发现和分析,从大量...

    ES-Fastloader:利用Hadoop容错性和并行性快速构建大规模ElasticSearch索引

    特征支持批量创建ES索引,可以在1-2小时内快速处理数十TB的数据,并解决了构建大量ES索引文件时的低效率问题。 支持计算能力的横向扩展,并方便扩展。 通过增加机器资源,可以进一步提高索引构建速度和处理的数据量...

    game-x-m:作者编写的Hadoop书中包含的示例代码

    本书分为13章,分别介绍Hadoop平台管理与维护、异常处理解决方案以及Hadoop分布式文件系统等内容。最后一章对Hadoop进行了拓展,剖析了Kafka消息系统并介绍了笔者的开源监控系统Kafka Eagle。 本书结构清晰、案例...

    大数据定义.doc

    传统的关系数 据库无法处理大数据的规模,目前可选择的方法包括大规模并行处理架构、数据仓库、 或类似Greenplum的数据库、以及Apache Hadoop解决方案。其中,数据仓库比较适合于预先确定的数据结构和变化缓慢的数据...

    大数据基础知识入门.pdf

    CDH) HDFS HDFS ( Hadoop Distributed File System ) 是 Hadoop项目的核心组件之一,是分布式计算中数据存储 管理的基础,是基于流数据模式访问和处理超大文件的 需求而开发的,可以运行于廉价的商用服务器上。...

Global site tag (gtag.js) - Google Analytics