Hadoop 小文件处理理论在Hive数据处理上的落地-Hadoop商业环境实战

栏目: 编程工具 · 发布时间: 5年前

内容简介:版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何技术交流,可随时联系。Hadoop本身也提供了几个解决方案,分别为:Hadoop Archive,Sequence file和CombineFileInputFormat。我们基于Hadoop内置的CombineFileInputFormat来实现处理海量小文件,需要做的工作就很

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何技术交流,可随时联系。

1 问题陈述

  • 小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性和性能带来严重问题。首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有10000000个小文件,每个文件占用一个block,则namenode大约需要2G空间。如果存储1亿个文件,则namenode需要20G空间。namenode内存容量严重制约了集群的扩展。
  • 访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。最后,处理大量小文件速度远远小于处理同等大小的大文件的速度。每一个小文件要占用一个slot,而task启动将耗费大量时间甚至大部分时间都耗费在启动task和释放task上。

2 解决方案

Hadoop本身也提供了几个解决方案,分别为:Hadoop Archive,Sequence file和CombineFileInputFormat。

2.1 Hadoop Archive

  • Hadoop Archive或者HAR,是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时,仍然允许对文件进行透明的访问。

    (1) 对某个目录/foo/bar下的所有小文件存档成/outputdir/ zoo.har:
      
          hadoop archive -archiveName zoo.har -p /foo/bar /outputdir
          当然,也可以指定HAR的大小(使用-Dhar.block.size)。
          
       (2) HAR的访问路径可以是以下两种格式:
          har://scheme-hostname:port/archivepath/fileinarchive
          har:///archivepath/fileinarchive(本节点)
          
          可以这样查看HAR文件存档中的文件:
          hadoop dfs -ls har:///user/zoo/foo.har
          输出:
          har:///user/zoo/foo.har/hadoop/dir1
          har:///user/zoo/foo.har/hadoop/dir2
    复制代码
  • 使用HAR时需要两点,第一,对小文件进行存档后,原文件并不会自动被删除,需要用户自己删除;第二,创建HAR文件的过程实际上是在运行一个mapreduce作业,因而需要有一个hadoop集群运行此命令。

  • 此外,HAR还有一些缺陷:第一,一旦创建,Archives便不可改变。要增加或移除里面的文件,必须重新创建归档文件。第二,要归档的文件名中不能有空格,否则会抛出异常,可以将空格用其他符号替换(使用-Dhar.space.replacement.enable=true 和-Dhar.space.replacement参数)。

2.2 SequenceFile

  • sequenceFile文件是Hadoop用来存储二进制形式的[Key,Value]对而设计的一种平面文件(Flat File)。可以把SequenceFile当做是一个容器,把所有的文件打包到SequenceFile类中可以高效的对小文件进行存储和处理。

  • SequenceFile文件并不按照其存储的Key进行 排序 存储,SequenceFile的内部类Writer提供了append功能。SequenceFile中的Key和Value可以是任意类型Writable或者是自定义Writable。

  • 在存储结构上,SequenceFile主要由一个Header后跟多条Record组成,Header主要包含了Key classname,value classname,存储压缩算法,用户自定义元数据等信息,此外,还包含了一些同步标识,用于快速定位到记录的边界。每条Record以键值对的方式进行存储,用来表示它的字符数组可以一次解析成:记录的长度、Key的长度、Key值和value值,并且Value值的结构取决于该记录是否被压缩。

    https://blog.csdn.net/bitcarmanlee/article/details/78111289
    复制代码

2.3 CombineFileInputFormat

我们基于Hadoop内置的CombineFileInputFormat来实现处理海量小文件,需要做的工作就很显然了,如下所示:

  • 实现一个RecordReader来读取CombineFileSplit包装的文件Block

  • 继承自CombineFileInputFormat实现一个使用我们自定义的RecordReader的输入规格说明类

  • 处理数据的Mapper实现类

  • 配置用来处理海量小文件的MapReduce Job

    https://blog.csdn.net/flyfish778/article/details/47722551
    复制代码

3 Hive的小文件处理

  • 配置Map输入合并
Hadoop 小文件处理理论在Hive数据处理上的落地-Hadoop商业环境实战
  • 配置Hive输出结果合并
Hadoop 小文件处理理论在Hive数据处理上的落地-Hadoop商业环境实战
  • 在Hive中进行归档处理 Hive支持将已存的分区转换为HAR,从而使得分区下的文件数目大大减少。但是从HAR读数据需要额外的开销,因此查询归档下数据可能会变慢。
Hadoop 小文件处理理论在Hive数据处理上的落地-Hadoop商业环境实战

如果不是分区表,可以创建成外部表,使用har://协议来指定路径。

  • SequenceFile
Hadoop 小文件处理理论在Hive数据处理上的落地-Hadoop商业环境实战
  • 控制reducer个数 Reducer的数量决定了结果文件的数量。所以在合适的情况下控制reducer的数量,可以实现减少小文件数量。
Hadoop 小文件处理理论在Hive数据处理上的落地-Hadoop商业环境实战
引用: http://www.raincent.com/content-85-11297-1.html
复制代码

4 总结

因为工作中用到这个,总结成文,参考多维博客,均表明引用连接,内容粗鄙,勿怪!

秦凯新 于深圳

版权声明:本套技术专栏是作者(秦凯新)平时工作的总结和升华,通过从真实商业环境抽取案例进行总结和分享,并给出商业应用的调优建议和集群环境容量规划等内容,请持续关注本套博客。QQ邮箱地址:1120746959@qq.com,如有任何技术交流,可随时联系。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Mastering Regular Expressions, Second Edition

Mastering Regular Expressions, Second Edition

Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95

Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具