北京快三开奖

  • <tr id="U9YkSO"><strong id="U9YkSO"></strong><small id="U9YkSO"></small><button id="U9YkSO"></button><li id="U9YkSO"><noscript id="U9YkSO"><big id="U9YkSO"></big><dt id="U9YkSO"></dt></noscript></li></tr><ol id="U9YkSO"><option id="U9YkSO"><table id="U9YkSO"><blockquote id="U9YkSO"><tbody id="U9YkSO"></tbody></blockquote></table></option></ol><u id="U9YkSO"></u><kbd id="U9YkSO"><kbd id="U9YkSO"></kbd></kbd>

    <code id="U9YkSO"><strong id="U9YkSO"></strong></code>

    <fieldset id="U9YkSO"></fieldset>
          <span id="U9YkSO"></span>

              <ins id="U9YkSO"></ins>
              <acronym id="U9YkSO"><em id="U9YkSO"></em><td id="U9YkSO"><div id="U9YkSO"></div></td></acronym><address id="U9YkSO"><big id="U9YkSO"><big id="U9YkSO"></big><legend id="U9YkSO"></legend></big></address>

              <i id="U9YkSO"><div id="U9YkSO"><ins id="U9YkSO"></ins></div></i>
              <i id="U9YkSO"></i>
            1. <dl id="U9YkSO"></dl>
              1. <blockquote id="U9YkSO"><q id="U9YkSO"><noscript id="U9YkSO"></noscript><dt id="U9YkSO"></dt></q></blockquote><noframes id="U9YkSO"><i id="U9YkSO"></i>
                企业空间 推销商城 存储论坛
                北京快三开奖全闪存阵列 IBM云盘算 Acronis 安克诺斯 安腾普 腾保数据
                首页 > Hadoop > 注释

                Hadoop关于处置少量小文件的题目息争决办法

                2014-02-13 00:00泉源:中国存储网
                导读:小文件指的是那些size比HDFS的block size(默许64M)小的多的文件。假如在HDFS中存储小文件,那么在HDFS中一定会含有许很多多如许的小文件(否则就不会用hadoop了)。而HDFS的题目在于无法很无效的处置少量小文件。任何一个文件,目次

                小文件指的是那些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关于处置少量小文件的题目息争决办法
                  经过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关于处置少量小文件的题目息争决办法

                持续阅读
                要害词 :
                Hadoop摆设
                中国存储网声明:此文观念不代表本站态度,若有版权疑问请联络我们。
                相干阅读
                产物引荐

                头条阅读
                栏目热门

                Copyright @ 2006-2019 ChinaStor.COM 版权一切 京ICP备14047533号

                中国存储网

                存储第一站,存储流派,存储在线交换平台