码迷,mamicode.com
首页 > 其他好文 > 详细

Hive on Tez 出现的bug 及原因解析

时间:2020-04-10 19:45:14      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:rom   问题   table   select   部分   关闭   engine   cond   引擎   

现象描述

在使用Tez引擎查询时,发现一个bug:

  

SELECT
         t1.*,t2.activity_id,t3.timeMap
     from
         (select * from ods_order_info where dt=2020-03-29) t1  --单独查询结果为7条
             left join
         (select order_id,activity_id  from ods_activity_order where dt=2020-03-29) t2  --t1 与t2 left join ,结果为7条
         on t1.id=t2.order_id
             join
         (select order_id,str_to_map(concat_ws(,,collect_set(concat(order_status,=,operate_time))),,,=) timeMap
          from ods_order_status_log where dt=2020-03-29
          group by order_id) t3  --单独查询是跟t1主键相同的7条
         on t3.order_id=t1.id

讲道理此SQL查询出的结果应该是7条,但是结果确是4条  

  技术图片

 

 而利用MR引擎查询出来的结果是正确的7条

set hive.execution.engine=mr;

技术图片

 

 原因分析

这是因为Tez和MR一样,都默认开启了mapjoin,这里面涉及到了几个参数

-- 是否自动开启mapjoin,默认为true
set hive.auto.convert.join=true;

-- mapjoin小表和大表的阈值设置
set hive.mapjoin.smalltable.filesize=25000000;

-- 多个mapjoin 转换为1个时,限制输入的最大的数据量 影响tez,默认10m
set hive.auto.convert.join.noconditionaltask.size =10000000;

当表的数据大于10m时,tez会把多余的那部分数据截掉,这样就会造成丢数据

解决方法

1.

hive.mapjoin.smalltable.filesize和hive.mapjoin.smalltable.filesize一致或者更大,一般扩大10倍是不会有问题的 保证小表中所有的数据,都可以参与计算。

2.

关闭map join 

Hive on Tez 出现的bug 及原因解析

标签:rom   问题   table   select   部分   关闭   engine   cond   引擎   

原文地址:https://www.cnblogs.com/yangxusun9/p/12675606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!