Hive实用小文件合并方案

 #Hive常见故障 #大数据 #生产环境真实案例 #Hive #离线数据库 #整理 #经验总结

说明:此篇总结hive常见故障案例处理方案 结合自身经历 总结不易 +关注 +收藏 欢迎留言

🎺Hive实用小文件合并方案 请往下翻 !!!

更多Hive案例汇总方案 (点击跳转)

Hive常见故障多案例维护宝典 --项目总结(宝典一)

Hive常见故障多案例维护宝典 --项目总结(宝典二)

目录内容如下:

架构概述
【1】参数及配置类常见故障

     .......

Hive实用小文件合并方案

问题

表对应小文件过多,在频繁对该表(分区)操作时会对hdfs性能产生较大压力,小文件判断标准:

  • 表(分区)下存在大量M级别以下文件。

  • 表(分区)下文件平均大小小于25M。

原因

  1. 每次insert插入数据都至少生成一个文件,例如一次只插入一条数据时也会产生一个文件,所以在入库频次较高时会存在产生大量小文件问题。

  2. 业务侧产生大量小文件。

解决方法

业务侧调整入库频次等
使用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];

说明

  1. 同一次合并文件数不建议超过50W,否则会增加hdfs压力,且会导致Hiveserver fullgc。

  2. 合并是启动mr作业进行合并的,会占用yarn资源,可通过一个map 4G,一个map处理256M文件进行资源预估。

  3. 合并分区时,不能对正在合并的分区进行读写。

  4. 存在参数mapreduce.input.fileinputformat.split.minsize.per.node,mapreduce.input.fileinputformat.split.minsize.per.rack不支持客户端直接修改,需添加hive参数白名单。


【2】任务运行类常见故障

【3】SQL使用类常见故障

最后

谢谢大家 @500佰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值