Hive安装配置

相比较于 Apache Hive 而言,Cloudera CDH 将 Hive 拆分为一个个独立的服务,如 hive,metastore,hivesever2等。如果在安装配置之前不能弄清楚各个部分的关系,那么安装过程中出现的各种问题也就不能针对性地解决。因此首先分享一下我个人对于hive,metastore 以及 hiveserve2 之间关系的理解。
 
使用 yum 安装 Cloudera CDH Hive 需要分别安装hive,hive-metastore 和 hive-sever2。其中hive是必须安装的,hive-metastore 和 hive-sever2 则根据要求选择安装。
 
  • 启动 hive 之后出现的 CLI 是查询任务的入口,CLI 提交任务给 Driver
  • Driver 接收到任务后调用 Compiler,Executor,Optimizer 将 SQL 语句转化为可以在 Hadoop 集群上执行的 MapReduce 任务
  • Compiler,Executor 从 metastore 获取所需要的元数据信息
  • hivesever2 作为 hivesever 的改进版本,最主要的变化在于提供了全新的命令行窗口 BeeLine。

 
1、使用 yum 安装 Hive 组件
Hive安装:
 
yum install hive
yum install hive-metastore
yum install hive-server2

2、配置 Hive
创建Hive相关文件的存储路径并更改目录权限
hdfs dfs -mkdir -p /usr/hive/warehouse
hdfs dfs -mkdir -p /usr/hive/tmp
hdfs dfs -mkdir -p /usr/hive/log
hdfs dfs -chmod g+w /usr/hive/warehouse
hdfs dfs -chmod g+w /usr/hive/tmp
hdfs dfs -chmod g+w /usr/hive/log
配置环境变量
vim /usr/lib/hive/conf/hive-env.sh
export HADOOP_HOME=/usr/lib/hadoop
export HIVE_CONF_DIR=/usr/lib/hive/conf

3、配置 MySQL
Metastore默认使用内嵌的Derby数据库存储元数据信息,同时支持多种数据库可做拓展。官网推荐使用MySQL和PostgreSQL,这里只列出MySQL的具体配置过程,有关PostgreSQL的配置过程可查阅官网。

CentOS 7 默认yum源并未包含mysql,需要首先配置repo源:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
安装mysql-community-release-el7-5.noarch.rpm包
rpm -ivh mysql-community-release-el7-5.noarch.rpm
安装mysql并启动mysql
yum install mysql-server
为当前用户分配mysql权限并重启mysql服务
sudo chown -R root:root /var/lib/mysql
service mysqld restart
设置root密码
mysql -u root
mysql > use mysql; 
mysql > update user set password=password('123456') where user='root';
mysql > exit;
创建用于存储元数据的数据库和操作的用户
mysql -uroot -p123456
mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql;
mysql> CREATE USER 'hive'@'metastore' IDENTIFIED BY '123';
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';
mysql> GRANT ALL ON metastore.* TO 'hive'@'metastorehost' IDENTIFIED BY 'hive';
mysql> GRANT ALL ON metastore.* TO 'hive'@'%' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;
mysql> ALTER DATABASE metastore CHARACTER SET latin1;
mysql> quit;

4、配置 Hive Metastore
内嵌模式是metastore 的默认模式,使用 Derby 存储元数据信息,但不支持多用户并发对metastore 操作,不建议在实际环境中使用。这里不再赘述。

下面的本地模式和远程模式均需要使用JDBC才能完成metastore和mysql的通信,需要先添加JDBC驱动包。
$ yum install mysql-connector-java
$ ln -s /usr/share/java/mysql-connector-java.jar /usr/lib/hive/lib/mysql-connector-java.jar

所谓的本地模式和远程模式,指的是metastore和hiveserver的位置关系,而和数据库的位置无关,这一点尤为重要。


 
本地模式:
metastore service 和 HiveServer 运行在同一进程,但是数据库运行在独立的进程,也可以将数据库安装在独立的主机上。内嵌的 metastore 服务和数据库通过 JDBC 通信。

配置方式如下:
vim /usr/lib/hive/conf/hive-site.xml
添加如下内容
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysqlhost/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<!-- base hdfs path -->
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
格式化数据库
cd /usr/lib/hive/bin$ ./schematool --dbType mysql --initSchema

远程模式:
metastore service运行在独立的JVM进程中,通过配置hive.metastore.uris,进而实现HiveServer,Impala 等进程与 metastore 通信。通过配置javax.jdo.option.ConnectionURL,实现 metastore service 和数据库的通信,这点和本地模式是一样的。上述两个配置选项位于$HIVE_HOME/conf/hive-site.xml。

远程模式的主要优点在于管理员不必向每个hive 用户提供数据库的JDBC的登录信息,保证安全性。用户只需要在hive.metastore.uris中添加metastore的Thirft network API(如thrift://192.168.1.1:9083)即可完成所在客户端与服务端的通信,进而获取元数据信息。

所谓客户端,即可以提交查询任务的hive节点;所谓服务端,即为客户端提供metastore service的客户端。这里的客户端分为两类:
1.通过内嵌的metastore服务直接获取元数据
2.通过配置的hive.metastore.uris访问指定的安装hive-metastore的客户端,进而获取元数据,这时被访问的客户端相对于访问的客户端就称为服务端。


 
服务端配置如下,可以注意到这里的配置和本地模式一致。
 
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://mysqlhost/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<!-- base hdfs path -->
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
格式化数据库
cd /usr/lib/hive/bin$ ./schematool --dbType mysql --initSchema
客户端配置如下:

<!-- thrift://<host_name>:<port> 默认端口是9083 --> 
<property>
<name>hive.metastore.uris</name
<value>thrift://metastorehost:9083</value>
<description>Thrift uri for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property> <!-- hive表的默认存储路径 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>

0 个评论

要回复文章请先登录注册