更新時間:2019-08-29 來源:黑馬程序員 瀏覽量:
一、 metadata 、metastore
Apache hive作為一款基于hadoop的數據倉庫工具,其最大的魅力在于可以將位于hdfs的結構化數據映射成為一張表,然后提供了類sql的語法讓用戶使用來開展對數據的分析,是一款非常棒的離線批處理數倉工具。
在hive的具體使用中,首先面臨的問題便是如何定義表結構信息,跟結構化的數據映射成功。所謂的映射指的是一種對應關系。在hive中我們需要描述清楚表跟文件之間的映射關系、列和字段之間的關系等等信息。
我們把這些描述映射關系的數據的稱之為hive的元數據。該數據十分重要,因為只有通過查詢它才可以確定用戶編寫sql和最終操作文件之間的關系。
為此我們需要搞清楚下述兩個知識:
Metadata即元數據。元數據包含用Hive創建的database、table、表的字段等元信息。元數據存儲在關系型數據庫中。如hive內置的Derby、第三方如MySQL等。
Metastore即元數據服務,作用是:客戶端連接metastore服務,metastore再去連接MySQL數據庫來存取元數據。有了metastore服務,就可以有多個客戶端同時連接,而且這些客戶端不需要知道MySQL數據庫的用戶名和密碼,只需要連接metastore
服務即可。
二、 metastore三種配置方式
1. 內嵌模式
內嵌模式使用的是內嵌的Derby數據庫來存儲元數據,也不需要額外起Metastore服務。數據庫和Metastore服務都嵌入在主Hive Server進程中。這個是默認的,配置簡單,但是一次只能一個客戶端連接,適用于用來實驗,不適用于生產環境。
解壓hive安裝包 bin/hive 啟動即可使用
缺點:不同路徑啟動hive,每一個hive擁有一套自己的元數據,無法共享。
2. 本地模式
本地模式采用外部數據庫來存儲元數據,目前支持的數據庫有:MySQL、Postgres、Oracle、MS SQL Server.在這里我們使用MySQL。
本地模式不需要單獨起metastore服務,用的是跟hive在同一個進程里的metastore服務。也就是說當你啟動一個hive 服務,里面默認會幫我們啟動一個metastore服務。
hive根據hive.metastore.uris 參數值來判斷,如果為空,則為本地模式。
缺點是:每啟動一次hive服務,都內置啟動了一個metastore。
本地模式下hive的配置主需要指定mysql的相關信息即可。
hive安裝包conf/hive-site.xml文件中配置,如果沒有,自己創建該文件。
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node-1: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>hadoop</value> </property> </configuration>
3. 遠程模式
遠程模式下,需要單獨起metastore服務,然后每個客戶端都在配置文件里配置連接到該metastore服務。遠程模式的metastore服務和hive運行在不同的進程里。
在生產環境中,建議用遠程模式來配置Hive Metastore。
在這種情況下,其他依賴hive的軟件都可以通過Metastore訪問hive。
遠程模式下,需要配置hive.metastore.uris
參數來指定metastore服務運行的機器ip和端口,并且需要單獨手動啟動metastore服務。
三、 Hive Client、Beeline Client
課程中采用遠程模式部署hive的metastore服務。使用hive自帶的客戶端進行連接訪問。
在node-1機器上,解壓hive的安裝包。
注意:以下兩件事在啟動hive之前必須確保正常完成。
1、選擇某臺機器提前安裝mysql,確保具有遠程訪問的權限。
2、啟動hadoop集群 確保集群正常健康
上傳mysql jdbc的驅動包到hive的安裝包lib目錄下。
修改hive的配置文件。具體如下:
tar zxvf hive-1.1.0-cdh5.14.0.tar.gz
mv hive-1.1.0-cdh5.14.0 hive
cd hive/conf/
mv hive-env.sh.template hive-env.sh
vim conf/hive-env.sh
export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
vim hive-site.xml 內容如下:
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://node-1: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>hadoop</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>node-1</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://node-1:9083</value> </property> </configuration>
1. metastore 的啟動方式
前臺啟動:
/export/servers/hive/bin/hive --service metastore
該啟動方式下,進程會一直占用shell終端前臺。如果ctrl+c結束進程,則hive metastore服務也會同時關閉。
后臺啟動:
nohup /export/servers/hive/bin/hive --service metastore &
推薦使用后臺啟動的方式。
后臺啟動的情況下,如果想關閉metastore服務 使用jps查看進程,kill -9 進程號即可。
2. 第一代客戶端Hive Client
在hive安裝包的bin目錄下,有hive提供的第一代客戶端
bin/hive。使用該客戶端可以訪問hive的metastore服務。從而達到操作hive的目的。
如果需要在其他機器上通過該客戶端訪問hive metastore服務,只需要在該機器的hive-site.xml配置中添加metastore服務地址即可。
上傳hive安裝包到另一個機器上,比如node-3:
tar zxvf hive-1.1.0-cdh5.14.0.tar.gz
mv hive-1.1.0-cdh5.14.0 hive
cd hive/conf/
mv hive-env.sh.template hive-env.sh
vim conf/hive-env.sh
export HADOOP_HOME=/export/servers/hadoop-2.6.0-cdh5.14.0
vim hive-site.xml 內容如下:
<configuration> <property> <name>hive.server2.thrift.bind.host</name> <value>node-1</value> </property> <property> <name>hive.metastore.uris</name> <value>thrift://node-1:9083</value> </property> </configuration>
使用下面的命令啟動hive的客戶端:
/export/servers/hive/bin/hive
可以發現官方提示:第一代客戶端已經不推薦使用了。
3、 第二代客戶端Hive Beeline Client
hive經過發展,推出了第二代客戶端beeline,但是beeline客戶端不是直接訪問metastore服務的,而是需要單獨啟動hiveserver2服務。
在hive運行的服務器上,首先啟動metastore服務,然后啟動hiveserver2服務。
nohup /export/servers/hive/bin/hive --service metastore &
nohup /export/servers/hive/bin/hive --service hiveserver2 &
在node-3上使用beeline客戶端進行連接訪問。
/export/servers/hive/bin/beeline
Beeline version 1.1.0-cdh5.14.0 by Apache Hive
beeline> ! connect jdbc:hive2://node-1:10000
Enter username for jdbc:hive2://node-1:10000: root
Enter password for jdbc:hive2://node-1:10000: *******