美文网首页
Hive 无法访问元数据:Unable to instantia

Hive 无法访问元数据:Unable to instantia

作者: 珺王不早朝 | 来源:发表于2020-12-17 13:27 被阅读0次

    问题描述:

    • 环境:Hadoop 2.9.2 + Hive 2.3.7 ,集群由三台搭载 Centos7 系统的虚拟机模拟
    • 问题:HDFS 和 Yarn 成功启动之后,在任意一个节点上启动 Hive 并使用 show databases; 命令查看数据库列表时,均会报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    产生原因:

    Hive 的核心配置文件 hive-site.xml 中可见,元数据存放于节点3的MySQL中:

    <!-- hive元数据的存储位置 -->
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://centos7-3:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>
            <description>JDBC connect string for a JDBC metastore</description>
        </property>
    

    如果仅有以上配置,则 Hive 元数据连接方式为 Local 模式,通过 JDBC 直接访问节点3上的 MySQL,从而获取元数据。
    hive-site.xml 中还同时指定了 metastore thrift 连接的 地址&端口:

    <!-- 指定 metastore 的地址和端口 -->
        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://centos7-3:9083</value>
        </property>
        <property>
            <name>hive.metastore.client.socket.timeout</name>
            <value>3600</value>
        </property>
    

    此时,Hive 的元数据连接方式变为 Remote 模式,即使用 HiveMetaStoreClient 远程访问节点3的9083端口,获取元数据信息。

    【参考】Hive 元数据的三种连接方式
    https://www.cnblogs.com/snowbook/p/5886438.html

    但此刻节点3的9083端口上并没有启动 matastore 服务,因此集群上的任意节点都无法远程访问,自然无法读取元数据。

    解决方案:

    在节点3上使用如下命令启动 metastore 服务:

    # 后台启动 metastore 服务器端,默认使用 9083 端口
    nohup hive --service metastore &
    
    # 或者使用指定的端口号:
    nohup hive --service metastore -p 9083 &
    

    需要注意:服务器端口号需要与客户端配置文件中配置的监听端口号一致

    再次启动 Hive 查看数据库列表,成功!

    相关文章

      网友评论

          本文标题:Hive 无法访问元数据:Unable to instantia

          本文链接:https://www.haomeiwen.com/subject/tjhzgktx.html