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。
yum install hive yum install hive-metastore yum install hive-server22、配置 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/conf3、配置 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 service 和 HiveServer 运行在同一进程,但是数据库运行在独立的进程,也可以将数据库安装在独立的主机上。内嵌的 metastore 服务和数据库通过 JDBC 通信。 配置方式如下:所谓的本地模式和远程模式,指的是metastore和hiveserver的位置关系,而和数据库的位置无关,这一点尤为重要。
vim /usr/lib/hive/conf/hive-site.xml添加如下内容
格式化数据库javax.jdo.option.ConnectionURL jdbc:mysql://mysqlhost/hive?createDatabaseIfNotExist=true JDBC connect string for a JDBC metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName hive username to use against metastore database javax.jdo.option.ConnectionPassword 123 password to use against metastore database hive.metastore.warehouse.dir /user/hive/warehouse location of default database for the warehouse
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的客户端,进而获取元数据,这时被访问的客户端相对于访问的客户端就称为服务端。
格式化数据库javax.jdo.option.ConnectionURL jdbc:mysql://mysqlhost/hive?createDatabaseIfNotExist=true JDBC connect string for a JDBC metastore javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore javax.jdo.option.ConnectionUserName hive username to use against metastore database javax.jdo.option.ConnectionPassword 123 password to use against metastore database hive.metastore.warehouse.dir /user/hive/warehouse location of default database for the warehouse
cd /usr/lib/hive/bin$ ./schematool --dbType mysql --initSchema客户端配置如下:
hive.metastore.uris thrift://metastorehost:9083Thrift uri for the remote metastore. Used by metastore client to connect to remote metastore. hive.metastore.warehouse.dir /user/hive/warehouse location of default database for the warehouse