先啟動metastore
nohup hive --service metastore &
再啟動 hiveserver2
nohup hive --service hiveserver2 &
用jps和ps -ef查看進程都啟動着,但發現10000端口沒有被監聽
看不出來問題,打開hive日志
cd $HIVE_HOME/conf cp hive-log4j2.properties.template hive-log4j2.properties vim hive-log4j2.properties property.hive.log.dir = /root/app/hive/log
查看日志
org.apache.thrift.transport.TTransportException: Cannot write to null outputStream java.lang.RuntimeException: Error initializing notification event poll Caused by: java.io.IOException: org.apache.thrift.TApplicationException: Internal error processing get_current_notificationEventId
應該是notification.api.auth的驗證問題
修復:
添加hive-site.xml配置如下
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
再啟動hiveserver2
報錯:
WARN [main] server.HiveServer2: 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, 為什么會啟動呢?注意如下關聯信息:
2020-11-17 00:06:29,576 INFO [main] server.HiveServer2: HS2 interactive HA not enabled. Starting tez sessions.. 2020-11-17 00:06:29,576 INFO [main] server.HiveServer2: Starting/Reconnecting tez sessions..
顯示HS2 interactive HA沒有開啟,就導致了開啟tez session。那么我們進行如下配置開啟HS2 interactive HA:
修復:
<property>
<name>hive.server2.active.passive.ha.enable</name>
<value>true</value>
<description>Whether HiveServer2 Active/Passive High Availability be enabled when Hive Interactive sessions are enabled.This will also require hive.server2.support.dynamic.service.discovery to be enabled.</description>
</property>
再次嘗試,啟動成功
用beeline測試
./beeline -u jdbc:hive2://bigdata:10000
報錯:
Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate anonymous (state=08S01,code=0)
Beeline version 3.0.0 by Apache Hive
是root用戶驗證的問題
修復;
core-stie.xml增加如下配置,重啟
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
再次嘗試,beeline正常讀取了,但日志仍有Error信息
報錯:
[HiveServer2-Handler-Pool: Thread-53]: Error occurred during processing of message. java.lang.RuntimeException: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:219) at org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:269) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:748) Caused by: org.apache.thrift.transport.TSaslTransportException: No data or no sasl data in the stream at org.apache.thrift.transport.TSaslTransport.open(TSaslTransport.java:328) at org.apache.thrift.transport.TSaslServerTransport.open(TSaslServerTransport.java:41) at org.apache.thrift.transport.TSaslServerTransport$Factory.getTransport(TSaslServerTransport.java:216)
分析:
1.這是一個可以忽略的異常,不會影響HiveServer2服務的正常使用。
2.該異常會在Thrift0.9.2及更低版本的HiveServer2服務上出現。
3.由HiveServer2服務上的負載均衡器進行Tcp檢查引起的,主要用評估服務的健康狀況。(詳見THRIFT-2268)
https://issues.apache.org/jira/browse/THRIFT-2268?attachmentSortBy=dateTime
參考文章:
https://issues.apache.org/jira/browse/HIVE-19740
https://cloud.tencent.com/developer/article/1176657
https://www.codenong.com/jsa0ad3e1513ef/
https://blog.csdn.net/qq_16633405/article/details/82190440
