微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hive中的常见问题有哪些

这篇文章主要为大家展示了“Hive中的常见问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive中的常见问题有哪些”这篇文章吧。

  • hive单表分区数过多执行查询报错(实际上分区数越多查询越慢,应控制分区数在5000以下):

java.lang.OutOfMemoryError: Java heap space

参考:OOM occurs when query spans to a large number of partitions

原因:

  1. hive会在执行查询时先将元数据中的分区信息加载到内存中,包括PARTITIONS、PARTITION_KEY_VALS、PARTITION_ParaMS等表的数据,如果分区数过多,这些表中的数据量也越大,hiveserver2认的堆内存只有256M,因此heap不足。

  2. 如果hive-site.xml配置mapred.reduce.tasks数目较多(认为-1,即slave个数),会导致每个查询job产生更多的map过程,同时分区数较多,加大了单个mapred加载的分区数据量。而在mapred-site.xml中的配置占用内存过低也会导致查询执行过程中报错,可适当调整:mapred.child.java.opts=-Xmx512m -XX:+UseConcmarkSweepGC

解决:按照其他规则分区,降低目标表分区数,修改hive-env.sh,加入配置:export HADOOP_HEAPSIZE=2048


 

  • hive0.12升级到0.13后启动hiveserver2,beeline登入执行任何查询均报错

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.unset(Ljava/lang/String;)V

原因:hadoop1.0.3中没有Configuration.unset(String)这个方法,对比API可知:Configuration2.2.0、Configuration1.0.4。

参考:NoSuchMethodError exception when using HIVE 0.13 with Hadoop 1.0.4

修复:以下三种方法任选其一

  1. hiveserver2启动时加入参数:hiveserver2 --hiveconf fs.permissions.umask-mode=022

  2. 修改1.0.3源码:org/apache/hadoop/hive/ql/exec/Utilities.java,将第3417行改为:conf.set("fs.permissions.umask-mode", "");

    重新编译后将该类替换到hive-exec-0.13.0.jar包中。

  3. 修改hive-site.xml,加入以下配置:

    <property>
        <name>fs.permissions.umask-mode</name>
        <value>022</value>
        <description> Setting a value for fs.permissions.umask-mode to work around issue in HIVE-6962.
     It has no impact in hadoop 1.x line on hdfs operations.
        </description>
    </property>

NoSuchMethodError: org.apache.hadoop.mapred.JobConf.unset(Ljava/lang/String;)V

原因:同上,不兼容低版本的hadoop,JobConf继承了Configuration,因此没有unset方法

参考:https://cwiki.apache.org/confluence/display/Hive/FilterPushdownDev

解释:Filter Pushdown,过滤器链用于进一步提高数据命中率。

修复:修改org/apache/hadoop/hive/ql/io/HiveInputFormat.java第429行pushFilters方法

将前两行使用unset的代码注释后编译重新打包即可:

javac -cp .:/hive/lib/*:/hadoop/lib/*:/hadoop/* HiveInputFormat.java
mkdir -p org/apache/hadoop/hive/ql/io/
mv HiveInputFormat*.class org/apache/hadoop/hive/ql/io/
jar uf /hive/lib/hive-exec-1.1.0.jar org/apache/hadoop/hive/ql/io/HiveInputFormat*.class

修改版下载地址:hive-exec-0.14.0.jar

  • 执行一个动态分区语句时HQL报错

org.apache.hadoop.hive.ql.Metadata.HiveException: Hive Runtime Error: Unable to deserialize reduce input key from x1x128x0x0x19x1x255 with properties {columns=reducesinkkey0,reducesinkkey1,reducesinkkey2,reducesinkkey3, serialization.lib=org.apache.hadoop.hive.serde2.binarysortable.BinarySortableSerDe, serialization.sort.order=++++++, columns.types=int,int,int,int,string,bigint}

原因:hive0.13.1 bug,如果设置了 hive.optimize.sort.dynamic.partition参数(认为true,见 hive-default.xml.template),则动态分区时会对所有字段排序,也会影响到group by中的字段。

参考:Dynamic sort optimization propagates additional columns even in the absence of order by

修复:hive0.13.1升级到0.14即可。

参考:https://issues.apache.org/jira/browse/HIVE-3087

解释:这个估计以后也不会有,因为完全可以用shell替代。

  • Hive1.2与Hadoop2.6执行hive客户端或beeline报错:

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected

原因:YARN中的jline版本过低。

解决:将hive-lib中的jline替换到yarn-lib目录中:

cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib/
rm -f $HADOOP_HOME/share/hadoop/yarn/lib/jline-0.9.94.jar

以上是“Hive中的常见问题有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程之家行业资讯频道!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐