企业常用Hive SQL配置
在企业中使用Hive SQL需要一定的规范。一般在SQL编写之前,需要进行规范的注释添加,并设定特定的配置。
在SQL文件开始,常见的注释有:
代码语言:javascript复制--@Name:所属数据库.结果表
--@Description:描述
--@Type:表类型,如每日汇总表
--@Target:结果表
--@source:数据源表1 别名1
--@source:数据源表2 别名2
--@Author:工号 作者
--@CreateDate:创建日期
--@ModifyBy:修改人
--@ModifyDate:修改日期
--@ModifyDesc:修改描述
--@Copyright 版权
良好的注释,便于代码的阅读和版本的控制。
在注释之后,会添加公用的调优参数:
代码语言:javascript复制-- 设置作业名,方便出错后作业查询
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文件中,一般仅涉及作业调优,对集群的公共调优部分会持久化到配置文件中。
后话
如果有帮助的,记得点赞、关注。在公众号《数舟》中,可以免费获取专栏《数据仓库》配套的视频课程、大数据集群自动安装脚本,并获取进群交流的途径。
我所有的大数据技术内容也会优先发布到公众号中。如果对某些大数据技术有兴趣,但没有充足的时间,在群里提出,我为大家安排分享。