问题背景

最近遇到一个比较棘手的事情:hive sql优化:

lib表(id,h,soj,noj,sp,np)         --一个字典表

mitem表(md,mt,soj,noj,sp,np)--一天的数据,包含小时分区的表。

业务:

1)需要先把lib表与mitem表进行关联(关联条件是lib.soj=mitem.soj and lib.noj=mitem.noj),关联后的结果按照soj,md,mt,id,h进行分组;

2)对1)中的结果在分组的时候需要统计差值的平均值记为svalue;

3)对关联后的分区的统计后的数据,进行一次分组排序:按照soj,md,mt分组,按照svalue排序,只保留同一个分组内排序第一的记录。

其中表lib有3亿条记录,mitem表包含记录数50~150亿左右,lib与mitem关联后的记录数在6000亿条记录,之后对这个关联后的结果进行进行分组却执行了6小时后抛出异常问题。

尝试解决方案

瓶颈主要体现在在对第一次关联后的记录包含了6000亿条记录进行分组时,耗费资源,资源不足导致的问题。

尝试过的解决方案:

1)创建索引:《hive:创建索引》

针对该6000亿条记录进行创建索引,耗费了20小时后依然是在stage2失败了,此方案推翻。

2)对mitem数据按照小时粒度进行数据拆分,之后每一个小时的mitem与lib进行关联,结果耗费时间为20多个小时,依然是抛出异常。

3)对mitem数据按照小时粒度进行分区,同时对lib表按照字段soj进行分页(分10页,一页中包含的lib记录数约3000w条)《hive:某张表进行分页》

create table lib_soj as select soj from lib group by soj;--记录数约为8000条记录

create table lib_soj_page as select row_number()over(order by soj)rnum,soj from lib_soj;

create table lib_1_1000 as select t10.* from lib t10 inner join lib_soj_page t11 on t10.soj=t11.soj where t11.rnum between 1 and 1000;--记录数约为3000w条记录。

此时,拿一个小时的select * from mitem where hour='2017102412' 与一个分页中的soj进行关联,数据终于出来了,可是耗费的时间为1小时20分,那么该总体时间为1.33*24*10小时。时间实际上太长了。

4)针对2)、3)的方案我们得知,如果把mitem查分带来的效果实际上是不大,而查分lib的效果特别明显,于是想到如果把lib查分的粒度更细与一天的mitem进行关联是否可行(这里是查分为20份,一份数据约为1500w)。

测试结果,耗时3小时20分,那么总体的时间约为3.33*20小时。如果并行执行多个分页的数据相信时间上会缩短。

但是目前这个方案应该是shuffle时出现了数据偏移问题:

调优:

https://tech.meituan.com/spark-tuning-pro.html

提高shuffle并行度:

http://blog.csdn.net/u013939918/article/details/60956620

Hive:表1inner join表2结果group by优化相关推荐

  1. Hive基本操作,DDL操作(创建表,修改表,显示命令),DML操作(Load Insert Select),Hive Join,Hive Shell参数(内置运算符、内置函数)等

    1.  Hive基本操作 1.1DDL操作 1.1.1    创建表 建表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_nam ...

  2. 关于hive中Map join 时大表left join小表的问题

    在hive中,(启用Map join时) 大表left join小表,加载从右向左,所以小表会加载进内存,存储成map键值对,通过大表驱动小表,来进行join,即大表中的join字段作为key 来获取 ...

  3. hive分桶表join_Hive:JOIN及JOIN优化 2015.10.25

    1. Join的基本原理 大家都知道,Hive会将所有的SQL查询转化为Map/Reduce作业运行于Hadoop集群之上.在这里简要介绍Hive将Join转化为Map/Reduce的基本原理(其它查 ...

  4. Hive中小表与大表关联(join)的性能分析

    经常看到一些Hive优化的建议中说当小表与大表做关联时,把小表写在前面,这样可以使Hive的关联速度更快,提到的原因都是说因为小表可以先放到内存中,然后大表的每条记录再去内存中检测,最终完成关联查询. ...

  5. Hive SQL 小表与大表Join 原理与实操

    一.案例演示 1)没有使用map join -- a 表是大表,数据量是百万级别 -- b 表是小表,数据量在百级别 select a.field1 as field1,b.field2 as fie ...

  6. hive中多表full join主键重复问题

    目录 0. 其他 1. 问题描述 2. 问题复现 2.1. 建表语句 2.2. 插入数据 2.3. 查询SQL以及问题 3. 问题原因 4. 问题解决 0. 相关文章链接 开发随笔文章汇总 1. 问题 ...

  7. Hadoop Hive创建外部表及多表join操作

    hive在drop内部表时会将数据一并删除,但在drop外部表时不会

  8. 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优

    侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...

  9. hive 两个没有null指定的表左关联的结果有null_Hive的优化原则

    原文链接:https://zhuanlan.zhihu.com/p/174469951 本篇将 Hive 的优化分成三个部分: 第一部分是 SQL 通用语法优化, 第二部分是针对 Hive 所具有的数 ...

最新文章

  1. 公开课报名 | 基于自定义模板的OCR结果的结构化处理技术
  2. linux安装软件不同用户名密码,Linux的安装和基本命令
  3. c语言 内存搜索,怎么在一段内存中搜索一个十六进制串
  4. 160个Crackme032用ProcessMonitor拆解KeyFile保护
  5. 软考-信息系统项目管理师-信息系统综合测试与管理
  6. [HDU]2089不要62
  7. 《MATLAB R2012a超级学习手册》一2.5 本章小结
  8. ctype.h,ctype.c 结构分析 \linux-1.0\linux\include\linux\ctype
  9. js 刷新div_vue.js备忘记录(五) vue-router
  10. java 线程状态_【19期】为什么Java线程没有Running状态?
  11. RT-Thread 简介 https://www.rt-thread.org/
  12. 【QCustomPlot】1.0 - QCustomPlot库添加到自己的工程、创建工程
  13. markDown用这一招实现图片并排显示
  14. openindiana软件包维护
  15. python_mysql
  16. 啡鸟集:什么样的咖啡豆,才是好的咖啡豆?
  17. Oracle 存储过程详解(上)
  18. 一次性读懂云计算中的6大热门词汇
  19. MFC-SaoChat(模仿QQ)聊天软件
  20. MPC、LMPC、LEMPC、NMPC、 NEMPC

热门文章

  1. 解决Please choose a writable location using the '-configuration' command line option
  2. windows下安装配置mongodb
  3. elasticsearch不能使用root启动问题解决
  4. WebJars——web端静态资源的jar包
  5. 操作系统的实现(0)
  6. Installshield x:实现序列号检验,获取用户信息并写入指定_ini文件1 - 子夜 MySpace聚友博客...
  7. 《DSP using MATLAB》Problem 7.2
  8. python框架Flask学习笔记之get和post请求
  9. 密码学笔记——zip明文攻击
  10. 搜狗浏览器也可以直接安装Chrome插件,太棒了