hive部署
版本
组件 | 版本 |
---|---|
hive | 3.1.2 |
mysql | 5.7.41 |
hadoop | 3.1.4 |
部署流程
前置条件:hadoop和mysql正常运行
- 删除旧版本
# 删除Hive
[root@node1 ~]# cd /opt/software/
[root@node1 software]# rm -rf ./hive-x.x.x/
# 登录mysql ,删除Hive元数据库hive
[root@node2 ~]# mysql -u root -pxxxx
mysql> drop database hive;
-
部署hive
2.1. hive下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/
2.2. 上传解压:
bash [root@node1 ~]# cd /opt/software/ [root@node1 software]# tar -zxvf ./apache-hive-3.1.2-bin.tar.gz [root@node1 software]# mv apache-hive-3.1.2-bin hive-3.1.2
2.3. 配置环境变量:
```bash
vim /etc/profile
export HIVE_HOME=/opt/software/hive-3.1.2/
export PATH= P A T H : PATH: PATH:HIVE_HOME/bin#source 生效 source /etc/profile ```
2.4. 配置hive-site.xml文件(完成配置见下文)
```xml <configuration> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://xxxx/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></value> </property> </configuration> ```
2.5. 依赖包更换
删除Hive lib目录下“guava-19.0.jar ”包
将Hadoop lib下的“guava”包拷贝到Hive lib目录下
将“mysql-connector-java-5.1.47.jar”驱动包上传到hive节点的$HIVE_HOME/lib目录下
2.6. 初始化hive的元数据库
bash [root@node1 ~]# schematool -dbType mysql -initSchema
2.7. 启动```bash #启动metastore nohup hive --service metastore 1>/opt/software/hive-3.1.2/logs/metastore.log 2>/opt/software/hive-3.1.2/logs/metastore.err & #启动 hiveserver2 nohup hiveserver2 1>/opt/software/hive-3.1.2/logs/hiveserver.log 2>/opt/software/hive-3.1.2/logs/hiveserver.err & ```
2.8. 测试
CLI连接测试,执行hive语句成功之后,连接使用HiveServer2/beeline进行连接测试
异常处理
-
server.HiveServer2: Error starting HiveServer2 on attempt 22, will retry in 60000ms
java.lang.RuntimeException: Error initializing notification event poll
https://issues.apache.org/jira/browse/HIVE-19740
修改 hive-site.xml配置<property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property>
-
server.HiveServer2: Error starting HiveServer2 on attempt 1, will retry in 60000ms
java.lang.NoClassDefFoundError: org/apache/tez/dag/api/SessionNotRunning
增加hive-site.xml配置<property> <name>hive.server2.active.passive.ha.enable</name> <value>true</value> </property>
或者
通过配置高可用可以解决该问题(见下文)
高可用配置
前置条件:zookeeper可用
假定部署2个节点hive服务,每个节点都启动MetaStore,HiveServer2服务
-
MetaStore高可用
在hive-site.xml中增加:<property> <name>hive.metastore.uris</name> <value>thrift://node1:9083,thrift://node2:9083</value> </property>
-
HiveServer2高可用
在hive-site.xml中增加:<property> <name>hive.server2.log.dir</name> <value>/opt/software/hive-3.1.2/logs</value> </property> <property> <name>hive.server2.support.dynamic.service.discovery</name> <value>true</value> </property> <property> <name>hive.server2.zookeeper.namespace</name> <value>hiveserver2</value> </property> <property> <name>hive.zookeeper.quorum</name> <value>node3,node4,node5</value> </property> <property> <name>hive.zookeeper.client.port</name> <value>2181</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>node2</value> <description>zk返回给beeline连接的HiveServer2服务器地址,每台HiveServer2 HA都需要修改</description> </property> <property> <name>hive.server2.thrift.port</name> <value>10000</value> </property>
-
连接测试
重启2个节点中的MetaStore,HiveServer2服务
查看是否注册到zookeeper[zk: localhost:2181(CONNECTED) 2] ls /hiveserver2 [leader, serverUri=node2:10000;version=3.1.2;sequence=0000000034, serverUri=node1:10000;version=3.1.2;sequence=0000000036]
测试HiveServer2可用性
root@node1:~# beeline -u "jdbc:hive2://node3:2181,node4:2181,node5:2181/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2" -n root SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/software/hive-3.1.2/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/opt/software/hadoop-3.1.4/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Connecting to jdbc:hive2://node3:2181,node4:2181,node5:2181/default;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2 24/01/07 17:43:09 [main]: INFO jdbc.HiveConnection: Connected to node1:10000 Connected to: Apache Hive (version 3.1.2) Driver: Hive JDBC (version 3.1.2) Transaction isolation: TRANSACTION_REPEATABLE_READ Beeline version 3.1.2 by Apache Hive 0: jdbc:hive2://node3:2181,node4:2181,node5:2>
完整配置:
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node2: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>xxxx</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<property>
<name>hive.server2.log.dir</name>
<value>/opt/software/hive-3.1.2/logs</value>
</property>
<property>
<name>hive.server2.support.dynamic.service.discovery</name>
<value>true</value>
</property>
<property>
<name>hive.server2.zookeeper.namespace</name>
<value>hiveserver2</value>
</property>
<property>
<name>hive.zookeeper.quorum</name>
<value>node3,node4,node5</value>
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>node2</value>
<description>zk返回给beeline连接的HiveServer2服务器地址,每台HiveServer2 HA都需要修改</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node1:9083,thrift://node2:9083</value>
</property>
</configuration>