对 Hive 数仓表进行高效小文件合并

Posted 秉寒-CHO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对 Hive 数仓表进行高效小文件合并相关的知识,希望对你有一定的参考价值。

小文件如何产生    

  • 动态分区插入数据,产生大量的小文件,从而导致 map 数量剧增
  • reduce 数量越多,小文件也越多( reduce 的个数和输出文件是对应的)
  • 数据源本身就包含大量的小文件

小文件带来的问题    

  • 小文件会开很多 map,一个 map 开一个 JVM 去执行,所以这些任务的初始化,启动,执行会浪费大量的资源,严重影响性能
  • 小文件会给底层文件系统带来很大压力, 如在 HDFS 中,每个小文件对象约占150 byte,如果小文件过多会占用大量内存。这样 NameNode 内存容量严重制约了集群的扩展。

小文件解决方案

  • 从小文件产生的途经就可以从源头上控制小文件数量

   • 使用 Sequencefile 作为表存储格式,不要用 textfile,在一定程度上可以减少小文    件

   • 减少 reduce 的数量(可以使用参数进行控制)

   • 少用动态分区,用时记得按 distribute by 分区

  • 对于已有的小文件,我们可以通过以下几种方案解决

   • 通过参数进行调节,设置 map/reduce 端的相关参数

   • 重建表,建表时减少 reduce 数量

   • 使用 hadoop archive 命令把小文件进行归档

以上是关于对 Hive 数仓表进行高效小文件合并的主要内容,如果未能解决你的问题,请参考以下文章

对 Hive 数仓表进行高效小文件合并

数仓表概念

hive小文件合并设置参数

Hive和Spark当中对小文件的处理

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; 解决 map 端的小文件进行合并

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; 解决 map 端的小文件进行合并