- 浏览: 1183836 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (350)
- Ajax研究 (2)
- javascript (22)
- struts (15)
- hibernate (12)
- spring (8)
- 我的生活 (28)
- jsp (2)
- 我的随笔 (84)
- 脑筋急转弯 (1)
- struts2 (2)
- ibatis (1)
- groovy (1)
- json (4)
- flex (20)
- Html Css (5)
- lucene (11)
- solr研究 (2)
- nutch (25)
- ExtJs (3)
- linux (6)
- 正则表达式 (2)
- xml (1)
- jetty (0)
- 多线程 (1)
- hadoop (40)
- mapreduce (5)
- webservice (2)
- 云计算 (8)
- 创业计划 (1)
- android (8)
- jvm内存研究 (1)
- 新闻 (2)
- JPA (1)
- 搜索技术研究 (2)
- perl (1)
- awk (1)
- hive (7)
- jvm (1)
最新评论
-
pandaball:
支持一下,心如大海
做有气质的男人 -
recall992:
山东分公司的风格[color=brown]岁的法国电视[/co ...
solr是如何存储索引的 -
zhangsasa:
-services "services-config ...
flex中endpoint的作用是什么? -
来利强:
非常感谢
java使用json所需要的几个包 -
zhanglian520:
有参考价值。
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
小文件指的是那些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端它内部的文件数减少了。
通过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。
发表评论
-
Java并发编程总结---Hadoop核心源码实例解读
2012-04-01 15:46 2192程序设计需要同步(synchronization),原因:1) ... -
使用hadoop的lzo问题!
2011-08-24 17:12 2638使用lzo压缩替换hadoop原始的Gzip压缩。相比之下有如 ... -
secondarynamenode配置使用总结
2011-07-07 08:37 7549一、环境 Hadoop 0.20.2、JDK 1.6、Lin ... -
Map/Reduce中的Combiner的使用
2011-07-07 08:36 4762一、作用 1、combiner最基本是实现本地key的聚合, ... -
Map/Reduce中的Partiotioner使用
2011-07-07 08:35 1869一、环境 1、hadoop 0.20.2 2、操作系统Li ... -
hadoop如何添加节点
2011-07-06 12:43 14891.部署hadoop 和普通的datanode一样。安装 ... -
hadoop如何恢复namenode
2011-07-06 12:36 8535Namenode恢复 1.修改conf/core-site.x ... -
Hadoop删除节点(Decommissioning Nodes)
2011-07-06 11:52 25711.集群配置 修改conf/hdfs-site.xml ... -
hadoop知识点整理
2011-07-06 11:51 26771. Hadoop 是什么? Hadoop 是一种使用 Ja ... -
喜欢hadoop的同学们值得一看
2011-07-03 15:50 2016海量数据正在不断生成,对于急需改变自己传统IT架构的企业而 ... -
hadoop优化
2011-07-03 15:43 1336一. conf/hadoop-site.xml配置, 略过. ... -
hadoop分配任务的问题
2011-05-16 23:09 5请教大家一个关于hadoop分配任务的问题: 1、根据机器 ... -
hadoop-FAQ
2011-05-15 11:38 724hadoop基础,挺详细的。希望对大家有用! -
Apache Hadoop 0.21版本新功能ChangeNode
2011-04-21 22:04 1998Apache Hadoop 0.21.0 在2010年8月23 ... -
hadoop常见错误及解决办法!
2011-04-07 12:18 96467转: 1:Shuffle Error: Exceede ... -
Hadoop节点热拔插
2011-04-07 12:16 1632转 : 一、 Hadoop节点热 ... -
hadoop动态添加节点
2011-04-07 12:14 2010转: 有的时候, datanode或者tasktrac ... -
欢迎大家讨论hadoop性能优化
2011-04-06 15:42 1301大家知道hadoop这家伙是非常吃内存的。除了加内存哦! 如 ... -
hadoop错误之二:could only be replicated to 0 nodes, instead of 1
2011-02-22 08:23 2358WARN hdfs.DFSClient: NotReplic ... -
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
2011-02-21 16:02 8749特别注意:hadoop的相关配置文件尽量使用主机名而不是ip地 ...
相关推荐
总的来说,面对Hadoop中的大量小文件,我们需要理解问题的本质,选择合适的策略,如优化NameNode内存管理,改进MapReduce任务调度,或利用文件归档技术,以提升整个系统的性能和效率。同时,随着Hadoop的持续发展,...
### 大数据技术分享:Hadoop处理大量小文件的问题与解决方法 #### 一、问题背景及挑战 在大数据处理领域,Hadoop作为一种主流的大数据处理框架,被广泛应用于各种大规模数据集的存储与计算场景中。然而,在实际...
本文提出了一种通过文件合并和索引优化来提高Hadoop处理海量小文件效率的方法。实验结果表明,该方法能够有效减少Namenode的元数据负担,提高系统的I/O性能。未来的研究方向可以进一步探索更智能的文件合并策略以及...
解决方法是:检查 mapred.map.tasks 是否设置太多,设置太多的话会导致处理大量的小文件;检查 mapred.reduce.parallel.copies 是否设置合适。 八、系统根目录下的/tmp 文件夹是不可以删除的 这个问题是由于 /tmp ...
Hadoop是一个开源的分布式计算框架,由Apache基金会开发,它主要设计用于处理和存储大量数据。在提供的信息中,我们关注的是"Hadoop的dll文件",这是一个动态链接库(DLL)文件,通常在Windows操作系统中使用,用于...
Hadoop是Apache软件基金会开发的一个开源分布式计算框架,它允许在廉价硬件上处理大量数据,提供了高可靠性、高扩展性和高效能的数据存储与处理能力。Hadoop的核心组件包括HDFS(Hadoop Distributed File System)、...
【Hadoop小文件存储与读取的挑战与解决方案】 在当前大数据时代,Hadoop Distributed File System(HDFS)因其高容错性、可扩展性和...这一方法对于那些需要处理大量小文件的Hadoop集群来说,具有重要的实际应用价值。
Hadoop的HDFS(Hadoop Distributed File System)虽然在处理大文件时表现出色,但在处理大量小文件时效率较低,因为其设计初衷并非为小文件优化。因此,优化Hadoop对小文件的处理能力,不仅可以提高数据处理效率,还...
通过 对小文件按类型进行合并,建立多层索引,并对Hadoop平台源代码进行相应改进, 海量小文件在 Hadoop 平台上耗费节点内存的问题得到解决,检索效率得到一定程 度提升、名字节点负担得到减轻、实用性也得到提高。...
这个场景中,"hadoop web tomcat上传文件" 提供了一个基于Web的解决方案,它利用了Apache Tomcat作为Web服务器和Hadoop生态系统来处理文件存储。下面我们将详细探讨涉及的技术和实现步骤。 首先,Apache Tomcat是一...
通过Hadoop,企业能够高效地处理大量数据,提升数据处理速度和效率。 总之,“Hadoop示例程序合并文件”揭示了Hadoop如何利用分布式计算和存储能力来解决大数据的挑战。理解这一过程对于开发者和数据工程师来说至关...
Hadoop 大数据开发实战教学教案—03HDFS 分布式文件系统.pdf ...本节课程的教学目标是使学生掌握 HDFS 的架构和原理、掌握 HDFS 的 Shell 和 Java API 操作方法、了解 Hadoop 序列化、了解 Hadoop 小文件处理方式。
它提供了一个易于使用且可伸缩的解决方案,尤其适合于多用户环境和多应用场合,可以轻松应对大量数据的存储与处理。在Hadoop生态系统中,HDFS(Hadoop Distributed File System)是默认的分布式文件存储系统。但HDFS...
WOTUNG的集群设计可以支持大量的节点,且解决了小文件的元数据容量问题。 云计算和无服务器(Serverless)计算的兴起也对Hadoop构成了直接竞争。服务如谷歌的BigQuery允许用户无需加载数据到专用存储中,即可运行...
### Hadoop MapReduce作业卡死问题的解决方法 #### 一、问题背景 在使用Hadoop MapReduce进行大规模数据处理的过程中,遇到了一个棘手的问题——部分MapReduce作业长时间卡死,严重影响了系统的运行效率和资源利用...
Hadoop 2.2.0 是一个重要的分布式计算框架,主要设计用于处理和存储大量数据。这个64位的native文件是Hadoop针对64位Linux操作系统编译的一组库文件,它们对于Hadoop在Linux环境下高效运行至关重要。在Hadoop的源...
总的来说,本发明提出的基于Hadoop的海量非独立小文件关联存储方法,通过文件归并和局部索引的策略,解决了Hadoop在处理小文件时的效率问题,提升了大数据环境下的存储和检索性能,对于大数据处理和分析领域有着重要...
在大数据处理领域,小文件问题是一个常见的挑战,尤其是在Hadoop和Hive环境下。小文件指的是大小相对较小的文件,它们在分布式系统中可能导致大量的数据块,增加NameNode的内存负担,降低I/O效率。为了解决这个问题...
Hadoop通过其HDFS(Hadoop Distributed File System)解决了这个问题,它能将大量的小文件分散存储在不同的节点上,确保了数据的高可用性和可扩展性。此外,MapReduce编程模型允许并行处理这些小文件,大大提升了...
这种方法特别适用于云存储环境,因为云存储需要处理大量来自不同用户的文件访问请求,并且需要保证服务的稳定性和响应速度。 总结起来,该文章的核心内容是: 1. 针对Hadoop处理海量小文件(如MP3)的挑战,提出了...