HDFS的小文件问题

 

  • HDFS 中任何一个文件,目录或者数据块在 NameNode 节点内存中均以一个对象形式表示(元数据),而这受到 NameNode 物理内存容量的限制。每一个元数据对象约占 150 byte,因此若是有1千万个小文件,每一个文件占用一个block,则 NameNode 大约须要2G空间。若是存储1亿个文件,则 NameNode 须要20G空间,这毫无疑问1亿个小文件是不可取的。
  • 处理小文件并不是 Hadoop 的设计目标,HDFS 的设计目标是流式访问大数据集(TB级别)。于是,在 HDFS 中存储大量小文件是很低效的。访问大量小文件常常会致使大量的 seek,以及不断的在 DatanNde 间跳跃去检索小文件。这不是一个颇有效的访问模式,严重影响性能。
  • 处理大量小文件速度远远小于处理同等大小的大文件的速度。每个小文件要占用一个slot,而任务启动将耗费大量时间甚至大部分时间都耗费在启动任务和释听任务上。
  • MapReduce上的小文件问题:Map任务通常一次只处理一个块的输入(input。若是文件很是小,而且有不少,那么每个 Map 任务都仅仅处理很是小的输入数据,并会产生大量的 Map 任务,每个 Map 任务都会额外增长bookkeeping 开销。+map任务是jvm进程级别的,也会有启动销毁的开销
相关文章
相关标签/搜索