文档章节

Hive SQL 数据倾斜总结

dokia
 dokia
发布于 2017/01/05 17:19
字数 609
阅读 60
收藏 1

在海量数据下的数据查询中,数据倾斜是一个很恐怖的场景。常常看似很普通的数据查询,运行了几个小时也没有结果,其原因往往是发生了数据倾斜。如果真对数据倾斜采取相应的解决方法,那么查询效率将会大大提高。所以,分析数据倾斜是一件相当有意义的任务。本文总结不同情况下的数据倾斜,并分别给出解决方法。

数据倾斜

数据倾斜的实质,是hadoop在mr过程中,对key分发不均匀,导致某些节点上的任务明显比其他节点多,结果就是hadoop的多数节点空闲,而少数节点不停在运行。这样就大大降低了任务执行的效率,延长了执行时间。

数据倾斜主要由两种原因造成。一种是数据本身热点和非热点差异很大,存在长尾。比如10亿条的数据,大部分都属于少量的key,而其他大部分key都只占很少的数据量。这样在分发key的过程中,大量相同key的数据将会被集中到少量节点,从而造成数据倾斜。这种情况下,需要提前确定热点数据和非热点数据,分开处理。

另外一种造成数据倾斜的原因,是在join过程中,表之间的关联的key造成的。下面重点分析这种情况.

Join中的数据倾斜

有两种情况的join会造成数据倾斜,最常见的是大表和小表(作为从表)的join,这种情况下,大表中大量的key因为找不到小表中的匹配而分发不均匀。这种情况下,需对小表使用Mapjoin,将小表提前写入内存,并将join操作提前到map端执行,从而避免数据倾斜。

select /*+mapjoin(b)*/
    a.c2,
    b.c3
from
    (select c1, c2 from t_large)a
left join
    (select c1, c3 from t_small)b
on a.c1 = b.c1

另一种情况是当表中空值过多,在分发key的时候,空值聚集造成长尾。这种情况可以将空值处理成随机值,避免被分发至一处。

select ...
from
    (select * from t_large_1)a
left join
    (select * from t_large_2)b
on coalsece(a.id, rang()*9999) = b.id
-- coalsece方法处理a.id为null的情况

 

© 著作权归作者所有

dokia
粉丝 4
博文 30
码字总数 37393
作品 0
海淀
程序员
私信 提问
漫谈千亿级数据优化实践:数据倾斜

0x00 前言 引用 数据倾斜是大数据领域绕不开的拦路虎,当你所需处理的数据量到达了上亿甚至是千亿条的时候,数据倾斜将是横在你面前一道巨大的坎。 迈的过去,将会海阔天空!迈不过去,就要做...

GordonNemo
2018/11/14
23
0
同事总结的hivesql优化Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的M

同事总结的hive sql 优化   Hive是将符合SQL语法的字符串解析生成可以在Hadoop上执行的MapReduce的工具。   使用Hive尽量按照分布式计算的一些特点来设计sql,和传统关系型数据库有区别,...

武汉梁朝伟
2014/11/17
70
0
hive 数据倾斜总结

数据倾斜总结 在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要是因为在Job完成后的所得到的Counters是整个Job的总和,优化是基于这些Counters得...

八戒_o
2016/03/30
41
0
007.hive调优:大数据倾斜

-----成王败寇(陈小春) 原文章地址:http://www.tbdata.org/archives/2109 hive大数据倾斜总结 在做Shuffle阶段的优化过程中,遇到了数据倾斜的问题,造成了对一些情况下优化效果不明显。主要...

片刻
2014/01/17
543
0
hive中的mapjoin

今天遇到一个hive的问题,如下hive sql: select f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802) 该语句中B表有30亿行记录,A表只有100行记录,而且B表中数据倾斜特别严重,...

张欢19933
2016/09/19
115
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部