Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具。
使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,
所以需要去掉原有关系型数据库下开发的一些固有思维。
基本原则:
1:尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段
select ... from A
join B
on A.key = B.key
where A.userid>10
and B.userid<10
and A.dt='20120417'
and B.dt='20120417';
应该改写为:
select .... from (select .... from A
where dt='201200417'
and userid>10
) a
join ( select .... from B
where dt='201200417'
and userid < 10
) b
on a.key = b.key;
或者也可将where条件放在on子句里面去,即:
select ... from A
join B
on A.key = B.key and A.userid>10
and B.userid<10
and A.dt='20120417'
and B.dt='20120417';
2:尽量原子化操作,尽量避免一个SQL包含复杂逻辑
可以使用中间表来完成复杂的逻辑
drop table if exists tmp_table_1;
create table if not exists tmp_table_1 as
select ......;
drop table if exists tmp_table_2;
create table if not exists tmp_table_2 as
select ......;
drop table if exists result_table;
create table if not exists result_table as
select ......;
drop table if exists tmp_table_1;
drop table if exists tmp_table_2;
3:单个SQL所起的JOB个数尽量控制在5个以下
4:慎重使用mapjoin,一般行数小于2000行,大小小于1M(扩容后可以适当放大)的表才能使用,小表要注意放在join的左边(目前TCL里面很多都小表放在join的右边)。
否则会引起磁盘和内存的大量消耗
5:写SQL要先了解数据本身的特点,如果有join ,group操作的话,要注意是否会有数据倾斜
如果出现数据倾斜,应当做如下处理:
set hive.exec.reducers.max=200;
set mapred.reduce.tasks= 200;---增大Reduce个数
set hive.groupby.mapaggr.checkinterval=100000 ;--这个是group的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.groupby.skewindata=true; --如果是group by过程出现倾斜 应该设置为true
set hive.skewjoin.key=100000; --这个是join的键对应的记录条数超过这个值则会进行分拆,值根据具体数据量设置
set hive.optimize.skewjoin=true;--如果是join 过程出现倾斜 应该设置为true
6:如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%
insert overwite table tablename partition (dt= ....)
select ..... from (
select ... from A
union all
select ... from B
union all
select ... from C
) R
where ...;
可以改写为:
insert into table tablename partition (dt= ....)
select .... from A
WHERE ...;
insert into table tablename partition (dt= ....)
select .... from B
WHERE ...;
insert into table tablename partition (dt= ....)
select .... from C
WHERE ...;
相关推荐
Hive思维导图之Hive优化
作为企业Hadoop应用的核心产品,Hive承载着FaceBook、淘宝等大佬 95%... 拥有1万多个Hive作业的大电商如何进行Hive优化的?本系列课结合企业实战和场景从作业架构层面、Hql(Hive sql)语法层面、Hive参数层面依次讲述。
HIVE优化实战分享 大数据存储方案 很好的参考文档
hive优化.pdf
Hive优化方法整理 hive 数据倾斜 内连接
hive 优化经典。pdf文档。 讨论常见的hive执行瓶颈,对sql的写法和效率较低的情况进行分析和调优
Hive优化.xmind
Hive优化案例、Hive数据处理模式、Hive常见问题与优化、Hive实践
本文档主要总结了hive的参数优化,对hive的理解具有一定的作用
hive 优化在面试以及工作中经常使用,我整理了一份思维导图供大家学习。
测试了关于hive优化的一些方法,ETL需要的朋友可以下载看看。
hive ,优化总结,本文涉及HIVE的参数设置,H—SQL关系的写法中需要注意的地方。
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载。此文档是基于hive大数据库简介、使用场景、性能优化
Hive函数思维导图,便捷整理思路,Hive参数、Hive分桶、Hive视图、Hive运行方式、Hive权限管理、Hive优化
Hive优化以及执行原理,一位前辈总结的hive知识,个人觉得非常有用,资源难找,现在贡献给大家,独乐乐不如众乐乐。
Join 查找操作的基本原则:应该将条目少的表/子查询放在 Join 操作符的左边。原因 是在 Join 操作的 Reduce 阶段,位于 Join 操作符左边的表的内容会被加载进内存,将 条目少的表放在左边,可以有效减少发生内存...
hive 面试宝典,hive常见问题,hive优化非常详细
hadoop hive优化,还不错,学习
hive思维导图与hive优化的相关建议。纯属个人收集在线资料并个人实践之后整理