更新時(shí)間:2019-08-29 來(lái)源:黑馬程序員 瀏覽量:
一、 metadata 、metastore
Apache hive作為一款基于hadoop的數(shù)據(jù)倉(cāng)庫(kù)工具,其最大的魅力在于可以將位于hdfs的結(jié)構(gòu)化數(shù)據(jù)映射成為一張表,然后提供了類(lèi)sql的語(yǔ)法讓用戶(hù)使用來(lái)開(kāi)展對(duì)數(shù)據(jù)的分析,是一款非常棒的離線(xiàn)批處理數(shù)倉(cāng)工具。
在hive的具體使用中,首先面臨的問(wèn)題便是如何定義表結(jié)構(gòu)信息,跟結(jié)構(gòu)化的數(shù)據(jù)映射成功。所謂的映射指的是一種對(duì)應(yīng)關(guān)系。在hive中我們需要描述清楚表跟文件之間的映射關(guān)系、列和字段之間的關(guān)系等等信息。
我們把這些描述映射關(guān)系的數(shù)據(jù)的稱(chēng)之為hive的元數(shù)據(jù)。該數(shù)據(jù)十分重要,因?yàn)橹挥型ㄟ^(guò)查詢(xún)它才可以確定用戶(hù)編寫(xiě)sql和最終操作文件之間的關(guān)系。
為此我們需要搞清楚下述兩個(gè)知識(shí):
Metadata即元數(shù)據(jù)。元數(shù)據(jù)包含用Hive創(chuàng)建的database、table、表的字段等元信息。元數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)中。如hive內(nèi)置的Derby、第三方如MySQL等。
Metastore即元數(shù)據(jù)服務(wù),作用是:客戶(hù)端連接metastore服務(wù),metastore再去連接MySQL數(shù)據(jù)庫(kù)來(lái)存取元數(shù)據(jù)。有了metastore服務(wù),就可以有多個(gè)客戶(hù)端同時(shí)連接,而且這些客戶(hù)端不需要知道MySQL數(shù)據(jù)庫(kù)的用戶(hù)名和密碼,只需要連接metastore
服務(wù)即可。
二、 metastore三種配置方式
1. 內(nèi)嵌模式
內(nèi)嵌模式使用的是內(nèi)嵌的Derby數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)元數(shù)據(jù),也不需要額外起Metastore服務(wù)。數(shù)據(jù)庫(kù)和Metastore服務(wù)都嵌入在主Hive Server進(jìn)程中。這個(gè)是默認(rèn)的,配置簡(jiǎn)單,但是一次只能一個(gè)客戶(hù)端連接,適用于用來(lái)實(shí)驗(yàn),不適用于生產(chǎn)環(huán)境。
解壓hive安裝包 bin/hive 啟動(dòng)即可使用
缺點(diǎn):不同路徑啟動(dòng)hive,每一個(gè)hive擁有一套自己的元數(shù)據(jù),無(wú)法共享。
2. 本地模式
本地模式采用外部數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)元數(shù)據(jù),目前支持的數(shù)據(jù)庫(kù)有:MySQL、Postgres、Oracle、MS SQL Server.在這里我們使用MySQL。
本地模式不需要單獨(dú)起metastore服務(wù),用的是跟hive在同一個(gè)進(jìn)程里的metastore服務(wù)。也就是說(shuō)當(dāng)你啟動(dòng)一個(gè)hive 服務(wù),里面默認(rèn)會(huì)幫我們啟動(dòng)一個(gè)metastore服務(wù)。
hive根據(jù)hive.metastore.uris 參數(shù)值來(lái)判斷,如果為空,則為本地模式。
缺點(diǎn)是:每啟動(dòng)一次hive服務(wù),都內(nèi)置啟動(dòng)了一個(gè)metastore。
本地模式下hive的配置主需要指定mysql的相關(guān)信息即可。
hive安裝包c(diǎn)onf/hive-site.xml文件中配置,如果沒(méi)有,自己創(chuàng)建該文件。
<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. 遠(yuǎn)程模式
遠(yuǎn)程模式下,需要單獨(dú)起metastore服務(wù),然后每個(gè)客戶(hù)端都在配置文件里配置連接到該metastore服務(wù)。遠(yuǎn)程模式的metastore服務(wù)和hive運(yùn)行在不同的進(jìn)程里。
在生產(chǎn)環(huán)境中,建議用遠(yuǎn)程模式來(lái)配置Hive Metastore。
在這種情況下,其他依賴(lài)hive的軟件都可以通過(guò)Metastore訪(fǎng)問(wèn)hive。
遠(yuǎn)程模式下,需要配置hive.metastore.uris
參數(shù)來(lái)指定metastore服務(wù)運(yùn)行的機(jī)器ip和端口,并且需要單獨(dú)手動(dòng)啟動(dòng)metastore服務(wù)。
三、 Hive Client、Beeline Client
課程中采用遠(yuǎn)程模式部署hive的metastore服務(wù)。使用hive自帶的客戶(hù)端進(jìn)行連接訪(fǎng)問(wèn)。
在node-1機(jī)器上,解壓hive的安裝包。
注意:以下兩件事在啟動(dòng)hive之前必須確保正常完成。
1、選擇某臺(tái)機(jī)器提前安裝mysql,確保具有遠(yuǎn)程訪(fǎng)問(wèn)的權(quán)限。
2、啟動(dòng)hadoop集群 確保集群正常健康
上傳mysql jdbc的驅(qū)動(dòng)包到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 內(nèi)容如下:
<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 的啟動(dòng)方式
前臺(tái)啟動(dòng):
/export/servers/hive/bin/hive --service metastore
該啟動(dòng)方式下,進(jìn)程會(huì)一直占用shell終端前臺(tái)。如果ctrl+c結(jié)束進(jìn)程,則hive metastore服務(wù)也會(huì)同時(shí)關(guān)閉。
后臺(tái)啟動(dòng):
nohup /export/servers/hive/bin/hive --service metastore &
推薦使用后臺(tái)啟動(dòng)的方式。
后臺(tái)啟動(dòng)的情況下,如果想關(guān)閉metastore服務(wù) 使用jps查看進(jìn)程,kill -9 進(jìn)程號(hào)即可。
2. 第一代客戶(hù)端Hive Client
在hive安裝包的bin目錄下,有hive提供的第一代客戶(hù)端
bin/hive。使用該客戶(hù)端可以訪(fǎng)問(wèn)hive的metastore服務(wù)。從而達(dá)到操作hive的目的。
如果需要在其他機(jī)器上通過(guò)該客戶(hù)端訪(fǎng)問(wèn)hive metastore服務(wù),只需要在該機(jī)器的hive-site.xml配置中添加metastore服務(wù)地址即可。
上傳hive安裝包到另一個(gè)機(jī)器上,比如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 內(nèi)容如下:
<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>
使用下面的命令啟動(dòng)hive的客戶(hù)端:
/export/servers/hive/bin/hive
可以發(fā)現(xiàn)官方提示:第一代客戶(hù)端已經(jīng)不推薦使用了。
3、 第二代客戶(hù)端Hive Beeline Client
hive經(jīng)過(guò)發(fā)展,推出了第二代客戶(hù)端beeline,但是beeline客戶(hù)端不是直接訪(fǎng)問(wèn)metastore服務(wù)的,而是需要單獨(dú)啟動(dòng)hiveserver2服務(wù)。
在hive運(yùn)行的服務(wù)器上,首先啟動(dòng)metastore服務(wù),然后啟動(dòng)hiveserver2服務(wù)。
nohup /export/servers/hive/bin/hive --service metastore &
nohup /export/servers/hive/bin/hive --service hiveserver2 &
在node-3上使用beeline客戶(hù)端進(jìn)行連接訪(fǎng)問(wèn)。
/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: *******
0基礎(chǔ)學(xué)習(xí)大數(shù)據(jù)培訓(xùn)靠譜嗎
2019-03-28大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)那個(gè)好?
2019-03-28大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)排行榜中靠譜的機(jī)構(gòu)是哪個(gè)?
2019-03-28如何挑選大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)?
2019-03-280基礎(chǔ)學(xué)習(xí)大數(shù)據(jù)培訓(xùn)靠譜嗎
2019-03-28大數(shù)據(jù)培訓(xùn)機(jī)構(gòu)排行榜
2019-03-28