hadoop处理小文件常见问题faq

hadoop处理小文件常见问题faq

ID:27548436

大小:164.29 KB

页数:10页

时间:2018-12-03

hadoop处理小文件常见问题faq_第1页
hadoop处理小文件常见问题faq_第2页
hadoop处理小文件常见问题faq_第3页
hadoop处理小文件常见问题faq_第4页
hadoop处理小文件常见问题faq_第5页
资源描述:

《hadoop处理小文件常见问题faq》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Hadoop处理小文件常见问题FAQ小文件指的是那些size比HDFS的blocksize(默认64M)小的多的文件。如果在HDFS中存储小文件,那么在HDFS中肯定会含有许许多多这样的小文件(不然就不会用Hadoop了)。而HDFS的问题在于无法很有效的处理大量小文件。任何一个文件,目录和block,在HDFS中都会被表示为一个object存储在namenode的内存中,没一个object占用150bytes的内存空间。所以,如果有10million个文件,没一个文件对应一个block,那么就将要消耗namenode3G的内存来保存这些b

2、lock的信息。如果规模再大一些,那么将会超出现阶段计算机硬件所能满足的极限。不仅如此,HDFS并不是为了有效的处理大量小文件而存在的。它主要是为了流式的访问大文件而设计的。对小文件的读取通常会造成大量从datanode到datanode的seeks和hopping来retrieve文件,而这样是非常的低效的一种访问方式。大量小文件在mapreduce中的问题Maptasks通常是每次处理一个block的input(默认使用FilelnputFormat)。如果文件非常的小,并且拥有大量的这种小文件,那么每一个maptask都仅仅处理了非常

3、小的input数据,并且会产生大量的maptasks,每一个maptask都会消耗一定量的bookkeeping的资源。比较一个1GB的文件,默认blocksize为64M,和1Gb的文件,没一个文件100KB,那么后者没一个小文件使用一个maptask,那么job的时间将会十倍甚至百倍慢于前者。Hadoop中有一些特性可以用来减轻这种问题:可以在一个JVM中允许taskreuse,以支持在一个JVM中运行多个maptask,以此来减少一些JVM的启动消耗(通过设置mapred.job.reuse.jvm.num.tasks属性,默认为1,

4、一1为无限制)。另一种方法为使用MultiFilelnputSplit,它可以使得一个map中能够处理多个split。为什么会产生大量的小文件?至少有两种情况下会产生大量的小文件1.这些小文件都是一个大的逻辑文件的pieces。由于HDFS仅仅在不久前才刚刚支持对文件的append,因此以前用来向unboundefiles(例如log文件)添加内容的方式都是通过将这些数据用许多chunks的方式写入HDFS中。2.文件本身就是很小。例如许许多多的小图片文件。每一个图片都是一个独立的文件。并且没有一种很有效的方法来将这些文件合并为一个大的文件

5、这两种情况需要有不同的解决方式。对于第一种情况,文件是由许许多多的records组成的,那么可以通过件邪行的调用HDFS的sync()方法(和append方法结合使用)来解决。或者,可以通过些一个程序来专门合并这壁小文件(seeNathanMarz’spostaboutatoolcalledtheConsolidatorwhichdoesexactlythis)。对于第二种情况,就需要某种形式的容器来通过某种方式来group这些file。Hadoop提供了一些选择:HARfilesHadoopArchives(HARfiles)是在0.18

6、.0版本中引入的,它的出现就是为了缓解大量小文件消耗namenode内存的问题。HAR文件是通过在HDFS上构建一个层次化的文件系统来工作。一个HAR文件是通过Hadoop的archive命令来创建,而这个命令实际上也是运行了一个MapReduce任务来将小文件打包成HAR。对于client端来说,使用HAR文件没有任何影响。所有的原始文件都visible&&accessible(usinghar://URL)。但在HDFS端它内部的文件数减少了。HARFileLayoutMasterindexIndexData通过HAR来读取一个文件并不

7、会比直接从HDFS中读取文件高效,而且实际上可能还会稍微低效一点,因为对每一个HAR文件的访问都需要完成两层index文件的读取和文件本身数据的读取(见上图)。并且尽管HAR文件可以被用来作为MapReducejob的input,但是并没有特殊的方法来使maps将HAR文件中打包的文件当作一个HDFS文件处理。可以考虑通过创建一种inputformat,利用HAR文件的优势来提高MapReduce的效率,但是目前还没有人作这种inputformat。需要注意的是:MultiFilelnputSplit即使在Hadoop-4565的改进(ch

8、oosefilesinasplitthatarenodelocal),但始终还是需要seekpersmallfileoSequenceFiles通常对于“thesmallfile

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。