问题描述
hive高频写入小数据,导致hdfs小文件过多,出现查询效率很低的情况
分析过程
先复现现象
select count() from ads.ads_sdd_flow_managemlt_to_ids_mm;–15分钟,小文件10983
select max(mm) from ads.ads_sdd_flow_managemlt_to_ids_mm;–6分钟,小文件10983
select count() from ads.ads_sdd_flow_managemlt_to_ids_mm_tmp20250214;–1分钟,只有一个文件
select max(mm) from ads.ads_sdd_flow_managemlt_to_ids_mm_tmp20250214;–41秒,只有一个文件
所以查询时间长是因为小文件导致
插入实验
实验证明一次插入都会有一个copy文件生成,ads_sdd_flow_management_result_to_ids_mm写入频率很高,所以小文件很多
解决方法
使用insert overwrite table插入数据,这样子不会产生很多小文件。