問題描述:
- 環(huán)境:Hadoop 2.9.2 + Hive 2.3.7 ,集群由三臺搭載 Centos7 系統(tǒng)的虛擬機(jī)模擬
- 問題:HDFS 和 Yarn 成功啟動之后进萄,在任意一個節(jié)點上啟動 Hive 并使用
show databases;
命令查看數(shù)據(jù)庫列表時,均會報錯:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
產(chǎn)生原因:
Hive 的核心配置文件 hive-site.xml
中可見,元數(shù)據(jù)存放于節(jié)點3的MySQL中:
<!-- hive元數(shù)據(jù)的存儲位置 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://centos7-3:3306/hivemetadata?createDatabaseIfNotExist=true&useSSL=false</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
如果僅有以上配置,則 Hive 元數(shù)據(jù)連接方式為 Local 模式抽莱,通過 JDBC 直接訪問節(jié)點3上的 MySQL,從而獲取元數(shù)據(jù)骄恶。
但 hive-site.xml
中還同時指定了 metastore thrift 連接的 地址&端口:
<!-- 指定 metastore 的地址和端口 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://centos7-3:9083</value>
</property>
<property>
<name>hive.metastore.client.socket.timeout</name>
<value>3600</value>
</property>
此時食铐,Hive 的元數(shù)據(jù)連接方式變?yōu)?Remote 模式,即使用 HiveMetaStoreClient 遠(yuǎn)程訪問節(jié)點3的9083端口僧鲁,獲取元數(shù)據(jù)信息虐呻。
【參考】Hive 元數(shù)據(jù)的三種連接方式
https://www.cnblogs.com/snowbook/p/5886438.html
但此刻節(jié)點3的9083端口上并沒有啟動 matastore 服務(wù),因此集群上的任意節(jié)點都無法遠(yuǎn)程訪問寞秃,自然無法讀取元數(shù)據(jù)铃慷。
解決方案:
在節(jié)點3上使用如下命令啟動 metastore 服務(wù):
# 后臺啟動 metastore 服務(wù)器端,默認(rèn)使用 9083 端口
nohup hive --service metastore &
# 或者使用指定的端口號:
nohup hive --service metastore -p 9083 &
需要注意:服務(wù)器端口號需要與客戶端配置文件中配置的監(jiān)聽端口號一致
再次啟動 Hive 查看數(shù)據(jù)庫列表蜕该,成功犁柜!