翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hive_metastore_configure.html
版本: 5.14.2
Hive Metastore服务将Hive表和分区的元数据存储在关系数据库中,并提供Metastore服务API供客户端(包括Hive)访问元数据。此页面介绍了部署选项,并提供了在建议配置中设置数据库的说明。
继续阅读:
Metastore部署模式
注意:在此页面上,HiveServer指的是HiveServer1或HiveServer2。
嵌入式模式
Cloudera建议仅将此模式用于实验目的。
嵌入模式是默认部署模式。在此模式下,Metastore使用Derby数据库,数据库和Metastore服务都嵌入主HiveServer进程中。当您启动HiveServer进程时,两者都会启动。此模式需要花费最少的努力进行配置,但一次只能支持一个活动用户,并且未经生产认证。
本地模式
在本地模式下,Hive Metastore服务在主HiveServer进程的同一进程中运行,但Metastore数据库在单独的进程中运行,并且可以位于单独的主机上。Metastore服务通过JDBC与Metastore数据库进行通信。
远程模式
Cloudera建议您使用此模式。
在远程模式下,Hive Metastore服务在其自己的JVM进程中运行。HiveServer2,HCatalog,Impala和其他进程使用Thrift API与它进行通信(使用hive.metastore.uris属性)。Metastore服务通过JDBC与Metastore数据库进行通信(使用 javax.jdo.option.ConnectionURL 属性)。数据库,HiveServer进程和Metastore服务都可以位于同一主机上,但在单独的主机上运行HiveServer进程可提供更好的可用性和可伸缩性。
远程模式优于本地模式的主要优点是远程模式不需要管理员与每个Hive用户共享Metastore数据库的JDBC登录信息。 HCatalog需要此模式。
支持的Metastore数据库
有关最新信息,请参阅CDH和Cloudera Manager支持的数据库。Cloudera强烈建议您使用MySQL,因为它是Hive用户社区中最受欢迎的,因此,它比其他选项获得更多测试。有关安装信息,请参阅:
除了上述支持的数据库之外,CDH还支持使用MariaDB。有关安装和配置MariaDB for CDH的信息,请参阅MariaDB数据库。
Metastore内存和硬件要求
Cloudera建议将HiveServer2分成多个实例,并在您开始为HiveServer2分配超过12 GB的空间时对其进行负载平衡。目标是调整大小以减少Java垃圾回收对服务进行的活动处理的影响。
使用Bytes Hive配置属性中的HiveServer2的Java堆大小来设置此值。
使用Bytes Hive配置属性中的Hive Metastore Server的Java堆大小设置此值。
重要提示:这些数字只是一般性指导,可能会受到诸如列数,分区,复杂联接和客户端活动等因素的影响。根据您的预期部署,通过测试进行优化以达到您的环境的最佳值。
有关为Hive元存储配置堆以及HiveServer2和Hive客户端的信息,请参阅Hive组件的堆大小和垃圾收集。
配置Metastore数据库
本节介绍如何配置Hive以使用远程数据库,以及MySQL, PostgreSQL和Oracle的示例。
Hive Metastore的配置属性记录在Apache wiki上的Hive Metastore Administration文档中。
注意:有关安全群集中可能需要的其他配置的信息,请参阅Hive身份验证。
为Hive Metastore配置远程MySQL数据库
Cloudera建议您在驻留在主机上的一台或多台远程服务器上配置Metastore的数据库,或与HiveServer1或HiveServer2进程分开的主机上配置数据库。MySQL是最常用的数据库。使用以下步骤配置远程Metastore。如果您打算使用云服务数据库(例如Amazon Relational Database Service(RDS)),请参阅如何将共享Amazon RDS设置为CDH的Hive Metastore,以获取有关如何将共享Amazon RDS设置为您的Hive的信息metastore。
-
如果您尚未安装并启动MySQL,请安装并启动它
在RHEL系统上安装MySQL:
$ sudo yum install mysql-server
在使用该命令安装MySQL之后,您可能需要确认您确实想要完成安装。安装完成后,启动 MySQL的 守护进程。
**在RHEL系统上**
$ sudo service mysqld start
-
配置MySQL服务和连接器
在您可以使用远程MySQL数据库运行Hive Metastore之前,您必须为远程MySQL数据库配置连接器,设置初始数据库模式,并为Hive用户配置MySQL用户帐户。
要在RHEL 6系统上安装MySQL连接器,请执行以下操作:
在Hive Metastore服务器主机上安装 mysql-connector-java 到/usr/lib/hive/lib/ 目录。
$ sudo yum install mysql-connector-java
$ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar
注意:在发布时,版本为5.1.31 ,但是在阅读本文时,版本可能已更改。如果您正在使用MySQL版本5.6,则必须使用版本5.1.26或更高版本的驱动程序。
-
创建数据库和用户
本节中的说明假定您正在使用远程模式,并且MySQL数据库安装在不同于主机上。在这个例子中mysql主机名为 metastorehost 。
注意:如果Metastore服务将在安装数据库的主机上运行,在 CREATE USER例子中使用localhost 替换 'metastorehost'。同样,在/etc/hive/conf/hive-site.xml文件中,设置javax.jdo.option.ConnectionURL的值为jdbc:mysql://localhost/metastore 。有关添加MySQL用户的更多信息,请参阅http://dev.mysql.com/doc/refman/5.5/en/adding-users.html。
创建初始数据库模式。Cloudera建议使用Hive模式工具(schemaTool) 来执行此操作。
如果由于某种原因你决定不使用模式工具,你可以使用 hive-schema-n.n.n.mysql.sql 文件; 该文件位于/usr/lib/hive/scripts/metastore/upgrade/mysql/目录。(n.n.n是当前的Hive版本,例如1.1.0)如果您决定使用,请按以下步骤操作 hive-schema-n.n.n.mysql.sql
使用 hive-schema-n.n.n.mysql.sql的示例
注意:仅当您不使用Hive模式工具时才执行此操作。
$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-n.n.n.mysql.sql;
您还需要一个Hive用于访问Metastore的MySQL用户帐户。防止此用户帐户在Metastore数据库模式中创建或更改表格非常重要。
重要提示:为防止用户在使用较低或较高版本的Hive时无意中破坏了Metastore模式,请设置 hive.metastore.schema.verification 为true。
**例**
mysql> CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';
...
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';
mysql> GRANT ALL PRIVILEGES ON metastore.* TO 'hive'@'metastorehost';
mysql> FLUSH PRIVILEGES;
mysql> quit;
-
配置Metastore服务与MySQL数据库进行通信
此步骤显示您需要在 hive-site.xml (/usr/lib/hive/conf/hive-site.xml)中设置的属性。虽然你可以在所有主机(客户端,Metastore,HiveServer)上使用相同的hive-site.xml , hive.metastore.uris是唯一必须配置的属性; 其他只用于metastore主机。
给定一个MySQL数据库 为myhost 和用户帐户hive 与密码 mypassword,请按如下所示设置配置(覆盖任何现有值)。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://myhost/metastore</value>
<description>the URL of the MySQL database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mypassword</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoStartMechanism</name>
<value>SchemaTable</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://<n.n.n.n>:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>true</value>
</property>
注: hive.metastore.local 不再被支持(截至Hive 0.10); 设置hive.metastore.uris 足以表明您正在使用远程Metastore。
为Hive Metastore配置远程PostgreSQL数据库
略
为Hive Metastore配置远程Oracle数据库
在您可以使用远程Oracle数据库运行Hive Metastore之前,您必须配置连接器到远程Oracle数据库,设置初始数据库模式并为Hive用户配置Oracle用户帐户。
略