作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
1>.错误复现
2>.错误原因
Metastore默认存储在自带的derby数据库中,此时只需要去查看hive的安装目录是否有"derby.log(文件)"和"metastore_db(目录)",若没有则其实导致本报错的直接原因。
生产环境中,推荐使用MySQL存储Metastore;
3>.解决方案
参考我的部署笔记即可:
https://www.cnblogs.com/yinzhengjie2020/p/13912307.html
二.FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql))
1>.错误复现
2>.错误原因
报错很明显了,说咱们未初始化元数据库,这时需要我们手动进行初始化操作,它提示咱们使用schematool工具来进行初始化哟~
3>.解决方案
既然知道故障原因,解决起来就好办了,执行以下命令即可,而后重启Hive客户端。
schematool -initSchema -dbType mysql
三.Error: Could not open client transport with JDBC Uri: jdbc:hive2://hadoop105.yinzhengjie.com:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate jason (state=08S01,code=0)
1>.错误复现
2>.错误原因
首先根据报错信息估计大家也能猜出来问题定位在哪里了,我们只需要捕捉关键字"AuthorizationException",说明就是认证出问题了。而Hive是需要访问Hadoop集群的,借助HDFS存储数据,借助MR集群,借助YARN进行资源调度。
综上所述,我们需要为hive服务配置一个代理用户(该代理用户必须有权限访问Hadoop集群哟~),其代表其他用户的超级用户。我们先来看看官方是如何处理的,而后在模仿解决即可。
官方配置代理用户案例:
https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html
3>.解决方案
如果连接失败,请检查Hadoop的核心配置文件是否缺少下面2行参数,若没有请自行添加即可,添加后要重启Hadoop集群,否则可能并不生效哟~
[root@hadoop101.yinzhengjie.com ~]# vim ${HADOOP_HOME}/etc/hadoop/core-site.xml
......
<!-- 当配置Hive时需要使用下面2个参数哟 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
<description>指定超级用户的代理主机,如果是"*"号,表示所有主机均可,此处的root对应的是root用户,你可以根据实际情况来进行修改哟~</description>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
<description>指定超级用户组,此处的root对应的是root组,你可以根据实际情况来进行修改哟~</description>
</property>
......
[root@hadoop101.yinzhengjie.com ~]#
温馨提示:
上述配置仅需在beeline客户端节点修改相应的配置信息即可,无需将配置同步到集群哟~
博主推荐阅读:
https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html