【Hive】Hive错误记录

声明!本篇博客记录博主遇到的所有Hive相关的错误!

希望这篇博客能够帮助到你,如果你也有遇到Hive相关的错误,但苦于无法解决,可以私信博主,博主很乐意解决bug,但是不一定能解决!!!

在这里插入图片描述在这里插入图片描述

(图片来源于网络,侵删)


错误【1】

WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/mapred/MRVersion
        at org.apache.hadoop.hive.shims.Hadoop23Shims.isMR2(Hadoop23Shims.java:942)
        at org.apache.hadoop.hive.shims.Hadoop23Shims.getHadoopConfNames(Hadoop23Shims.java:1013)
        at org.apache.hadoop.hive.conf.HiveConf$ConfVars.<clinit>(HiveConf.java:370)
        at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:64)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:650)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:634)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.mapred.MRVersion
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 12 more

在这里插入图片描述
我们可以看到异常说是找不到一个类,但是我想了想,我以前搭建hive时候没有出现这个错误呀!

我思来想去,然后查阅了一些资料,终于让我知道了原因!!!

这里要感谢一个老哥的博客,他提醒了我,因为我的hadoop使用的·是Apache的,但是我的hive使用的是CDH的,所以不兼容

此时有两种解决方法:

方式一:下载与HIve的CDH版本对应的hadoop-core的jar包
例如我的Hive是 cdh5.14.0,hadoop是2.6.5,就下载hadoop-core-2.6.0-mr1-cdh5.14.0.jar,下载如下,自行修改👇

https://repository.cloudera.com/artifactory/cloudera-repos/org/apache/hadoop/hadoop-core/2.6.0-mr1-cdh5.14.0/hadoop-core-2.6.0-mr1-cdh5.14.0.jar

然后将下载完成的jar包放到hive根目录的lib下
此时再去启动即可!!!

注意:如果启动的时候报错如下👇

在这里插入图片描述

应该就是hadoop的jlinejar包版本太低了,拷贝hive的lib目录下的jline$HADOOP_HOME/share/hadoop/yarn/lib目录下即可!!!

方式二:ApacheHadoop换成cdhHadoop 即可完美解决! QAQ


错误【2】

在使用 beeline + !connect jdbc:hive2://node01:10000 连接上hive之后,我在创建hive数据库的时候出现了如下错误👇
在这里插入图片描述
原因就是因为我一直用的都是 zsy这个用户在操作,所以HDFS上的权限是zsy
在这里插入图片描述
而我粗心大意,使用!connect jdbc:hive2://node01:10000连接的时候,却用的是root用户登录,所以就导致权限不足!

这里肯定有小伙伴很疑惑,root不是超级管理员用户嘛?怎么还没权限了?
其实,root用户对于Linux系统确实是超级管理员用户,但对于HDFS文件系统来说,所有用户都一样,它只认名字不认人,HDFS文件上的文件你要是有权限,就可以操作,没有权限,就不行!这就是HDFS的机制,你告诉HDFS你是谁,你就是谁!

所以这个问题只需要重新连接Hive,更换用户即可!


错误【3】

启动hive时,报了如下错误:
/spark//lib/spark-assembly-*.jar: No such file or directory
查阅了资料后发现问题原因如下:
新版本的spark,hive没有及时支持更新
问题解决方式如下:
// 修改hive的启动脚本
vim bin/hive +116

// 定位到位置,上面一行是原有的,下一行是修改的
#sparkAssemblyPath=`ls ${SPARK_HOME}/lib/spark-assembly-*.jar`
sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`

错误【4】

使用beeline连接HiveServer2时出现了如下错误👇
Error: Could not open client transport with JDBC Uri: jdbc:hive2://node01:10000: Failed to open new session: 
java.lang.RuntimeException:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.
security.authorize.AuthorizationException): User: zsy is not allowed to 
impersonate root (state=08S01,code=0)
问题解决方式如下:
<property>
     <name>hadoop.proxyuser.zsy.groups</name>
	 <value>*</value>
</property>
<property>
	<name>hadoop.proxyuser.zsy.hosts</name>
	<value>*</value>
</property>

这里是zsy用户,其他用户自行调整,即执行beeline的用户名,修改完成后重启hdfs和yarn


错误【5】

使用beeline连接HiveServer2时出现了如下错误👇
ERROR [main]: DataNucleus.Datastore (Log4JLogger.java:error(115)) - An exception wa
s thrown while adding/validating class(es) : Specified key was too long; max key length is 767 bytes
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 76
7 bytes
问题解决方式如下:

alter database Hive元数据库名称 character set latin1;


错误【6】

在使用两表关联查询时,其中一个表是分区表,查询报错如下,相信你们很熟悉!
ERROR Error while compiling statement: FAILED: SemanticException [Error 10041]: No partition predicate found for Alias "factvirtualcouponcard_consume" Table "factvirtualcouponcard_consume"

查询的SQL格式模板如下:select 字段 from 非分区表 left join 分区表 on 关联条件 where 限制分区表字段

结果上述SQL给我报错了,我当时就懵逼了,我不是限定分区了吗?咋会报这个错呢?在我询问大佬之后,我把 where 后面的限制分区条件放到了 on 后面,然后就行了,当时我…

未完待续。。。

更新不易,点个赞评论一下吧!

在这里插入图片描述

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值