我是靠谱客的博主 飞快超短裙,最近开发中收集的这篇文章主要介绍解决Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

老大让启动一下hive,结果报错了,想办法解决,经过不懈努力,终于搞定了

hive> show databases;
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
hive>


出现这个问题的原因:
hive-site.xml文件中配置了三个参数所引起的
hive.txn.manager、hive.support.concurrency、hive.metastore.uris

<property>
     <name>hive.txn.manager</name>
     <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>

<property>
    <name>hive.support.concurrency</name>
    <value>true</value>
</property>

经过不断测试(依次分别注释掉每个参数)注释掉下面这个参数,重启hive,问题就解决了

<!--
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift:/hadoop139:9083</value>
    </property>
-->

然后 hive启动后 show databases;就没报错了,

并且创建表正常无报错

create table kafkatable(id int,name string) clustered by(id) into 2 buckets stored as orc tblproperties('transactional'='true');```

之后,老大又让配了3个参数,参照 华为云官方文档

1

<property>
    <name>hive.exec.dynamic.partition.mode</name>
    <value>nonstrict</value>
</property>

<property>
    <name>hive.compactor.initiator.on</name>
    <value>true</value>
</property>

<property>
    <name>hive.compactor.worker.threads</name>
    <value>1</value>
</property>

配完以后重启hive,依然可以正常使用


这还没完,老大说搞技术一定要严谨,让我去搜,把这些参数都查出来搞明白啥意思

参数含义
hive.support.concurrency0.7.0版本新增,一致性。默认关闭false,支持增、删、改事务才开启true;关闭并发可解决lock报错 FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time
hive.exec.dynamic.partition.mode0.6.0版本新增,动态分区 ,默认为strict ,设置为strict,向分区表装在数据时,为了防止用户意外覆盖所有分区,必须指定至少一个静态分区。若设置成nonstrict,则所有分区都允许动态生成,该值需要设置为true
hive.txn.managerhive锁管理器
hive.compactor.initiator.on是否在metastore实例上运行initiator和cleaner进程
hive.compactor.worker.threads设置有多少工作线程在Thrift metastore实例上运行

还有一个参数很特别,是 hive.metastore.uris
前面注释掉这个参数,解决了hive报错

FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

在hive服务端才能开启hive metastore服务
hive --service metastore -p 9083 &
这种方式去启动

Hive服务和metastore在不同的进程内
可能是不同的机器
hive.metastore.uris设置为metastore服务器URL
如果有多个metastore服务器,将URL之间用逗号分隔,metastore服务器URL的格式为thrift://127.0.0.1:9083


再介绍3个参数:

  • hive.exec.max.dynamic.partitions.pernode(缺省值100):每一个mapreduce job允许创建的分区的最大数量,如果超过了这个数量就会报错
  • hive.exec.max.dynamic.partitions(缺省值1000):一个dml语句允许创建的所有分区的最大数量
  • hive.exec.max.created.files(缺省值100000):所有的mapreduce job允许创建的文件的最大数量

最后

以上就是飞快超短裙为你收集整理的解决Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient的全部内容,希望文章能够帮你解决解决Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部