背景:
实际项目中,小文件的产生会影响hadoop集群的性能;过度使用namenode的内存等;启动过多的map任务,拉低整体Job的运行效率等等弊端。
解决方案:
针对Hive表(下文统称表A)中,特别是历史分区,存在大量小文件的话,强烈建议对分区下的小文件进行归档处理。
1.以下是合并小文件的处理方式:
#使用hive archive 功能(这个是hive本身提供的功能)
#启动archive功能
set hive.archive.enabled = true;
#对hive表的指定分区进行归档操作
alter table A ARCHIVE PARTITION (day ='2021-06-01');
指定分区进行归档之后,就不可以进行数据的追加或覆写操作.所以一般对不更新数据的历史分区进行archive操作.
2.对指定分区进行解档操作:
#对分区表已经归档的分区进行解档操作
alter table A UNARCHIVE PARTITION (day ='2021-06-01');
此操作就是防止有分区需要进行数据更新的情况,就可以进行解档操作,比较灵活.
各位小伙伴,若有疑问欢迎留言讨论哈