这篇文章主要为大家展示了“Hive中的常见问题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive中的常见问题有哪些”这篇文章吧。
-
hive单表分区数过多执行查询报错(实际上分区数越多查询越慢,应控制分区数在5000以下):
java.lang.OutOfMemoryError: Java heap space
参考:OOM occurs when query spans to a large number of partitions
原因:
-
hive会在执行查询时先将元数据中的分区信息加载到内存中,包括PARTITIONS、PARTITION_KEY_VALS、PARTITION_PARAMS等表的数据,如果分区数过多,这些表中的数据量也越大,hiveserver2默认的堆内存只有256M,因此heap不足。
-
如果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
修复:以下三种方法任选其一
-
hiveserver2启动时加入参数:hiveserver2 –hiveconf fs.permissions.umask-mode=022
-
修改1.0.3源码:org/apache/hadoop/hive/ql/exec/Utilities.java,将第3417行改为:conf.set("fs.permissions.umask-mode", "");
重新编译后将该类替换到hive-exec-0.13.0.jar包中。
-
修改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>
-
hive0.13.1升级到0.14后执行任何SQL均报错:
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即可。
-
Hive 存储过程(暂不支持)
参考: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中的常见问题有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/230288.html