Hive-0.9 升级 Hive-0.12后结合HBase统计遇到的BUG处理

在将Hive从0.9升级到0.12后,遇到了包括空指针异常、Map重复读取HBase和并发任务数据混读的问题。针对这些问题,进行了详细的分析和解决。对于空指针异常,通过Apache Hive的官方wiki找到解决方案。Map重复读取Hbase的情况,发现每个map的startRow和endRow相同,导致数据重复扫描。通过修改HiveHBaseTableInputFormat.java解决了此问题。最后,为了解决并发任务数据混读,发现HiveHBaseTableInputFormat是一个单例,不同任务的conf不同,因此创建新的实现类避免该问题。
摘要由CSDN通过智能技术生成

1. 空指针异常


问题分析:最初以为是配置文件中缺损了某个值,然后用vimdiff比对了hive0.9和hive0.12之间的配置差异,在排除了配置文件出错的可能性后,下载了源码来看

问题解决:主要还是按照这个wiki上的来解决https://issues.apache.org/jira/browse/HIVE-5515

2. Map重复读Hbase

这个问题其实由来已久,其实我看到最早在hive0.9就已经有了,太坑爹了!



问题分析:修改源码打成新jar包后,通过tasklog可以发现,每个map的startRow和endRow竟然是一样的,Hbase的数据被重复scan,直接会造成reduce的最终结果是真实值的map倍,故猜测BUG应该是 map切片Hbase的时候出错了 

问题解决:在HiveHBaseTableInputFormat.java中getRecordReader方法里注释掉

//      tableSplit = convertFilter(jobConf, scan, tableSplit, iKey,
//        getStorageFormatOfKey(columnsMapping.get(iKey).mappingSpec,
//        jobConf.get(HBaseSerDe.HBASE_TABLE_DEFAULT_STORAGE_TYPE, "string")));
然后bulid.xml那边添加


                
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值