HiveServer2 高可用
- 修改配置hive-site.xml,增加一下內容
<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>hdp11,hdp12,hdp13</value>
</property>
<property>
<name>hive.zookeeper.client.port</name>
<value>2181</value>
</property>
<property>
- 將安裝的好的hive文件夾,同步到hdp12
xsync /opt/bigdata/hive
- 修改hdp12中的配置 hive-site.xml,修改
<property>
<name>hive.server2.thrift.bind.host</name>
<value>hdp12</value>
</property>
- 分別重啟啟動兩台的hiveServer2和metaStore
hiveservice.sh start
- 進入zk目錄執行zkCli.sh,打開zk客戶端,執行
ls /hiveserver2_zk
注意需要等待一會,hiveserver2啟動得比較慢
查看hive的hiveserver2日志發現報錯信息:
2021-03-01 19:44:15,923 WARN [main] server.HiveServer2 (HiveServer2.java:startHiveServer2(1064)) - Error starting HiveServer2 on attempt 1, will retry in 60000ms
java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74)
at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.initTriggers(TezSessionPoolManager.java:207)
at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.startPool(TezSessionPoolManager.java:114)
at org.apache.hive.service.server.HiveServer2.initAndStartTezSessionPoolManager(HiveServer2.java:839)
at org.apache.hive.service.server.HiveServer2.startOrReconnectTezSessions(HiveServer2.java:822)
at org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:745)
at org.apache.hive.service.server.HiveServer2.startHiveServer2(HiveServer2.java:1037)
at org.apache.hive.service.server.HiveServer2.access$1600(HiveServer2.java:140)
at org.apache.hive.service.server.HiveServer2$StartOptionExecutor.execute(HiveServer2.java:1305)
at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:1149)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:318)
at org.apache.hadoop.util.RunJar.main(RunJar.java:232)
Caused by: java.lang.ClassNotFoundException: org.apache.tez.dag.api.TezConfiguration
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 16 more
這個信息是缺少Tez引擎導致的,不影響使用,可通過安裝Tez來解決。
- 高可用搭建完畢,使用jdbc或者beeline兩種方式進行訪問
- beeline
控制台輸入: beeline 打開窗口
在窗口中輸入:
!connect jdbc:hive2://hdp11,hdp12/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk along root
- Jdbc
。。。
- 驗證HiveServer2是否是高可用
在hdp12上,殺掉占用10000端口的進程,即殺掉hdp12的hiveServer2進程
[along@hdp12 logs]$ netstat -ntpl |grep 10000
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp6 0 0 :::10000 :::* LISTEN 87776/java
在hdp12上打開beeline,連接
beeline> !connect jdbc:hive2://hdp11,hdp12/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk
連接成功
Connected to: Apache Hive (version 3.1.2)
Driver: Hive JDBC (version 3.1.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://hdp11,hdp12/>
0: jdbc:hive2://hdp11,hdp12/>
0: jdbc:hive2://hdp11,hdp12/>
0: jdbc:hive2://hdp11,hdp12/>
0: jdbc:hive2://hdp11,hdp12/> show databases;
+----------------------+
| database_name |
+----------------------+
| default |
再查看zk中的命名空間:
[zk: localhost:2181(CONNECTED) 35] ls /hiveserver2_zk
[serverUri=hdp12:10000;version=3.1.2;sequence=0000000017]
Metastore 高可用
- 修改2個節點hive配置文件hive-site.xml
<property>
<name>hive.metastore.uris</name>
<value>thrift://hdp11:9083,thrift://hdp12:9083</value>
</property>
- 執行hiveservice.sh重啟hive的hivesever2和metasrore服務
[along@hdp11 /]$ hiveservices.sh status
Metastore服務運行正常
HiveServer2服務運行正常
- 在11上通過zk命名空間連接beeline,並執行任意查詢語句
[along@hdp11 logs]$ beeline
Beeline version 3.1.2 by Apache Hive
beeline> !connect jdbc:hive2://hdp11,hdp12/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2_zk
查詢語句
0: jdbc:hive2://hdp11,hdp12/> show tables;
+-----------------------------+
| tab_name |
+-----------------------------+
| dwd_action_log |
| dwd_dim_activity_info |
| dwd_dim_base_province |
- 在11干掉metastore服務,再執行查詢語句
[along@hdp11 /]$ ps -ef | grep metastore
along 3751 1 1 17:21 pts/1 00:00:09 /opt/bigdata/jdk1.8.0_212/bin/java -Dproc_jar -Dproc_metastore
……
/opt/bigdata/hive/lib/hive-metastore-3.1.2.jar org.apache.hadoop.hive.metastore.HiveMetaStore
along 5031 1367 0 17:33 pts/0 00:00:00 grep --color=auto metastore
[along@hdp11 /]$ kill -9 3751
[along@hdp11 /]$ hiveservices.sh status
Metastore服務運行異常
HiveServer2服務運行正常
執行查詢語句,高可用驗證完成
0: jdbc:hive2://hdp11,hdp12/> show tables;
+-----------------------------+
| tab_name |
+-----------------------------+
| dwd_action_log |
| dwd_dim_activity_info |
| dwd_dim_base_province |