首页 > 其他分享 >hive-3.0.0 版本中遇到的bug 汇总

hive-3.0.0 版本中遇到的bug 汇总

时间:2024-03-04 20:35:38浏览次数:27  
标签:jira https hive 3.0 apache org bug issues

目前公司用的hive 版本是 hive-3.0.0 bug 较多,这里汇总整理下,以备查阅 (如有缺失欢迎补充)

1.表单属性bucket_version 不同,导致join数据异常

1.1 自查方式

1.用spark-sql和hive 的结果数据对比
2.用hive引擎对比有无 hive.optimize.joinreducededuplication=false 参数时的结果
目前生产环境发生数据丢失过的场景有

1.2 发生的场景有

  1. 多个不同 bucketing_version属性的表单进行join,且reduce个数大于2时,存在数据丢失
  2. 两个不同 bucketing_version 属性的表进行join时,且 有子查询里有group by时存在数据丢失
  3. presto 创建的表单,create table xxx like语句创建的表单都因缺失bucketing_version属性,在和其他hive 表关联计算时都有这个数据丢失的风险

1.3 修复方式

如果有出现数据异常的,可以根据实际情况自愿选择3种修复方式

  1. hive-site.xml 中设置表的默认建表属性值 hive.table.parameters.default = 'bucketing_version=2';
  2. 设置优化参数: set hive.optimize.joinreducededuplication=false ;
  3. 修改表结构属性: alter table [tablename] set tblproperties('bucketing_version'='2');
  4. 先用create table as select xxxx 创建临时表的方式将不同bucket_version的取数结果分别用临时表来封装,再来join

1.4 相关社区文档

在一些特殊场景join 时存在数据丢失的情况,相关文档
https://issues.apache.org/jira/browse/HIVE-24033
https://issues.apache.org/jira/browse/HIVE-22098

2.group by和distinct 字段个数不能超过64个, 否则报错异常

2.1 异常确认

关键字:
SemanticException [Error 10411]: Grouping sets size cannot be greater than 64

2.2 避坑说明

这类场景毕竟少见,可以将string类型的字段通过 concat_ws 拼接起来group by,然后拆分

2.3 社区相关链接

到 4.0 版本有修复,可以考虑合入该patch
https://issues.apache.org/jira/browse/HIVE-21018

3.container 重用导致的bug,多个dag 共用一个container导致, 导致container 的输出文件异常

3.1 异常确认

3.2 避坑参数说明

该类异常仅发生在hql文件中有多个sql语句(会生成tez任务的ddl语句),或者有小文件合并参数中,因不是必现的,小概率会发生,且设置到为true 时会,每个语句会多消耗一个container,没有在集群层面设置, 有出现过错误的或者任务比较重要的可以设置该参数避免出现该类错误
set tez.am.container.reuse.enabled=false;

3.3 社区相关链接

到 4.0 版本有修复,可以考虑合入该patch
https://issues.apache.org/jira/browse/HIVE-22373

4.container 重用导致的bug

4.1 异常确认

出现如下关键字
Was expecting dummy store operator but found:

Tez的bug导致,container复用打开后,同一container在成功运行完mergejoin/groupby reduce任务后,执行同一个vertex的其他reduce任务时可能触发报错。

4.2 避坑参数说明

set tez.am.container.reuse.enabled=false;

4.3 相关社区链接

https://issues.apache.org/jira/browse/HIVE-23010

5.merge task跑到了default队列

5.1 异常确认

在任务的运行日志中如果有 File Merge的profile,找到对应appid,在tez-ui 中可以看到运行队列

5.2 避坑参数说明

目前没有合适的参数避免该问题,且该问题影响面较小, 暂时不用做特殊处理,后续考虑合入社区patch

5.3 相关社区链接

https://issues.apache.org/jira/browse/HIVE-22527

6.sort-merge semijoin导致的异常

6.1 异常确认,报错中含有如下关键字

Attempting to overwrite nextKeyWritables[1]

6.2 避坑参数说明

在启用sortmerge join 时会偶尔发生该类问题,关闭sortmerge join即可
set hive.auto.convert.sortmerge.join=false;

6.3 相关社区链接

https://issues.apache.org/jira/browse/HIVE-24073

7.查询结果为空的情况下,目标表/分区数据并不会被清理

7.1 异常确认

如题,查询结果为空的情况下,insert overwrite 不会清空目标表里的数据和目录, 理论上目标目录下的数据应该要被清空的

7.2 避坑说明

目前还没有好的避坑方法, 后面可以考虑合并此类patch,社区已有相关jira单

7.3 相关社区链接

https://issues.apache.org/jira/browse/HIVE-21714

8.mapjoin 导致的数据丢失

8.1 异常确认

任务没有报错,查询语句中有lateral view explode 关键字,结果数据不写入结果表的情况下正常查询,在写入到结果表后数据丢失
可以尝试使用 set hive.auto.convert.join=false,再执行一次,如果查询结果返回正常 说明是mapjoin 导致的bug

8.2 参数避坑说明

1.设置参数 hive.auto.convert.join=false, 避免出现此类问题
2.将 有lateral view explode 部分的子查询改为先写入到临时表,再最后mapjoin时

8.3 社区相关链接

https://issues.apache.org/jira/browse/HIVE-11576

9.dynamic semijoin导致的异常

9.1 异常确认

执行任务时,编译解析sql报错:java.lang.NullPointerException at org.apache.hadoop.hive.ql.parse.TezCompiler.removeSemijoinOptimizationByBenefit
且sql 中存在join情况

9.2 参数避坑说明

set hive.tez.dynamic.semijoin.reduction=false;
这个配置可以禁用semi join优化,从而规避该问题,但需注意不建议集群全局加上这类配置,会导致本该优化的semi join失效。

9.3 社区相关

https://issues.apache.org/jira/browse/HIVE-24671
https://issues.apache.org/jira/browse/HIVE-22572

10.cube 数据重复异常

10.1 异常确认

执行的sql语句中有 cube关键字,cube字段中有常量值
查询验证,相同的组合有两天相同的记录

10.2 避坑说明

初步判断是和cube 中有常量字段有关,将常量字段移除cube,或者先写入到临时表中可以避免此类问题

10.3 社区相关说明

https://issues.apache.org/jira/browse/HIVE-17499

11.hiveserver2 因频繁加载临时函数导致的内存泄漏问题

11.1 异常确认

11.2 避坑说明

目前还没有参数设置可以避免此类问题,只能通过patch修复这类问题

11.3 社区相关说明

https://issues.apache.org/jira/browse/HIVE-11408
https://issues.apache.org/jira/browse/HIVE-24636?focusedWorklogId=558506&page=com.atlassian.jira.plugin.system.issuetabpanels%3Aworklog-tabpanel#worklog-558506

12.hive 在join时或者语句中存在exists时,且有非等值得过滤时,cbo会将谓词下推到join时导致结果异常

12.1 异常确认

检查执行语句结果出现数据异常

12.2 避坑说明

关闭cbo优化器即可
set hive.cbo.enable=false;

12.3 社区相关说明

https://issues.apache.org/jira/browse/HIVE-18490

13.在left join 的语句中,如果子查询中有union 和group by时,会导致查询结果异常

12.1 异常确认
可以对比 presto/spark 和hive 的结果

12.2 避坑说明

子查询中尽量避免同时使用 union和 group by 语句,目前社区还没有解决方案

12.3 社区相关说明

https://issues.apache.org/jira/browse/HIVE-24907

标签:jira,https,hive,3.0,apache,org,bug,issues
From: https://www.cnblogs.com/tommyjiang/p/18052590

相关文章

  • Advanced .Net Debugging 3:基本调试任务(上)
    一、简介这是我的《Advanced.NetDebugging》这个系列的第三篇文章。这个系列的每篇文章写的周期都要很长,因为每篇文章都是原书的一章内容(太长的就会分开写)。再者说,原书写的有点早,有些内容还是需要修正的,调试每个案例,这都是需要时间的。今天这篇文章的标题虽然叫做“基本......
  • File name too long 的bug,File name too long,文件名过程,文件路径问题
    首先,先说一下遇到问题的背景;我们公司需要上报一些文件,不限制格式;而且对于大于50M的文件pdf,压缩包等必须拆分和重命名;从开发到测试和目前的运行一直没有问题;最近在正常下载和上报时发现了个别文件没有下载下来;通过排查日志发现报下面的错; 原来是文件名太长了,通过查询资料了解到......
  • 折磨了我半天的bug,初学者的噩梦说是
    我现在已经无语了,找了将近两个小时的bug,在网上找了一遍又一遍,试了好多方法都没有效果,最后在代码检查中发现,我在使用idea快捷引入的时候引入了一个同名的User,导致我在mapper层里面写的usermapper总是找不到我的实体类user的无参构造函数,捏妈妈的,下次出了错误先检查代码!!焯,我现在和个......
  • ubuntu22.04升级到23.04
    ubuntu22.04升级到23.04ubuntu一、更新22.04先对现有的22.04的系统进行更新,得到最新的22.04版。1.设置软件更新打开“软件和更新”,转到“更新”选项卡。选择“有新版本时通知我”并将其更改为“适用任何新版本”.这将告诉包管理器查找Ubuntu23.04发布详细信息。......
  • 开课啦!走进大数据讲堂,一文从0到1学习数据湖Paimon(实践篇一)之集成hive实战演练?助力数据
     第3章集成Hive引擎前面与Flink集成时,通过使用paimonHiveCatalog,可以从Flink创建、删除、查询和插入到paimon表中。这些操作直接影响相应的Hive元存储。以这种方式创建的表也可以直接从Hive访问。更进一步的与Hive集成,可以使用HiveSQL创建、查询Paimon表。......
  • C++类开发的第六篇(虚拟继承实现原理和cl命令的使用的bug修复)
    Class_memory接上一篇末尾虚拟继承的简单介绍之后,这篇来详细讲一下这个内存大小是怎么分配的。使用clcl是MicrosoftVisualStudio中的C/C++编译器命令。通过在命令行中键入cl命令,可以调用VisualStudio的编译器进行编译操作。cl命令提供了各种选项和参数,用于指定源......
  • WordCount案例教学会遇到的bug
    《尚硅谷大数据Hadoop教程,hadoop3.x搭建到集群调优,百万播放》P74-78会遇到的bugWindows机上未配置Hadoop_HOME环境变量。解决方法:需要通过winutils来虚拟hadoop在windows的环境。Windows的IDEA中的所创建wc项目的jdk版本,与Linux虚拟机上的版本不一致,导致在虚拟机集群上,hado......
  • CloudCanal x Hive 构建高效的实时数仓
    简述CloudCanal最近对于全周期数据流动进行了初步探索,打通了Hive目标端的实时同步,为实时数仓的构建提供了支持,这篇文章简要做下分享。基于临时表的增量合并方式基于HDFS文件写入方式临时表统一Schema任务级的临时表基于临时表的增量合并方式Hive目标端写入方式和......
  • Debug工具
              ......
  • Vue 3.0 Class与Style绑定
    操作元素的class列表和内联样式是数据绑定的一个常见需求。因为它们都是attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js做了专门的增强。表达式结果的类型......