对 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 数仓表进行高效小文件合并的主要内容,如果未能解决你的问题,请参考以下文章
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; 解决 map 端的小文件进行合并
set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat; 解决 map 端的小文件进行合并