天天看点

如何合并Hive表中的小文件如何合并Hive表中的小文件

HDFS不适合大量小文件的存储,因namenode将文件系统的元数据存放在内存中,因此存储的文件数目受限于 namenode的内存大小。HDFS中每个文件、目录、数据块占用150Bytes。如果存放的文件数目过多的话会占用很大的内存甚至撑爆内存。HDFS适用于高吞吐量,而不适合低时间延迟的访问。如果同时存入大量的小文件会花费很长的时间。本篇文章主要介绍在CDH6.3.0集群中如何对Hive表小文件进行合并。

环境说明:

系统:centos7.4

cdh:6.3.0

如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件

为了让小文件数量和分区数达到合并效果,本文进行了多次导入

如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件

可以看到共12个分区

如何合并Hive表中的小文件如何合并Hive表中的小文件

主要查看总的小文件数量,和batch_date=20210608分区的文件数量

如何合并Hive表中的小文件如何合并Hive表中的小文件

创建临时表时需和原表的表结构一致

如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件

如上图101个文件数合并为12个,共12个分区,每个分区下的文件被合并为了一个

如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件
如何合并Hive表中的小文件如何合并Hive表中的小文件

确认合并后数据无异常后清理,建议数据保留一周

如何合并Hive表中的小文件如何合并Hive表中的小文件

1.本文原表中共12个分区,101个小文件,合并后共12个文件,其每个分区中一个。

2.本文是针对CDH集群操作,如果是在CDP集群中Hive的底层执行引擎是TEZ,,所以相比CDH需要修改以前的合并参数“SET hive.merge.mapfiles=true”为“SET hive.merge.tezfiles=true;”。

3.合并完后清理原表备份的数据建议保留一周。

继续阅读