美文网首页
Hive碎碎念(6):HIVE优化

Hive碎碎念(6):HIVE优化

作者: xxlee | 来源:发表于2019-06-27 14:21 被阅读0次

转载请在文章起始处注明出处,谢谢。


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 = '2018-05-17'

 and B.dt = '2018-05-17';

改写为:

select ....

from

( select ....

from A

 where dt='2018-05-17'

 and userid > 10

) a

join

( select ....

from B

 where dt = '2018-05-17'

 and userid < 10

) b

on a.key = b.key;
2、分区表统计尽量使用分区
3、尽量避免一个SQL包含复杂逻辑

建议尽量使用中间表来完成复杂的逻辑处理。

4 、join操作

小表要注意放在join的左边(关系型数据库查询中里面很多都小表放在join的右边),否则会引起磁盘和内存的大量消耗

5、如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%

举例:

insert overwrite table tablename partition (dt= ....)

select ..... from (

 select ... from A

 union all

 select ... from B

 union all

 select ... from C

) t01

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 ...;
6、写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
PS:Hive优化参数(写在执行语句前)
set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
set hive.hadoop.supports.splittable.combineinputformat=true;
set mapreduce.input.fileinputformat.split.maxsize = 256000000;
set mapreduce.input.fileinputformat.split.minsize.per.node = 128000000;
set mapreduce.input.fileinputformat.split.minsize.per.rack = 128000000;
set hive.merge.mapfiles = true;
set hive.merge.mapredfiles = true;
set hive.merge.size.per.task = 256000000;
set hive.merge.smallfiles.avgsize = 256000000;
set hive.exec.parallel = true;

相关文章

  • Hive碎碎念(6):HIVE优化

    转载请在文章起始处注明出处,谢谢。 Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapRe...

  • Hive碎碎念(9):HIVE前缀

    转载请在文章起始处注明出处,谢谢。 --1、配置MR任务结束后进行文件合并(合并小文件) set hive.mer...

  • 数仓--Hive-面试之Hive优化策略

    Hive的优化策略大致分为:配置优化(hive-site.xml和hive-cli执行前配置)、表优化、hive数...

  • Hive碎碎念(8):正则

    转载请在文章起始处注明出处,谢谢。 一、Hive常用的正则函数: 1、LIKE比较: LIKE 语法: A LIK...

  • Hive碎碎念(7):高端函数

    转载请在文章起始处注明出处,谢谢。 1、 left semi joinLEFT SEMI JOIN (左半连接)是...

  • Hive碎碎念(1):常用函数

    转载请在文章起始处注明出处,谢谢。 关系运算 1、等值比较: = 语法:A=B操作类型:所有基本类型描述: 如果表...

  • Hive优化

    Hive简单优化与定期ETL Hive优化 Hive的执行依赖于底层的MapReduce作业,因此对Hadoop作...

  • Hive优化

    Hive优化 今天的主要内容——Hive优化 Fetch抓取Hive 中对某些情况的查询可以不必使用 MapRed...

  • Hive 企业使用优化一

    Hive优化之一fetch task。 优化场景, 1、当在hive中执行select * from emp全部查...

  • Hive碎碎念(3):order by,sort by,dist

    转载请在文章起始处注明出处,谢谢。 一:order by order by会对输入做全局排序,因此只有一个Redu...

网友评论

      本文标题:Hive碎碎念(6):HIVE优化

      本文链接:https://www.haomeiwen.com/subject/ghplcctx.html