hive中与hbase外部表join时内存溢出(hive处理mapjoin的优化器机制)
来源:互联网 发布:网络表情包原型 编辑:程序博客网 时间:2024/06/05 05:23
与hbase外部表(wizad_mdm_main)进行join出现问题:
CREATE TABLE wizad_mdm_dev_lmj_edition_result as
select *
from wizad_mdm_dev_lmj_20141120 as w
JOIN wizad_mdm_main as a ON (a.rowkey = w.guid);
程序启动后,死循环,无反应。最后在进行到0.83时,内存溢出失败。
原因:
默认情况下,Hive会自动将小表加到DistributeCache中,然后在Map扫描大表的时候,去和DistributeCache中的小表做join,这称为Mapjoin。
这里wizad_mdm_main是基于HBase的外部表,而这张表在HDFS上的源路径为 /hivedata/warehouse/wizad.db/wizad_mdm_main,实际这个目录为空,
因此,Hive优化器认为它是小表,所以,会将这张表数据加到DistributeCache中,造成内存溢出。
解决办法:
SET hive.auto.convert.join=false; 关闭自动转化MapJoin,默认为true;
SET hive.ignore.mapjoin.hint=false; 关闭忽略mapjoin的hints(不忽略,hints有效),默认为true(忽略hints)。
然后在查询时候使用hints,/*+ mapjoin(w) */ 将小表w (wizad_mdm_dev_lmj_edition_20141120) 加入到DistributeCache,
Map task在扫描HBase中的大表阶段,就可以完成join操作:
SET mapred.job.queue.name=queue3;
SET hbase.client.scanner.caching=5000;
SET hbase.zookeeper.quorum=datanode06,datanode07,datanode08;
SET zookeeper.znode.parent=/hbase;
set hbase.regionserver.lease.period=180000;
SET hive.auto.convert.join=false;
SET hive.ignore.mapjoin.hint=false;
INSERT OVERWRITE LOCAL DIRECTORY '/home/wizad/lmj/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select /*+ mapjoin(w) */ cookie_id,rowkey,fixeddim_map
from wizad_mdm_dev_lmj_edition_20141120 as w JOIN wizad_mdm_main as a
CREATE TABLE wizad_mdm_dev_lmj_edition_result as
select *
from wizad_mdm_dev_lmj_20141120 as w
JOIN wizad_mdm_main as a ON (a.rowkey = w.guid);
程序启动后,死循环,无反应。最后在进行到0.83时,内存溢出失败。
原因:
默认情况下,Hive会自动将小表加到DistributeCache中,然后在Map扫描大表的时候,去和DistributeCache中的小表做join,这称为Mapjoin。
这里wizad_mdm_main是基于HBase的外部表,而这张表在HDFS上的源路径为 /hivedata/warehouse/wizad.db/wizad_mdm_main,实际这个目录为空,
因此,Hive优化器认为它是小表,所以,会将这张表数据加到DistributeCache中,造成内存溢出。
解决办法:
SET hive.auto.convert.join=false; 关闭自动转化MapJoin,默认为true;
SET hive.ignore.mapjoin.hint=false; 关闭忽略mapjoin的hints(不忽略,hints有效),默认为true(忽略hints)。
然后在查询时候使用hints,/*+ mapjoin(w) */ 将小表w (wizad_mdm_dev_lmj_edition_20141120) 加入到DistributeCache,
Map task在扫描HBase中的大表阶段,就可以完成join操作:
SET mapred.job.queue.name=queue3;
SET hbase.client.scanner.caching=5000;
SET hbase.zookeeper.quorum=datanode06,datanode07,datanode08;
SET zookeeper.znode.parent=/hbase;
set hbase.regionserver.lease.period=180000;
SET hive.auto.convert.join=false;
SET hive.ignore.mapjoin.hint=false;
INSERT OVERWRITE LOCAL DIRECTORY '/home/wizad/lmj/'
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
select /*+ mapjoin(w) */ cookie_id,rowkey,fixeddim_map
from wizad_mdm_dev_lmj_edition_20141120 as w JOIN wizad_mdm_main as a
ON (w.guid = a.rowkey);
hive大表与大表join:
1.确保没有笛卡尔积;
2.确保没有数据倾斜;
3.增加reduce数;
4.不行再试试分桶join;
0 0
- hive中与hbase外部表join时内存溢出(hive处理mapjoin的优化器机制)
- Hive join优化(mapjoin,streamtable)
- hive的MapJoin机制
- hive sql优化-join Mapjoin Group by
- Hive优化----MapJoin 优化
- Hive中Mapjoin的使用
- Hive mapjoin 与 Bucket mapjoin
- hive MapJoin优化
- Hive MapJoin 优化
- Hive MapJoin 优化
- Hive MapJoin 优化
- hive优化(1)之mapjoin
- #Hive#Mapjoin的使用
- hive的mapjoin
- Hive中Join的原理和机制
- hive mapjoin
- Hive MapJoin
- Hive学习笔记1:Hive创建外部表指向Hbase表时的汉字乱码问题
- ceph存储 ceph集群pool、pg、crush设置
- iOS学习爬坑记录6: 为Xcode 6.1添加Empty Application project template
- android的EditText控件技巧
- Leetcode:4Sum与3Sum
- 出现未将对象对象引用设置到对象的实例
- hive中与hbase外部表join时内存溢出(hive处理mapjoin的优化器机制)
- Big Number 1018
- 问卷-设计开发,数据库设计到前台页面
- syslog
- 我喜欢的乐队-Descending
- 网页设计小工具
- 堆和栈的区别(转过无数次的文章)
- 广告联盟、营销中常见的词汇
- Servlet入门一