是什么?
Metadata
即元数据。元数据包含用Hive创建的database、table、表的字段等元信息。元数据存储在关系型数据库中。如hive内置的Derby、第三方如MySQL等。
Metastore
即元数据服务,作用是:客户端连接metastore
服务,metastore
再去连接MySQL
数据库来存取元数据。有了metastore
服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore
服务即可。
怎么用?
metastore
三种配置方式
- 内嵌模式
内嵌模式使用的是内嵌的Derby
数据库来存储元数据,也不需要额外起Metastore
服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
解压hive安装包 bin/hive
启动即可使用
缺点:不同路径启动hive
,每一个hive
拥有一套自己的元数据,无法共享。
- 本地模式
本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server.在这里我们使用MySQL。
本地模式不需要单独起metastore
服务,用的是跟hive
在同一个进程里的metastore
服务。也就是说当你启动一个hive
服务,里面默认会帮我们启动一个metastore
服务。
hive
根据hive.metastore.uris
参数值来判断,如果为空,则为本地模式。
缺点是:每启动一次hive服务,都内置启动了一个metastore
。
本地模式下hive
的配置主需要指定mysql
的相关信息即可。
hive安装包conf/hive-site.xml
文件中配置,如果没有,自己创建该文件。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node-1:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>
- 远程模式
远程模式下,需要单独起metastore
服务,然后每个客户端都在配置文件里配置连接到该metastore
服务。远程模式的metastore
服务和hive
运行在不同的进程里。
在生产环境中,建议用远程模式来配置Hive Metastore
。
在这种情况下,其他依赖hive
的软件都可以通过Metastore
访问hive
。
远程模式下,需要配置hive.metastore.uris
参数来指定metastore
服务运行的机器ip和端口,并且需要单独手动启动metastore
服务。
<property>
<name>hive.metastore.uris</name>
<value>thrift://ip:9083</value>
</property>