#Hive常见故障 #大数据 #生产环境真实案例 #Hive #离线数据库 #整理 #经验总结
说明:此篇总结hive常见故障案例处理方案 结合自身经历 总结不易 +关注 +收藏 欢迎留言
🎺Hive实用小文件合并方案 请往下翻 !!!
更多Hive案例汇总方案 (点击跳转) :
Hive常见故障多案例维护宝典 --项目总结(宝典一)
Hive常见故障多案例维护宝典 --项目总结(宝典二)
目录内容如下:
架构概述
【1】参数及配置类常见故障
.......
Hive实用小文件合并方案
问题
表对应小文件过多,在频繁对该表(分区)操作时会对hdfs性能产生较大压力,小文件判断标准:
-
表(分区)下存在大量M级别以下文件。
-
表(分区)下文件平均大小小于25M。
原因
-
每次insert插入数据都至少生成一个文件,例如一次只插入一条数据时也会产生一个文件,所以在入库频次较高时会存在产生大量小文件问题。
-
业务侧产生大量小文件。
解决方法
业务侧调整入库频次等
使用hive进行合并操作
合并参数如下:
set hive.merge.mapfiles=true;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=256000000;
set mapreduce.input.fileinputformat.split.maxsize=256000000;
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set mapreduce.input.fileinputformat.split.minsize=1;
set hive.merge.smallfiles.avgsize=128000000;
set mapreduce.input.fileinputformat.split.minsize.per.node=128000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack=128000000;
set hive.execution.engine=mr;
如使用动态分区进行小文件合并,还需加如下参数:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.max.dynamic.partitions.pernode=10000;
set hive.exec.max.dynamic.partitions=100000;
set hive.exec.max.created.files=150000;
在beeline客户端设置上述参数后,使用如下两种数据重导方式之一进行小文件合并,数据重导两种方式:
直接操作原表
insert overwrite table tb_name [partition(p=xx)] select * from tb_name [where p=xx];
合并到新表,再做切换
create table tb_name_merge like tb_name;
insert into tb_name [partition(p=xx)] select * from tb_name [where p=xx];
说明
-
同一次合并文件数不建议超过50W,否则会增加hdfs压力,且会导致Hiveserver fullgc。
-
合并是启动mr作业进行合并的,会占用yarn资源,可通过一个map 4G,一个map处理256M文件进行资源预估。
-
合并分区时,不能对正在合并的分区进行读写。
-
存在参数mapreduce.input.fileinputformat.split.minsize.per.node,mapreduce.input.fileinputformat.split.minsize.per.rack不支持客户端直接修改,需添加hive参数白名单。
【2】任务运行类常见故障
【3】SQL使用类常见故障
最后
谢谢大家 @500佰