企业常用Hive SQL配置

在企业中使用Hive SQL需要一定的规范。一般在SQL编写之前,需要进行规范的注释添加,并设定特定的配置。

在SQL文件开始,常见的注释有:

--@Name:所属数据库.结果表
--@Description:描述
--@Type:表类型,如每日汇总表
--@Target:结果表
--@source:数据源表1	别名1
--@source:数据源表2	别名2
--@Author:工号 作者
--@CreateDate:创建日期
--@ModifyBy:修改人
--@ModifyDate:修改日期
--@ModifyDesc:修改描述
--@Copyright  版权

良好的注释,便于代码的阅读和版本的控制。

在注释之后,会添加公用的调优参数:

-- 设置作业名,方便出错后作业查询
set mapred.job.name = TASK_NAME (${hivevar:statis_date});
-- 每个Map最大输入大小,可以适当调整。
set mapred.max.split.size = 300000000;
-- 每个Map最小输入大小,可以适当调整。
set mapred.min.split.size = 100000000;
-- 执行Map前进行小文件合并
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
-- hive自动根据sql,选择使用common join或者map join(关闭)
set hive.auto.convert.join = false;
-- 在Map-only的任务结束时合并小文件
set hive.merge.mapfiles = true;
-- 在Map-Reduce的任务结束时不合并小文件
set hive.merge.mapredfiles = false;
-- 合并文件的大小,可以适当调整。
set hive.merge.size.per.task = 300000000;

这些参数中,首先进行了作业名的设置,然后对Map数量进行了设置,便于并发的提高;Map阶段前进行小文件合并,一定程度上缓解了小文件带来的影响。

接着可以设置Join的自动判断,如果存在小表,则直接使用map join将表加载到内存中,而避免shuffle,这里设置了关闭,可以根据需求来定。

最后设置任务结束时,小文件的合并。

在此之后,便可以进行SQL的编写。良好的开发规范,可以避免很多问题。当然在SQL文件中,一般仅涉及作业调优,对集群的公共调优部分会持久化到配置文件中。