您的位置:首页 > 其它

hive0.11升级问题小结

2014-04-10 22:19 363 查看
为了兼容spark,并使用hive的kerberos和hiveserver2功能和一些窗口函数,线上的hive由0.10升级至0.11,遇到几个问题,简单记录下:1.分区schemal的问题具体见:http://caiguangguang.blog.51cto.com/1652935/1355216
2.部分函数运行unix_timestamp在参数为null时会报错:
hive> select unix_timestamp(null) from default.dual limit 5;
FAILED: SemanticException [Error 10014]: Line 1:7 Wrong arguments
'TOK_NULL': The function UNIX_TIMESTAMP takes only string or timestamp types
变通的方法时通过case when做处理:
(case when ddtime is null then null else unix_timestamp(ddtime) end)
3. map join 关于map join的理解:http://caiguangguang.blog.51cto.com/1652935/1376183hive0.11默认的convert map join是开启的,在大部分的情况下会减少job的运行时间,不过有一些bug1)null pointer的bug报错信息:
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException:
java.lang.NullPointerException
2)字段hash值一样时出现的乱序问题报错:
java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException
: Hive Runtime Error while processing row [Error getting row data with
exception java.lang.ArrayIndexOutOfBoundsException: xxxx
bugid:https://issues.apache.org/jira/browse/HIVE-5256
https://issues.apache.org/jira/browse/HIVE-5056
一种解决方法时 set hive.auto.convert.join=false;这种方法在数据存在倾斜时(reduce阶段长时间处在99%)会有性能的问题。不过官方有对应的patch,打上就可以fix.
4.double精度问题hive double做运算,计算结果不精确,这其实是旧版本的hive的一个bug
bugid: https://issues.apache.org/jira/browse/HIVE-2693 在hive0.11引入了decimal的类型,如果是double的类型可以通过cast(xxx as decimal)来解决
select cast(2.3333 as decimal)+cast(12.55 as decimal) from dual;


以后遇到问题再来补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hive0.11 升级问题