Hive的metastore与hiveserver2

1. metastore

metastore有两个意思,一是指存放元数据的地方,一般是用MySQL数据库,二是指metastore server

1.1 元数据(metastore)

如果默认不配置元数据,那则使用本地Derby数据库,这是个仅限单用户访问的数据库,仅适用于入门,不推荐在开发或生产环境使用,因此建议使用关系型数据库存放元数据

以下修改为MySQL存放元数据:

<!-- MySQL URL -->
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://127.0.0.1:3306/hive_metastore</value>
</property>
<!-- MySQL Driver-->
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
</property>
<!-- MySQL username-->
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>
<!-- MySQL password -->
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hkl0419!mysql</value>
</property>

1.2 metastore server

指定MySQL作为元数据的数据库,便于多用户访问,但每个hive客户端均需要配置MySQL的连接信息,一是不安全,二是一旦MySQL有改动,则所有hive配置均需要改动,因此就有了metastore server,配置metastore server并启动一个该服务后,其他hive客户端仅需要配置连接到此服务即可

配置:

<!-- metastore server,默认9083 -->
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://ubuntu:9083</value>
</property>

启动服务:
nohup hive --service metastore 2>&1 &

2. hiveserver2

hiveserver2是一个服务端接口,使得其它客户端(Java、beeline)可以连接到此服务执行HQL,得到返回结果

配置:

<!-- hiveserver2 连接的 host -->
<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>ubuntu</value>
</property>
<!-- hiveserver2 连接的端口号,默认10000 -->
<property>
    <name>hive.server2.thrift.port</name>
    <value>10000</value>
</property>

启动服务:
nohup hive --service hiveserver2 2>&1 &

3. metastore与hiveserver2的启动关系

3.1 local metastore server

如果不配置metastore server,而直接启动hiveserver2,那么hiveserver2将会直连mysql,如果有多个hiveserver2,则都需要配置mysql连接信息,显然不安全且繁琐

3.2 remote metastore server

如果配置metastore server,则必须先启动metastore server,且仅启动一次,之后其他所有的hiveserver2都连到指定的metastore server即可

4. 常见的连接流程

bin/hive --> mysql --> hdfs
bin/hive --> metastore server --> mysql --> hdfs
beeline --> hiveserver2 --> metastore server --> mysql --> hdfs
其它客户端 --> hiveserver2 --> metastore server --> mysql --> hdfs

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章