hive理论
join操作:

这个
group by count()操作:

数据倾斜:
操作
• Join on a.id=b.id
• Group by
• Count Distinct count(groupby)
• 原因
• key分布不均导致的
• 人为的建表疏忽
• 业务数据特点
• 症状
• 任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。
• 查看未完成的子任务,可以看到本地读写数据量积累非常大,通常超过10GB可以认定为发生数据倾斜。
• 倾斜度
• 平均记录数超过50w且最大记录数是超过平均记录数的4倍。Null 50w 10w
• 最长时长比平均时长超过4分钟,且最大时长超过平均时长的2倍。
• 万能方法
• hive.groupby.skewindata=true
原因
• Hive在进行join时,按照join的key进行分发,而在join左边的表的数据会首先读入内存,如果左边表的key相对分
散,读入内存的数据会比较小,join任务执行会比较快;而如果左边的表key比较集中,而这张表的数据量很大,
那么数据倾斜就会比较严重,而如果这张表是小表,则还是应该把这张表放在join左边。
• 思路
• 将key相对分散,并且数据量小的表放在join的左边,这样可以有效减少内存溢出错误发生的几率
• 使用map join让小的维度表先进内存。
• 方法
• Small_table join big_table
原因
• 日志中有一部分的userid是空或者是0的情况,导致在用user_id进行hash分桶的时候,会将日志中userid为0或者
空的数据分到一起,导致了过大的斜率。
• 思路
• 把空值的key变成一个字符串加上随机数,把倾斜的数据分到不同的reduce上,由于null值关联不上,处理后并不
影响最终结果。
•
• 方法 -0 2 -1 2 -2 3 -0 -1 -2 -
• on case when (x.uid = '-' or x.uid = '0‘ or x.uid is null) then concat(‘-',rand()) else x.uid end =f.user_id;
案例
• Select * from dw_log t join dw_user t1 on t.user_id=t1.user_id
• 现象:两个表都上千万,跑起来很悬 1,2,3,4,5,2,3,4 2,3,4
• 思路
• 当天登陆的用户其实很少
• 方法
• Select/*+MAPJOIN(t12)*/ *
• from dw_log t11
• join (
• select/*+MAPJOIN(t)*/ t1.*
• from (
• select distinct user_id from dw_log --group by user_id
• ) t
• join dw_user t1
• on t.user_id=t1.user_id
• ) t12
• on t11.user_id=t12.user_id
原因
• 做count distinct时,该字段存在大量值为NULL或空的记录。
• 思路
• count distinct时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结
果中加1。
• 如果还有其他计算,需要进行group by,可以先将值为空的记录单独处理,再和其他计算结果进行union
• 方法
• select cast(count(distinct user_id)+1 as bigint) as user_cnt
• from tab_a
• where user_id is not null and user_id <> ''
案例
• Select day,count(distinct session_id),count(distinct user_id) from log a group by day
• 问题
• 同一个reduce上进行distinct操作时压力很大
• 方法
select day,
count(case when type='session' then 1 else null end) as session_cnt,
count(case when type='user' then 1 else null end) as user_cnt
from (
select day,session_id,type
from (
select day,session_id,'session' as type
from log
union all
elect day user_id,'user' as type
from log
) group by day,session_id,type
) t1 group by day;
hive理论的更多相关文章
- 【Hive三】Hive理论
1. Hive基础 1. Hive基础 Hive基本概念 引入原因: Hive是什么 Hive数据管理 四种数据模型 Hive内部表和外部表 Hive数据类型 Hive的优化 Map的优化: Redu ...
- about云资源汇总V1,3
mongodb文档与视频资料分享 1.mongodb1-72.mongodb8-17集含代码3.MongoDB_and_Python学习笔记4.深入学习MongoDb5.PHP&MongoDB ...
- Apache Hive 基本理论与安装指南
一.Hive的基本理论 Hive是在HDFS之上的架构,Hive中含有其自身的组件,解释器.编译器.执行器.优化器.解释器用于对脚本进行解释,编译器是对高级语言代码进行编译,执行器是对java代码的执 ...
- Hive的学习之路(理论篇)
一.Hive介绍 Apache官网给出的logo,一半是Hadoop大象的头,一半是蜜蜂的身体,也是寓意着它是基于Hadoop,哈哈,纯属个人理解,进入正题. Hive是基于Hadoop的一个数据仓库 ...
- Hive不支持非相等的join
由于 hive 与传统关系型数据库面对的业务场景及底层技术架构都有着很大差异,因此,传统数据库领域的一些技能放到 Hive 中可能已不再适用.关于 hive 的优化与原理.应用的文章,前面也陆陆续续的 ...
- Hive技术文档
Hive是什么? Hive是蜂房的意思,为什么hadoop上的这层数据仓库叫Hive? 因为生物学上蜂房是一个结构相当精良的建筑,取名Hive足见则个数据仓库在数据存储上也是堪称精良的.Hive是Fa ...
- Hbase总结(一)-hbase命令,hbase安装,与Hive的区别,与传统数据库的区别,Hbase数据模型
Hbase总结(一)-hbase命令 下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', ...
- HIVE中内连接和左半连接不一致问题
一.理论 HIVE中都是按等值连接来统计的,理论上两种写法统计结果应该是一致的: 二.实际情况 但实际使用中发现两种写法会返回的结果,总会有一些差距虽然差别不大,但让人很是困惑. 三.原因 当使用jo ...
- Hive 编程之DDL、DML、UDF、Select总结
Hive的基本理论与安装可参看作者上一篇博文<Apache Hive 基本理论与安装指南>. 一.Hive命令行 所有的hive命令都可以通过hive命令行去执行,hive命令行中仍有许多 ...
随机推荐
- 学习笔记之GitHub
GitHub https://github.com/ GitHub - Wikipedia https://en.wikipedia.org/wiki/GitHub GitHub (originall ...
- css 规则中两个类连在一起是什么意思?
原文地址:http://www.cxybl.com/html/wyzz/CSS/20120601/27374.html 比如: .c1.c2 { text-decoration:underline; ...
- 远程服务器安装mysql数据库
https://www.cnblogs.com/renjidong/p/7047396.html 1.新开的云服务器,需要检测系统是否自带安装mysql # yum list installed | ...
- Unity打包Android平台AssetBundle脚本
注意,BuildTarget tagetPlatform参数为BuildTarget.Android using UnityEngine; using UnityEditor; public clas ...
- C#语言集合
switch 用法 int x = int.Parse(Console.ReadLine()); switch(x){ case 1: Console.WriteLine("这是1" ...
- Alpha预乘-混合与不混合[转]
作者:John McDonald,于2013年1月31日上午07:57发布 标签: GameWorks专家开发人员 Alpha Blending几乎是每个3D应用程序的一小部分,但却很重要.从概念上 ...
- CSS便捷开发小工具汇总
1.Prefix free 可以帮助开发者省去编写各种CSS3属性前缀的工作,只需要在页面中引入prefixfree.js即可. 2. Normalize 是一个CSS Reset工具, 相比传统的R ...
- CS229 6.10 Neurons Networks implements of softmax regression
softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...
- vue elment-ui 样式替换 input select
# 有时候经常需要替换element-ui的样式 第一种方法: 直接修改源码,样式路径如下 直接修改idnex.css即可. 第二种方法: 直接在当前页面修改,替换掉原来的样式. <style ...
- 「2017 山东一轮集训 Day4」棋盘(费用流)
棋盘模型 + 动态加边 #include<cstdio> #include<algorithm> #include<iostream> #include<cs ...