在表连接时遇到一个问题:

insert overwrite table BF_EVT_CRD_CRT_TRAD2
select BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_NO,BF_AGT_CRD_CRT.OUT_CRD_INSTN_CD
from BF_AGT_CRD_CRT join jjkdjk on (BF_AGT_CRD_CRT.CUST_NO=jjkdjk.pcust_no) join BF_EVT_CRD_CRT_TRAD on (BF_EVT_CRD_CRT_TRAD.CRD_NO= BF_AGT_CRD_CRT.CRD_NO);

  该语句中如果大表有30亿行记录,而小表只有100行记录,而且那么大表中数据倾斜特别严重,有一个key上有15亿行记录,在运行过程中特别的慢,而且在reduece的过程中遇有内存不够而报错。

考虑map join 的原理:

MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在map是进行了join操作,省去了reduce运行的效率也会高很多

解决思路:

BF_AGT_CRD_CRT  count(*)  4031974
jjkdjk  count(*)  3912676 BF_EVT_CRD_CRT_TRAD  count(*)  251512826
采用hint方式启动数据驱动,如:
select f.a,f.b from A t join B f  on ( f.a=t.a and f.ftime=20110802)
改为
select /*+ mapjoin(A)*/ f.a,f.b from A t join B f on ( f.a=t.a and f.ftime=20110802)

  

insert overwrite table BF_EVT_CRD_CRT_TRAD2
select /*+ mapjoin(BF_AGT_CRD_CRT)*/BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_NO,BF_AGT_CRD_CRT.OUT_CRD_INSTN_CD
from BF_AGT_CRD_CRT join jjkdjk on (BF_AGT_CRD_CRT.CUST_NO=jjkdjk.pcust_no) join BF_EVT_CRD_CRT_TRAD on (BF_EVT_CRD_CRT_TRAD.CRD_NO= BF_AGT_CRD_CRT.CRD_NO);

但还是报错。

Total MapReduce jobs = 4
2014-10-22 05:45:06 Starting to launch local task to process map join; maximum memory = 1065484288
2014-10-22 05:45:42 Processing rows: 200000 Hashtable size: 199999 Memory usage: 82761296 percentage: 0.078
2014-10-22 05:45:45 Processing rows: 300000 Hashtable size: 299999 Memory usage: 114515648 percentage: 0.107
2014-10-22 05:45:47 Processing rows: 400000 Hashtable size: 399999 Memory usage: 148324312 percentage: 0.139
.......
2014-10-22 05:46:37 Processing rows: 2400000 Hashtable size: 2399999 Memory usage: 851355056 percentage: 0.799
2014-10-22 05:46:46 Processing rows: 2500000 Hashtable size: 2499999 Memory usage: 888876848 percentage: 0.834
2014-10-22 05:46:47 Processing rows: 2600000 Hashtable size: 2599999 Memory usage: 934695048 percentage: 0.877
2014-10-22 05:46:48 Processing rows: 2700000 Hashtable size: 2699999 Memory usage: 973416544 percentage: 0.914
Execution failed with exit status: 3
Obtaining error information Task failed!
Task ID:
Stage-12 Logs: /tmp/root/hive.log
FAILED: Execution Error, return code 3 from org.apache.hadoop.hive.ql.exec.mr.MapredLocalTask

  

分析原因是:

任务自动把join装换mapjoin时内存溢出,解决法子:关闭自动装换,11前的版本默认值为false,后面的为true;

所以hive默认配置参数为set hive.auto.convert.join = true;

首先把小的表加入内存,hive自动根据sql,选择使用common join或者map join,导致只针对小表来确定mapreduce个数和运行空间,而大表根本就处理不了。

而hive.mapjoin.smalltable.filesize 默认值是25mb

set mapreduce.map.memory.mb=2049;
set mapreduce.reduce.memory.mb=20495;
set hive.auto.convert.join=false;
insert overwrite table BF_EVT_CRD_CRT_TRAD2
select BF_EVT_CRD_CRT_TRAD.*, jjkdjk.CUST_NO,BF_AGT_CRD_CRT.OUT_CRD_INSTN_CD
from BF_AGT_CRD_CRT join jjkdjk on (BF_AGT_CRD_CRT.CUST_NO=jjkdjk.pcust_no) join BF_EVT_CRD_CRT_TRAD on (BF_EVT_CRD_CRT_TRAD.CRD_NO= BF_AGT_CRD_CRT.CRD_NO);

  

hive: join 遇到问题的更多相关文章

  1. Hive JOIN使用详解

    转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...

  2. Hive Join

    最近被朋友问到有关于Hive Join的问题,保守回答过后,来补充补充知识: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 一.Hi ...

  3. Hive JOIN的基本操作 及 内部实现

    1.HIVE基本操作: [一起学Hive]之十一-Hive中Join的类型和用法 注:HIve不支持非等值连接: 什么是等值连接: //Oracle SQL 不等值连接 //通过不等值连接查找7788 ...

  4. Hive Join优化

    在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...

  5. Hive——join的使用

    Hive--join的使用 hive中常用的join有:inner join.left join .right join .full join.left semi join.cross join.mu ...

  6. hive join 优化

    common join : 即reducer join,瓶颈在shuffle阶段,会产生较大的网络io: map join:即把小表放前面,扫描后放入每个节点的内存,在map阶段进行匹配: 开启map ...

  7. 转载:几种 hive join 类型简介

    作为数据分析中经常进行的join 操作,传统DBMS 数据库已经将各种算法优化到了极致,而对于hadoop 使用的mapreduce 所进行的join 操作,去年开始也是有各种不同的算法论文出现,讨论 ...

  8. hive join的三种优化方式

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

  9. hive join 优化 --小表join大表

    1.小.大表 join 在小表和大表进行join时,将小表放在前边,效率会高.hive会将小表进行缓存. 2.mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配.从而省去red ...

随机推荐

  1. 优秀的基于VUE移动端UI框架合集

    1. vonic 一个基于 vue.js 和 ionic 样式的 UI 框架,用于快速构建移动端单页应用,很简约,是我喜欢的风格 star 2.3k 中文文档 在线预览 2.vux 基于WeUI和Vu ...

  2. SQL语句-SELECT语句

    select语句 Select语句是指从现存的一个或多个表中查看满足条件的数据 Select语句常规用法: 查看表中所有数据 Select * from students; 查看所有的sid和snam ...

  3. 为什么.Net平台不支持程序集卸载(Assembly.Unload)?

    我们知道在.net平台中反射提供了在运行时动态的获得程序或程序集中每一个类型(包括类.结构.委托.接口和枚举等)的成员和成员的信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象.我们知道 ...

  4. java 多维数组遍历

    java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ...

  5. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法

    Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...

  6. Python随笔,day1

    #python中不存在单个字符的运算,只有字符串函数 >>> s="www.google.com" >>> s 'www.google.com' ...

  7. 使用hexo搭建个人博客

    安装前提 node.js git 如果缺少以上条件,则前往相应的官网下载安装即可.. 安装hexo $ npm install hexo-cli -g 待安装完成后,执行相关命令查看hexo的信息. ...

  8. 解决苹果电脑(mac)管理员账户变成了普通用户后不能解锁用户与群组的问题

    亲们,我先说说前因,然后再说一下解决方法. 前因 今天不知怎么就想把苹果电脑原来的名字给改一下,于是就做了下面的操作(你们不要这样做) 1.系统偏好设置→用户与组群→当前管理员用户→(右键)高级选项 ...

  9. javase学习小结一

    输出格式: int num=12345; System.out.printf("%7d",number);输出结果为:空格空格12345 System.out.println(&q ...

  10. 小甲鱼OD学习第3讲

    这次我们的任务是破解这个过期的软件,效果如图所示 我们通过阅读代码,知道这个程序的执行流程如图中注释所示 观看下图注释所示 这是失败的提示代码 这是成功的提示代码 最后我们可以得出结论,成功破解软件的 ...