Hive的部署,Hive是啥呢?
Hive部署的节点信息如下:
1 安装Hive包
与Hive相关的包有四个:
hive – 基础安装包,提供了运行时完整的语言支持,必须安装的
hive-metastore – 在作为单独的服务运行时提供了存储元数据的脚本,可选的。
hive-server – 在作为单独的HiveServer服务运行时,提供运行脚本,可选的。
hive-server2 –在作为单独的HiveServer服务运行时,提供运行脚本,可选的。
安装
apt-get install <pkg1> <pkg2>
2 配置Hive
配置Hive的Metastore(Hive的metastore服务存储了Hive表和分区相关的库的metadata),Hive运行总共有三种模式:
1 Embedded Mode
这是CDH部署Hive的metastore的默认模式,在这种模式下metastore使用一个derby数据库,database和metastore服务同时运行在HiveServer的主进程中,所以启动Hive进程的时候,它们是同时启动的。这种模式使用很少的配置就能运行,但是它只支持一个活跃用户。
2 Local Mode
这种模式下Hive的metastore服务也是运行在HiveServer进程中的,但是metastore数据库是运行在一个单独的进程中的,而且可以分离到其他机器上。
3 Remote Mode
在这种模式下metastore服务运行在自己的JVM进程中,HiveServer2,HCatalog, Cloudera ImpalaTM,和其他进程通过Thrift network API来通讯,metastore服务通过JDBC和metastore数据库通讯,HiveServer进程和metastore服务可以部署在同一台机机器上。
3 配置Metastore数据库(支持多种数据库:mysql/postgresql)
1 配置一个远程MySQL数据库作为Hive Metastore(metastorehost)
apt-get install mysql-server
service mysql start
2 配置MySQL服务和转接器
apt-get install libmysql-java
ln -s /usr/share/java/libmysql-java.jar /usr/lib/hive/lib/libmysql-java.jar
3 创建库和用户
1 初始化数据库,登陆mysql数据库执行以下命令
CREATE DATABASE metastore;
USE metastore;
SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.10.0.mysql.sql;
2 为Hive配置一个MySQL用户来访问mysql。
CREATE USER 'hive'@'metastorehost' IDENTIFIED BY 'mypassword';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'metastorehost';
GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'metastorehost';
FLUSH PRIVILEGES;
quit;
4 配置Metastore服务连接MySQL数据库(client, metastore, HiveServer) /etc/hadoop/conf/hive-site.xml
<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>
4 配置HiveServer2
在使用HiveServer2之前,必须做如下配置的改变:
1 Table Lock Manager (Required),你必须适当的配置Hive's Table Lock Manager,这个需要你安装ZooKeeper,Lock Manager设置如下(/etc/hive/conf/hive-site.xml):
<property>
<name>hive.support.concurrency</name>
<description>Enable Hive's Table Lock Manager Service</description>
<value>true</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<description>Zookeeper quorum used by Hive's Table Lock Manager</description>
<value>zk1.myco.com,zk2.myco.com,zk3.myco.com</value>
</property>
#你在开启Lock Manager的时候不指定zookeeper节点列表回导致不可预估的行为。如果你的zookeeper监听的不是默认的端口,则需要在Hive-site.xml重新设置端口信息。
<property>
<name>hive.zookeeper.client.port</name>
<value>2222</value>
<description>The port at which the clients will connect.</description>
</property>
2 JDBC驱动配置的连接格式
HiveServer_v2 jdbc:hive2://<host>:<port> org.apache.hive.jdbc.HiveDriver
HiveServer_v1 jdbc:hive://<host>:<port> org.apache.hadoop.hive.jdbc.HiveDriver
3 认证授权
HiveServer2可以为所有的连接进行授权认证,默认情况下允许所有客户端连接,HiveServer2支持Kerberos或者LDAP认证,可以再hive-site.xml中通过hive.server2.authentication选项进行配置。你也可以配置认证插件,它允许你提供普通的认证给HiveServer2。
4 HiveServer2 for YARN
如果你把HiveServe2和YARN搭配使用,你就必须设置HADOOP_MAPRED_HOME环境变量在/etc/default/hive-server2文件中
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
5 同时运行HiveServer2和HiveServer
Cloudera建议你在大多数情况下使用HiveServer2来代替HiveServer (HiveServer1), HiveServer2和HiveServer1可以运行在同一个系统中,共享相同的数据设置。因为两者都是监听10000端口,所以如果运行在同一台机器上需要你修改其中一个的监听端口。例如修改HiVeServer2的端口在hive-site.xml文件中:
<property>
<name>hive.server2.thrift.port</name>
<value>10001</value>
<description>TCP port number to listen on, default 10000</description>
</property>
5 启动Metastore
如果你运行的是远程模式的metastore,则你必须在启动HiveServer2之前启动metastore服务。如下:
service hive-metastore start 或者 hive --service metastore
6 启动,,停止HiveServer2服务
cloudera建议使用HiveServer2服务,因为版本2支持多客户端和客户认证
1 启动
service hive-server2 start
2 检查HiveServer2是否正常运行,在命令行运行如下命令:
beeline
beeline>SHOW TABLES
beeline是hiveserver2的新CLI接口,你可以使用beeline和Hiveserver2进行交互,例如:
$ beeline
beeline> !connect jdbc:hive2://localhost:10000 username password org.apache.hive.jdbc.HiveDriver
0: jdbc:hive2://localhost:10000>
3 停止
service hive-server2 stop
7 启动HiveServer1
1 启动
service hiveserver start
2 验证,启动hive1的CLI接口
hive
hive> show tables;
OK
Time taken: 10.345 seconds
8 Hive配合HBase使用
允许hive脚本连接Hbase,只需要在脚本中添加以下语句,例如:
ADD JAR /usr/lib/hive/lib/zookeeper.jar;
ADD JAR /usr/lib/hive/lib/hive-hbase-handler-<Hive-HBase-Handler_version>-cdh<CDH_version>.jar
ADD JAR /usr/lib/hive/lib/guava-<Guava_version>.jar;
9 在客户端安装Hive的JDBC
1 安装
apt-get install hive-jdbc
2 设置
把/usr/lib/hive/lib/*.jar和/usr/lib/hadoop/*.jar增加到你的classpath中
10 为使用YARN设置HADOOP_MAPRED_HOME
如果一些用户想使用pig、hive、sqoop来提交mapreduce2(YARN)的job,则需要设置HADOOP_MAPRED_HOME环境变量,如下:
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
11 你的hive数据存储在HDFS上面,一般在/user/hive/warehouse目录下。一般是hive-site.xml的hive.metastore.warehouse.dir属性设置。
下面开始部署,部署环境如下:
IP Hostname
192.168.1.40 U-4 Hive-server
192.168.1.50 U-5 Metastore
192.168.1.70 U-7 MetastoreDB(mysql) Hive-server2
1 U-7上安装Metastore的后端数据库,本文采用mysql
apt-get install mysql-server
2 U-7安装mysql转接器
apt-get install libmysql-java
ln -s /usr/share/java/libmysql-java.jar /usr/lib/hive/lib/libmysql-java.jar
3 U-7 mysql数据库初始化,初始化metastore库
#mysql -uroot -hlocalhost -p
mysql> CREATE DATABASE metastore;
Query OK, 1 row affected (0.00 sec)
mysql> USE metastore;
Database changed
mysql> SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE USER 'hive'@'U-5' IDENTIFIED BY 'mypassword';
Query OK, 0 rows affected (0.00 sec)
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'hive'@'U-5';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON metastore.* TO 'hive'@'U-5';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
除了使用SOURCE /usr/lib/hive/scripts/metastore/upgrade/mysql/hive-schema-0.12.0.mysql.sql来手动初始化
metastore库外,官方还提供一个一个工具schematool用来自动化初始化
metastore库,不过这个
schematool工具没找到.......
4 U-7上修改mysql配置文件/etc/mysql/my.cnf
#bind-address = 172.0.0.1
bind-address = 0.0.0.0
mysql默认监听本地回环地址,而一会儿要从远程链接mysql,所以需要修改监听地址。然后重启mysql服务即可。
5 U-5安装metastore
apt-get install hive-metastore
6 U-5配置/etc/hive/conf/hive-site.xml文件
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://U-7/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://U-5:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
</configuration>
7 U-5上启动metastore服务
service hive-metastore start
8 U-5的hive-site.xml文件拷贝到U-7的相同目录下,并在U-7的hive-site.xml中追加如下内容:
<property>
<name>hive.support.concurrency</name>
<description>Enable Hive's Table Lock Manager Service</description>
<value>true</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<description>Zookeeper quorum used by Hive's Table Lock Manager</description>
<value>U-2,U-3,U-4</value>
</property>
</configuration>
9 U-7上安装hive-server2
apt-get install hive-server2
10 U-7启动hive-server2
service hive-server2 start
11 U-7上使用beeline客户端测试
12 因为集群中同时支持hive-server和hive-server2,在U-4上安装hive-server
apt-get install hive-server
13 U-7的hive-site.xml文件拷贝到U-4的相同目录下
14 U-4上使用hive客户端命令进行测试