4 部署 hive
4.1 配置 hive-env.sh
cd 到你解压的 hive 的目录下
1
| cd /xxx/xxx/hive312/conf
|
复制 hive-env.sh.template 为 hive-env.sh
1
| cp hive-env.sh.template hive-env.sh
|
编辑 hive-env.sh 在最下面找到并修改
1 2 3 4 5
| HADOOP_HOME=/opt/module/hadoop313
export HIVE_CONF_DIR=/opt/module/hive313/conf
export HIVE_AUX_JARS_PATH=/opt/module/hive313/lib
|
4.2 MySQL JDBC驱动程序复制到Hive的lib目录:
1
| wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.32.tar.gz
|
1
| tar -xzf mysql-connector-java-8.0.32.tar.gz
|
1
| cp mysql-connector-java-8.0.32/mysql-connector-java-8.0.32.jar /usr/local/hive/lib/
|
此处应当注意其他驱动包报错,取高版本的覆盖低版本
4.3 搭建 hive HiveServer2的高可用性 (需要分发)
4.3.1 配置文件
高可用需要确保更改conf下的配置文件中以下的配置
确保ZooKeeper集群已经正确配置并运行,以下配置项将ZooKeeper用于Hive的服务发现:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <configuration> <property> <name>hive.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property>
<property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> </configuration>
|
Hive Metastore高可用性需要配置多个Metastore实例,使用共享的数据库和ZooKeeper协调。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>root</value> </property>
<property> <name>hive.metastore.schema.verification</name> <value>false</value> </property>
<property> <name>hive.metastore.uris</name> <value>thrift://master:9083,thrift://slave1:9083,thrift://slave2:9083</value> </property>
<property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> </configuration>
|
配置HiveServer2使用ZooKeeper进行服务发现和负载均衡:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| <configuration> <property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property>
<property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2_zk</value> </property>
<property> <name>hive.server2.thrift.port</name> <value>10000</value> </property>
<property> <name>hive.server2.thrift.bind.host</name> <value>slave1</value> </property>
<property> <name>hive.server2.authentication</name> <value>NONE</value> </property>
<property> <name>hive.server2.webui.host</name> <value>slave1</value> </property>
<property> <name>hive.server2.webui.port</name> <value>10002</value> </property>
<property> <name>hive.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property>
<property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> </configuration>
|
下面是示例配置文件
4.3.2 编辑 master 主机 的 hive-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
| <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>root</value> </property>
<property> <name>datanucleus.autoCreateSchema</name> <value>true</value> </property>
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property>
<property> <name>hive.server2.thrift.port</name> <value>10000</value> </property>
<property> <name>hive.server2.thrift.bind.host</name> <value>master</value> </property>
<property> <name>hive.server2.authentication</name> <value>NONE</value> </property>
<property> <name>hive.server2.webui.host</name> <value>master</value> </property>
<property> <name>hive.server2.webui.port</name> <value>10002</value> </property>
<property> <name>hive.metastore.schema.verification</name> <value>false</value> </property>
<property> <name>hive.metastore.uris</name> <value>thrift://master:9083</value> </property>
<property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property>
<property> <name>hive.cli.print.header</name> <value>true</value> </property>
<property> <name>hive.cli.print.current.db</name> <value>true</value> </property>
<property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property>
<property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2_zk</value> </property>
<property> <name>hive.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property>
<property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> </configuration>
|
4.3.3 编辑 slave1 主机 的 hive-site.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>root</value> </property>
<property> <name>datanucleus.autoCreateSchema</name> <value>true</value> </property>
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property>
<property> <name>hive.server2.thrift.port</name> <value>10000</value> </property>
<property> <name>hive.server2.thrift.bind.host</name> <value>slave1</value> </property>
<property> <name>hive.server2.authentication</name> <value>NONE</value> </property>
<property> <name>hive.server2.webui.host</name> <value>slave1</value> </property>
<property> <name>hive.server2.webui.port</name> <value>10002</value> </property>
<property> <name>hive.metastore.schema.verification</name> <value>false</value> </property>
<property> <name>hive.metastore.uris</name> <value>thrift://master:9083</value> </property>
<property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property>
<property> <name>hive.cli.print.header</name> <value>true</value> </property>
<property> <name>hive.cli.print.current.db</name> <value>true</value> </property>
<property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property>
<property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2_zk</value> </property>
<property> <name>hive.zookeeper.quorum</name> <value>master,slave1,slave2</value> </property>
<property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> </configuration>
|
初始化Hive Metastore数据库:
1
| schematool -initSchema -dbType mysql
|
4.5 启动和验证
启动Hive Metastore
在各个Metastore实例上启动Hive Metastore服务:
1
| hive --service metastore &
|
启动HiveServer2
在各个HiveServer2实例上启动HiveServer2服务:
1
| hive --service hiveserver2 &
|
使用 jps -m 查看是否有相关进程
4.6 验证高可用性
通过beeline或hive CLI客户端连接到HiveServer2,使用ZooKeeper的连接字符串进行连接:
1
| beeline -u "jdbc:hive2://master:2181,slave1:2181,slave2:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk"
|
我只配了2台机器上的hive 所以地址只写了 master 和slave1
1
| !connect jdbc:hive2://master,slave1/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk along root
|