在hive中有metaServer與hiveServer2兩種服務(wù),看了好多文章說這兩個的區(qū)別,文章內(nèi)容有對有錯狈涮,不夠全面,故在這里好好總結(jié)一下鸭栖。
首先歌馍,下面這個hive構(gòu)架圖,我們一定不陌生晕鹊,它反應(yīng)出hive有哪些組件結(jié)構(gòu)
當(dāng)然下面的圖是hadoop1的部分松却,現(xiàn)在JobTracker是Yarn了
上面的部分是訪問Hive的三個入口,
1:直接Cli
2:通過JDBC
3:webUI
當(dāng)我們要連接Hive進行操作時溅话,首先必須是安裝了晓锻,安裝hive很簡單,直接在conf/hive-site配置存放Hive元數(shù)據(jù)的連接信息公荧,通常是用mysql带射,如下:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</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>root</value>
</property>
這樣配置好后同规,在hive的lib里加入Mysql JDBC 驅(qū)動后循狰,我們就可以通過 bin/hive的方式進行hive客戶端,請求數(shù)據(jù)券勺。如下圖:
這樣在大多數(shù)公司绪钥,特別是小公司小集群里基本是這樣操作的,當(dāng)然我們公司也是這樣的关炼,這樣本身沒有錯誤.
但我們看一下上面的配置程腹,這樣是不是把連接數(shù)據(jù)庫的信息全泄露了,你可能會說儒拂,大家都是同公司的大數(shù)據(jù)部分寸潦,還有各種權(quán)限色鸳,泄露也無所謂,但我們想一下见转,在一個大的公司里命雀,大數(shù)據(jù)平臺是幾個部門共用的,這樣會有多臺hive cli連接mysql斩箫,這樣泄露mysql的信息的風(fēng)險還是挺大的.
另一方面吏砂,比如我們元數(shù)據(jù)Mysql庫無法啟動,我們要替換從庫時乘客,或者我們要移植元數(shù)據(jù)到另一臺機器上時狐血,那么我們這么多的hive cli是不是全要修改一遍....
那么這時我們Hive的另一個組件出場了,它就是MetaStoreServer
啟動:nohup $HIVE_HOME/bin/hive –metastore &
如圖易核,我們在Hive cli與mysql中間是不是啟動一個MetaStoreServer匈织,
這樣我們的Hive cli就不需要連接Mysql,直接連接這個MetaStoreServer不就行了嗎牡直,
在hive-site.xml只要簡單的配置一下:
<property>
<name>hive.metastore.uris</name>
<value>thrift://xxxxxx:9083</value>
<description
這樣我就通過metaserver取得了元數(shù)據(jù)的信息對吧
當(dāng)然上面的圖只是一個MetaStoreServer报亩,存在單點問題,但我們完全可以配置兩個或者多個MetaStoreServer井氢,就實現(xiàn)了負(fù)載均衡與容錯的功能了弦追,如下面的配置
<property>
<name>hive.metastore.uris</name>
<value>thrift://dw1:9083,thrift://dw2:9083</value>
<description>A comma separated list of metastore uris on which metastore service is running
</description>
</property>
接下來我們就要談?wù)劻硪粋€有用的組件HiveServer2了