hiveServer2 和 metastore的一點解讀。

  剛看了hive官網的文檔,對於一些概念結合本身的經驗,彷佛又多了一些理解,想想仍是記下來的好,一來我是個有些健忘的人,過一段時間即使忘了,循着這個帖子,也能快速把知識點抓起來;二來或許對別人也有些啓發。不過首先聲明,只是我本身的理解,或許也有錯誤的地方。。java

  1. 先吐個槽,hive的官方文檔頁面導航就是坨翔,固然,內容仍是比較充實的。文檔並無分版本,只是在具體某些內容中對不一樣版本區別介紹;本身菜單的連接點擊後,是一個全新的頁面,導航實在太不友好了。mysql

  2. metastoresql

  hive在部署時,要配置hive-site.xml,這裏面的配置很重要的一部分是針對metastore的。什麼是metastore?官方解釋:"All the metadata for Hive tables and partitions are accessed through the Hive Metastore. ",簡單翻一下「對全部hive原數據和分區的訪問都要經過Hive Metastore」。shell

另有一段,附個人翻譯:數據庫

 1 Remote Metastore Server
 2 In remote metastore setup, all Hive Clients will make a connection to a metastore server which in turn queries the datastore (MySQL in this example) 
 3 for metadata. Metastore server and client communicate using Thrift Protocol. Starting with Hive 0.5.0, you can start a Thrift server by executing 
 4 the following command:
 5 
 6 遠程metastore服務:
 7 啓動遠程metastore後,hive客戶端鏈接metastore服務,從而能夠從數據庫(本例中位mysql)查詢到原數據信息。metastore服務端和客戶端通訊是經過thrift協議。從hive 0.5.0版本開始,你能夠經過執行
 8 如下命令來啓動thrift服務。
 9 
10 hive --service metastore

  因此,metastore服務實際上就是一種thrift服務,經過它咱們能夠獲取到hive原數據,而且經過thrift獲取原數據的方式,屏蔽了數據庫訪問須要驅動,url,用戶名,密碼等等細節。併發

另外須要說明,以上說的是metastore服務(metastore server)的概念。咱們後面還會提到metastore數據庫(metastore database),metastore 客戶端(metastore client)的概念,但其實metastore服務(metastore server)是理解metastore最重要的概念,因此在這裏提早單獨提到了。this

 

hive中對metastore的配置包含3部分,metastore database,metastore server,metastore client。編碼

其中,metastore database分爲Local/Embedded Metastore Database (Derby)和Remote Metastore Database,metastore server也分爲Local/Embedded Metastore Server和Remote Metastore Server,本地配置既無太大意義,又要佔很多篇幅,我就不講了,後面的例子都是遠程相關配置。url

須要注意的幾點:spa

  1)Remote metastore server並不須要額外配置,只要Remote Metastore Database配置好了,"hive --service metastore" 啓動metastore會尋找database相關配置。

  2)一般我配置了database,就不配置client了。通常咱們的hive都是作服務端的狀況較多,不用做爲客戶端,固然不用客戶端的配置了。可是若是僅做爲客戶端,database配置就不須要了,服務端連元數據庫,和客戶端沒半毛錢直接關係,固然就不須要配置了,但若是做爲客戶端,並且還要啓動hiveServer2服務(該服務也須要訪問元數據),那database也是必須配置的。還有一種狀況,既是服務端又是客戶端,不用說了,都配置上吧。 廢話了一大堆,總結一句話,配置多了,通常不會出問題,配少了,就呵呵呵了。。

  3)metastore服務端,客戶端的應用場景。spark sql,spark shell終端鏈接應該就是以客戶端的形式鏈接 hive的metastore服務的。難怪看到官方文檔中說準備在3.0版本將metastore獨立出去。原本嘛,獲取元數據的小活,爲何非得要整合在hive中。

Remote Metastore Database:

Config Param

Config Value

Comment

javax.jdo.option.ConnectionURL

jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true

metadata is stored in a MySQL server

javax.jdo.option.ConnectionDriverName

com.mysql.jdbc.Driver

MySQL JDBC driver class

javax.jdo.option.ConnectionUserName

<user name>

user name for connecting to MySQL server

javax.jdo.option.ConnectionPassword

<password>

password for connecting to MySQL server

 

metastore client Parameters

Config Param

Config Value

Comment

hive.metastore.uris

thrift://<host_name>:<port>

host and port for the Thrift metastore server

hive.metastore.local

false

Metastore is remote.  Note: This is no longer needed as of Hive 0.10.  Setting hive.metastore.uri is sufficient.

hive.metastore.warehouse.dir

<base hdfs path>

Points to default location of non-external Hive tables in HDFS.

 

  3. hiveServer2 

  一樣,看一段官方解釋:

HiveServer2 (HS2) is a server interface that enables remote clients to execute queries against Hive and retrieve the results (a more detailed intro here).
The current implementation, based on Thrift RPC, is an improved version of HiveServer and supports multi-client concurrency and authentication.

HiveServer2(HS2)是一個服務端接口,使遠程客戶端能夠執行對Hive的查詢並返回結果。目前基於Thrift RPC的實現是HiveServer的改進版本,並支持多客戶端併發和身份驗證

  hiveServer2的啓動方式有2種:

1 $HIVE_HOME/bin/hiveserver2
2 或者
3 $HIVE_HOME/bin/hive --service hiveserver2

 啓動hiveServer2服務後,就可使用jdbc,odbc,或者thrift的方式鏈接。 用java編碼jdbc或則beeline鏈接使用jdbc的方式,聽說hue是用thrift的方式鏈接的hive服務。

 

個人一點疑問,hiveServer2和metastore都會訪問元數據,他們的訪問方式是怎樣的?是相同的,仍是類似的。元數據的訪問有沒有可能僅須要一個服務?我如今訪問hive服務須要啓動hiveServer2,訪問sparksql須要啓動metastore,若是兩個都會啓動metastore,我以爲有些奇怪。

相關文章
相關標籤/搜索