一:问题描述
问题1:hive orc非分区表。小数据量,多期数据,hive查询变慢。查看hdfs发现是小文件过多
二:方案
当 Hive ORC 表存在小文件过多的问题时,可以考虑以下几种解决方法: 使用 Hive 自带的concatenate命令合并小文件,但该命令只支持rcfile和orc文件类型。对于非分区表,可以使用以下命令:alter table 表名 concatenate;;对于分区表,则使用:alter table 表名 partition(分区键=分区值) concatenate;。需要注意的是,使用该命令不能指定合并后的文件数量,但可以多次执行。多次执行后文件数量不再变化时,可能与参数mapreduce.input.fileinputformat.split.minsize=256mb的设置有关,可通过设定每个文件的最小 size 来调整。
1:orc普通表
#查看表结构和hdfs地址
show create table table_a;
#下载hdfs表目录数据,查看文件数量
hadoop dfs -get hdfs://hdfs-ha/warehouse/tablespace/test.db/table_a
#合并小文件
alter table table_a concatenate;
#下载hdfs表目录数据,查看文件数量
hadoop dfs -get hdfs://hdfs-ha/warehouse/tablespace/test.db/table_a
合并前,每期数据都会有一个文件夹
合并后,多期是数据仅会有一个文件夹
使用concatenate命令合并小文件,需要先评估数据量,和hive队列的cores。通常每个文件为256M,参考数据量来参考合并小文件的频率