hive: join 遇到问题
在表连接时遇到一个问题:
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 遇到问题的更多相关文章
- Hive JOIN使用详解
转自http://shiyanjun.cn/archives/588.html Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL.有了Hive,如果使用过SQL语言,并且不理解 ...
- Hive Join
最近被朋友问到有关于Hive Join的问题,保守回答过后,来补充补充知识: Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能. 一.Hi ...
- Hive JOIN的基本操作 及 内部实现
1.HIVE基本操作: [一起学Hive]之十一-Hive中Join的类型和用法 注:HIve不支持非等值连接: 什么是等值连接: //Oracle SQL 不等值连接 //通过不等值连接查找7788 ...
- Hive Join优化
在阐述Hive Join具体的优化方法之前,首先看一下Hive Join的几个重要特点,在实际使用时也可以利用下列特点做相应优化: 1. 只支持等值连接 2. 底层会将写的HQL语句转换为MapRed ...
- Hive——join的使用
Hive--join的使用 hive中常用的join有:inner join.left join .right join .full join.left semi join.cross join.mu ...
- hive join 优化
common join : 即reducer join,瓶颈在shuffle阶段,会产生较大的网络io: map join:即把小表放前面,扫描后放入每个节点的内存,在map阶段进行匹配: 开启map ...
- 转载:几种 hive join 类型简介
作为数据分析中经常进行的join 操作,传统DBMS 数据库已经将各种算法优化到了极致,而对于hadoop 使用的mapreduce 所进行的join 操作,去年开始也是有各种不同的算法论文出现,讨论 ...
- hive join的三种优化方式
原网址:https://blog.csdn.net/liyaohhh/article/details/50697519 hive在实际的应用过程中,大部份分情况都会涉及到不同的表格的连接, 例如在进行 ...
- hive join 优化 --小表join大表
1.小.大表 join 在小表和大表进行join时,将小表放在前边,效率会高.hive会将小表进行缓存. 2.mapjoin 使用mapjoin将小表放入内存,在map端和大表逐一匹配.从而省去red ...
随机推荐
- android webview加载网络连接
webview = (WebView) findViewById(R.id.webview); WebSettings webSettings = webview.getSettings(); //设 ...
- java IO(一):File类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Oracle Rac创建表空间及用户
1. 创建表空间: BEGIN DECLARE cnt integer := 0; BEGIN SELECT 1 INTO cnt FROM dual WHERE exists(SELECT * FR ...
- java文件监控[转]
原文链接:http://blog.csdn.net/dancen/article/details/7786987#comments 问题:存在两个文件目录,且称之为源目录和目标目录,需要不定期将源目录 ...
- Selenium+PhantomJS实现简易有道翻译爬虫
Selenium一款自动化测试工具,当然用来写爬虫也是没有问题的.它支持Chrome.Safari.Firefox等主流界面式浏览器,另外它也支持多种语言开发,比如 Java,C,Ruby,Pytho ...
- 安装RabbitMQ(一)
RabbitMQ简介 RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能.健壮以及可伸缩性出名的 ...
- java生产者与消费者模式
前言: 生产者和消费者模式是我们在学习多线程中很经典的一个模式,它主要分为生产者和消费者,分别是两个线程, 目录 一:生产者和消费者模式简介 二:生产者和消费者模式的实现 声明:本例来源于java经典 ...
- 常用VI操作命令
# ------------------- VI basic ------------------------------- # file name: VI_basic # author : # da ...
- 自定义状态栏的颜色及navigation的title颜色
1.在info.plist中添加View controller-based status bar appearance,值为NO 2.在设置状态栏的地方添加代码 [[UIApplication sha ...
- memcached 的实践操作
memcached安装和使用 yum install -y libevent memcached libmemcached 启动命令: /etc/init.d/memcached st ...