1. 多表join优化代码结构:

select .. from JOINTABLES (A,B,C) WITH KEYS (A.key, B.key, C.key) where ....

关联条件相同多表join会优化成一个job

2. LeftSemi-Join是可以高效实现IN/EXISTS子查询的语义

SELECT a.key,a.value FROM a WHERE a.key in (SELECT b.key FROM b);

(1)未实现Left Semi-Join之前,Hive实现上述语义的语句是:

SELECT t1.key, t1.valueFROM a  t1

left outer join (SELECT distinctkey from b) t2 on t1.id = t2.id

where t2.id is not null;

(2)可被替换为Left Semi-Join如下:

SELECT a.key, a.valFROM a LEFT SEMI JOIN b on (a.key = b.key)

这一实现减少至少1次MR过程,注意Left Semi-Join的Join条件必须是等值。

3. 预排序减少map  join和group by扫描数据HIVE-1194

(1)重要报表预排序,打开hive.enforce.sorting选项即可

(2)如果MapJoin中的表都是有序的,这一特性使得Join操作无需扫描整个表,这将大大加速Join操作。可通过

hive.optimize.bucketmapjoin.sortedmerge=true开启这个功能,获得高的性能提升。

  1. set hive.mapjoin.cache.numrows=10000000;
  2. set hive.mapjoin.size.key=100000;
  3. Insert overwrite table pv_users
  4. Select /*+MAPJOIN(pv)*/ pv.pageid,u.age
  5. from page_view pv
  6. join user u on (pv.userid=u.userid;

(3)Sorted Group byHIVE-931

对已排序的字段做Group by可以不再额外提交一次MR过程。这种情况下可以提高执行效率。

4. 次性pv uv计算框架

(1)多个mr任务批量提交

hive.exec.parallel[=false]

hive.exec.parallel.thread.number[=8]

(2) 一次性计算框架,结合multi group by

如果少量数据多个union会优化成一个job;

反之计算量过大可以开启批量mr任务提交减少计算压力;

利用两次group by 解决count distinct 数据倾斜问题

  1. Set hive.exec.parallel=true;
  2. Set hive.exec.parallel.thread.number=2;
  3. From
  4. Select
  5. Yw_type,
  6. Sum(case when type=’pv then ct end) as pv,
  7. Sum(case when type=’pv then 1 end) as uv,
  8. Sum(case when type=’click then ct end) as ipv,
  9. Sum(case when type=’click then 1 end) as ipv_uv
  10. from (
  11. select
  12. yw_type,log_type,uid,count(1) as ct
  13. from (
  14. select total yw_type,‘pv log_type,uid from pv_log
  15. union all
  16. select cat yw_type,‘click log_type,uid from click_log
  17. ) t group by yw_type,log_type
  18. ) t group by yw_type
  19. ) t
  20. Insert overwrite table tmp_1
  21. Select pv,uv,ipv,ipv_uv
  22. Where yw_type=’total
  23.  
  24. Insert overwrite table tmp_2
  25. Select pv,uv,ipv,ipv_uv
  26. Where yw_type=’cat’;

5. 控制hive中的map和reduce数

(1)合并小文件

  1. set mapred.max.split.size=100000000;
  2. set mapred.min.split.size.per.node=100000000;
  3. set mapred.min.split.size.per.rack=100000000;
  4. set hive.input.format=
  5. org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

hive.input.format=……表示合并小文件。大于文件块大小128m的,按照128m来分隔,小于128m,大于100m的,按照100m来分隔,把那些小于100m的(包括小文件和分隔大文件剩下的),进行合并,最终生成了74个块

(2)耗时任务增大map数

setmapred.reduce.tasks=10;

6. 利用随机数减少数据倾斜

大表之间join容易因为空值产生数据倾斜

  1. select
  2. a.uid
  3. from big_table_a a
  4. left outer join big_table_b b
  5. on b.uid = case when a.uid is null or length(a.uid)=0
  6. then concat('rd_sid',rand()) else a.uid end;

hive优化方式总结的更多相关文章

  1. hive join的三种优化方式

    原网址:https://blog.csdn.net/liyaohhh/article/details/50697519 hive在实际的应用过程中,大部份分情况都会涉及到不同的表格的连接, 例如在进行 ...

  2. hive优化之——控制hive任务中的map数和reduce数

    一.    控制hive任务中的map数: 1.    通常情况下,作业会通过input的目录产生一个或者多个map任务.主要的决定因素有: input的文件总个数,input的文件大小,集群设置的文 ...

  3. 一起学Hive——总结常用的Hive优化技巧

    今天总结本人在使用Hive过程中的一些优化技巧,希望给大家带来帮助.Hive优化最体现程序员的技术能力,面试官在面试时最喜欢问的就是Hive的优化技巧. 技巧1.控制reducer数量 下面的内容是我 ...

  4. 大数据技术之_08_Hive学习_04_压缩和存储(Hive高级)+ 企业级调优(Hive优化)

    第8章 压缩和存储(Hive高级)8.1 Hadoop源码编译支持Snappy压缩8.1.1 资源准备8.1.2 jar包安装8.1.3 编译源码8.2 Hadoop压缩配置8.2.1 MR支持的压缩 ...

  5. 大数据开发实战:Hive优化实战1-数据倾斜及join无关的优化

    Hive SQL的各种优化方法基本 都和数据倾斜密切相关. Hive的优化分为join相关的优化和join无关的优化,从项目的实际来说,join相关的优化占了Hive优化的大部分内容,而join相关的 ...

  6. Apache Hive 存储方式、压缩格式

    简介: Apache hive 存储方式跟压缩格式! 1.Text File hive> create external table tab_textfile ( host string com ...

  7. hive 优化 (转)

    Hive优化 Hive优化目标 在有限的资源下,执行效率更高 常见问题 数据倾斜 map数设置 reduce数设置 其他 Hive执行 HQL --> Job --> Map/Reduce ...

  8. Hive(六)hive执行过程实例分析与hive优化策略

    一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...

  9. hive学习(八)hive优化

    Hive 优化 1.核心思想: 把Hive SQL 当做Mapreduce程序去优化 以下SQL不会转为Mapreduce来执行 select仅查询本表字段 where仅对本表字段做条件过滤   Ex ...

随机推荐

  1. C# String与Byte数组的转换

    string转byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes(str); byte[] byteArray = Enc ...

  2. 2019牛客暑期多校训练营(第五场)- G subsequence 1

    题目链接:https://ac.nowcoder.com/acm/contest/885/G 题意:给定字符串s,t,求s中满足字典序大于t的子序列的个数. 思路:组合数学+dp.当子序列长度大于m时 ...

  3. 【Python】【demo实验12】【练习实例】【列表的复制】

    #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- # 将一个列表复制到另外一个列表中: # 分析:可以使用[:] L = [0,3, ...

  4. laravel-admin关联查询问题解决办法

    文档是这么说的: 按照文档上来,没有成功,网上找了好久,说是没有在模型中关联,关联之后的运行结果是这样的: 还是没有成功啊,仔细研究返现是这里写错了,whereHas后面跟的是model中的方法名,而 ...

  5. IntelliJ IDEA 2017.3.2 热加载(Hot Swap)

    一.IntelliJ IDEA 自带热加载,修改代码后点击Ctrl + F9即可 缺点:1.Ctrl + F9只对当前类重新编译加载 2.只支持构造代码块的CRUD.方法体内代码修改.资源文件内容的修 ...

  6. golang(8):channel读写 & goroutine 通信

    goroutine 1.进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位 B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独 ...

  7. O059、Backup Volume 操作

    参考https://www.cnblogs.com/CloudMan6/p/5662236.html   BackUp是将Volume备份到别的地方(备份设备),将来可以通过restore操作恢复. ...

  8. SpringBoot返回页面乱码解决

    SpringBoot,在做全局异常处理的时候,返回中文字符串时,出现乱码情况,网上查阅资料之后,解决方式如下所示,自定义WebConfiguration继承WebMvcConfigurationSup ...

  9. java 获取视频时间

    //先将视频保存到项目生成临时文件,获取时长后删除临时文件 // 使用fastdfs进行文件上传 @RequestMapping("/uploadVideoToFast") @Re ...

  10. Web开发的分层结构与MVC模式

    1.分层结构 所谓分层结构.把不同的功能代码封装成类,把相同功能的类封装在一个个的包中,也叫层.功能归类如下: 实体类: 封装数据,是数据的载体,在层与层之间进行传递,数据也就传递了.比如说要传递学生 ...