这节我们来讲解hive元数据管理metastore的概念、配置方式、以及hiveserver2服务。
一、metastore基本概念
Beeline是从 Hive 0.11版本引入的。
hive既可以做客户端也可以做服务器端;
hive做客户端有两种工具:hive客户端和beeline客户端;
hive作为服务器端,提供两种服务一个是Metastore,另外一个是hiveserver2;其中metastore需要hive客户端链接,hiveserver2需要beeline客户端链接。
hive服务和metastore服务运行在同一个进程中,derby服务也运行在该进程中。
内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。
默认是这个模式,并且一次只能一个客户端连接。
适用于用来实验,不适用于生产环境。
hive服务和metastore服务运行在同一个进程中,mysql是单独的进程,可以同一台机器,也可以在远程机器上。 是一个多用户的模式,运行多个用户client连接到一个数据库中。 一般作为公司内部多个客户端同时使用Hive。每一个用户必须要有对MySQL的访问权利,每一个客户端使用者需要知道MySQL的用户名和密码才行。
4、远程模式(Remote)
这里我们大致看一下CDH官网图
Hive服务和metastore服务在不同的进程内,可能是不同的机器;
该模式需要以下几个配置说明:
将hive.metastore.local设置为false,
将hive.metastore.uris设置为metastore服务器URL;如果有多个metastore服务器,URL之间用逗号分隔;
URL的格式为thrift://127.0.0.1:9083。
远程元存储需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。
各种客户端通过beeline来连接,连接之前无需知道数据库的密码。
注意:连接远程的mysql并不能称之为“远程模式”,是否远程判断标准指的是metastore和hive服务是否在同一进程内。在同一个进程是本地local模式,不在同一个进程是Remote模式。
二、Metastore配置方式
1、内嵌模式(默认模式)配置
默认模式就是内嵌模式,什么配置文件都不需要修改,derby数据库也不需要替换,生产上不用。
2、本地模式local配置
hive直接连接mysql
配置hive.metastore.local为true;
并且安装mysql,前面章节已经安装和配置;
配置连接mysql的driver、URL、用户和密码。
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>
</property>
也可以这样写jdbc:mysql://ip:3306/hive?characterEncoding=UTF-8
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>XXXX</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>XXXX</value>
</property>
</configuration>
复制
需要配置hive.metastore.local为false; 配置连接mysql的driver、URL、用户和密码。
<configuration>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_remote?createDatabaseIfNotExist=true</value>
</property>
也可以这样写jdbc:mysql://ip:3306/hive?characterEncoding=UTF-8
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>XXXX</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>XXXX</value>
</property>
</configuration>
复制
客户端配置:比如node02和node03
配置hive.metastore.uris地址。
格式为:thrift://IP地址:9083,端口是9083;
<property>
<name>hive.metastore.uris</name>
<value>thrift://node01:9083</value>
</property>
复制
服务器端node01启动metastore服务
hive --service metastore -p <port_num>
复制
如果不加端口默认启动:hive --service metastore,默认监听端口是:9083 。
注意客户端中的端口配置需要和启动监听的端口一致。服务端启动正常后,客户端就可以执行hive操作了。
客户端端node02、03启动hive客户端
bin/hive
复制
三、hiverServer2服务
1、hiveserver2服务
hiveserver2 会启动一个hive服务端默认端口为:10000,通过beeline,jdbc,odbc的方式链接到hive。
hiveserver2启动的时候会先检查有没有配置hive.metastore.uris,如果有配置hive.metastore.uris会连接到远程的metastore服务;如果没有配置,会先启动一个metastore服务,然后在启动hiveserver2。
3、hiveserver2服务端启动命令
bin/hive --service hiveserver2bin/hive --service hiveserver2 -p 10002#其中-p参数用来指定监听端口的bin/hiveserver2
复制
注意:
hiveserver2脚本其实也是通过bin/hive --service hiveserver2方式启动hiveserver2服务。 hiveserver2服务属于前台启动会占用窗口。 使用&后台启动 bin/hive –service hiveserver2 &
#也是在后台启动,nohup表示启动后不挂起
nohup bin/hive --service hiveserver2 2>&1 &
复制
bin/beeline -u jdbc:hive2://IP地址:10000 -n username(即用户名)
!connect jdbc:hive2://IP地址:10000/default root password
复制
数据访问上 Metastore Server 负责对元数据的访问,即表结构,库信息等。 比如:SHOW DATABASES; HiveServer2 负责对Hive 表中具体数据的访问。 访问服务上 Metastore Server Hive元数据的访问入口,使用Thrift协议,提供对hive元数据的跨语言访问。 HiveServer2 Hive库中数据的访问入口,同样适用thrift 协议,提供对Hive中数据的跨语言访问,比如常见的python, java 等对hive数据的远程访问,beeline客户端也是通过HiveServer2方式访问数据的。