hive本身提供了thrift協議對外提供服務的功能。
如果某台機器已經配置好了hive,然后運行以下命令打開thrift,提供對外服務(打開后這台機器就為hive服務器):
hive --service metastore &
遠程機器想要使用hive,可以不做任何元數據和數據存儲位置配置(都不需要知道這些配置細節),只需用hive的客戶端功能連接hive服務器就行了。
這樣配置連接hive服務器:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.0.101:9083</value>
</property>
</configuration>
然后在客戶端機器運行hive命令,就能使用hive客戶端功能了,和正常使用hive一樣。
注意:
- hive命令啟動需要本地起了hdfs服務,不需要yarn服務
- hive客戶端從hive服務端拿到元數據,然后會根據元數據中記錄的數據文件地址拿數據,但是元數據中記錄的地址可能為如下形式:
hdfs://slave5:9000/user/hive/warehouse/...
也就是說hive客戶端需要知道slave5對應ip才能訪問數據文件,要求hive客戶端的/etc/hosts文件里有ip映射。
如果不想配第2步,在服務端hive-site.xml配置文件里指定hive.metastore.warehouse.dir選項時,直接用ip地址(未測試過)。但是不建議這樣,因為如果用了ip地址,一旦hdfs集群的NameNode換了ip,hdfs上的數據文件就不能用原來的ip訪問到了,想用hive繼續訪問,需要修改hive的元數據內容。
