Hive中MetaServer與HiveServer2的應用


在hive中有metaServer與hiveServer2兩種服務,看了好多文章說這兩個的區別,文章內容有對有錯,不夠全面,故在這里好好總結一下。

首先,下面這個hive構架圖,我們一定不陌生,它反應出hive有哪些組件結構

當然下面的圖是hadoop1的部分,現在JobTracker是Yarn了
上面的部分是訪問Hive的三個入口,

1:直接Cli 2: 通過JDBC 3: webUI

當我們要連接Hive進行操作時,首先必須是安裝了,安裝hive很簡單,直接在conf/hive-site配置存放Hive元數據的連接信息,通常是用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 驅動后,我們就可以通過 bin/hive的方式進行hive客戶端,請求數據。如下圖:

這樣在大多數公司,特別是小公司小集群里基本是這樣操作的,當然我們公司也是這樣的,這樣本身沒有錯誤.
但我們看一下上面的配置,這樣是不是把連接數據庫的信息全泄露了,你可能會說,大家都是同公司的大數據部分,還有各種權限,泄露也無所謂,但我們想一下,在一個大的公司里,大數據平台是幾個部門共用的,這樣會有多台hive cli連接mysql,這樣泄露mysql的信息的風險還是挺大的.
另一方面,比如我們元數據Mysql庫無法啟動,我們要替換從庫時,或者我們要移植元數據到另一台機器上時,那么我們這么多的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 </property>

這樣我就通過metaserver取得了元數據的信息對吧
當然上面的圖只是一個MetaStoreServer,存在單點問題,但我們完全可以配置兩個或者多個MetaStoreServer,就實現了負載均衡與容錯的功能了,如下面的配置

<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>

接下來我們就要談談另一個有用的組件HiveServer2了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM