當前位置:
首頁 > 最新 > 教你一步一步搭建最新版Apache Hive,配置hive生態圈組件

教你一步一步搭建最新版Apache Hive,配置hive生態圈組件

在上一篇文章中介紹了在Docker環境搭建最新版Apache Hadoop完全分散式集群,並實現了NameNode HA、ResourceManager HA。(超詳細:Apache Hadoop 2.8分散式集群詳細搭建過程),接下來將搭建最新穩定版的Apache Hive,並配置hive、beeline、hwi、HCatalog、WebHCat等組件,方便日常在自己電腦上測試hive配置和跑作業,同樣的配置也可以應用於伺服器上。接下來將一步一步介紹最新版Apache Hive的安裝配置詳細過程

1、閱讀Apache Hive官網說明文檔,下載最新版本Hive

Hive是一個基於Hadoop的數據倉庫工具,將HDFS中的結構化數據映射為數據表,並實現將類SQL腳本轉換為MapReduce作業,從而實現用戶只需像傳統關係型資料庫提供SQL語句,並能實現對Hadoop數據的分析和處理,門檻低,非常適合傳統的基於關係型資料庫的數據分析向基於Hadoop的分析進行轉變。因此,Hive是Hadoop生態圈非常重要的一個工具。

安裝配置Apache Hive,最直接的方式,便是閱讀 Apache Hive官網的說明文檔,能了解到很多有用的信息。Apache Hive 要求JDK 1.7及以上,Hadoop 2.x(從Hive 2.0.0開始便不再支持Hadoop 1.x),Hive 可部署於Linux、Mac、Windows環境。

從官網下載最新穩定版本的 Apache Hive 2.1.1

2、安裝配置Apache Hive

(1)解壓 hive 壓縮包

(2)配置環境變數

(3)配置hive-site.xml

第1種,環境變數

第2種,hive 交互命令的參數(--hiveconf)

第3種,hive-site.xml配置文件

第4種,hivemetastore-site.xml, hiveserver2-site.xml 配置文件

當同時出現多種配置方式時,則按以下優先順序生效(越往後,優先順序越高):

hive-site.xml -> hivemetastore-site.xml -> hiveserver2-site.xml -> "--hiveconf" 命令行參數

在配置hive-site.xml之前,要先做一些準備工作

首先,在HDFS上新建文件夾

a、臨時文件夾,默認map-reduce臨時的中轉路徑是hdfs上的/tmp/hive-,因此,如果hdfs上沒有/tmp臨時文件夾,則新建並授權

b、創建hive數據倉庫目錄,默認是存放在hdfs上的/user/hive/warehouse目錄,新建並授權

其次,安裝mysql用於存儲hive的元數據

hive 默認使用Derby作為Hive metastore的存儲資料庫,這個資料庫更多用於單元測試,只支持一個用戶訪問,在生產環境,建議改成功能更強大的關係型資料庫,根據官網的介紹,支持用於存儲hive元數據的資料庫如下:

由於元數據的數據量都比較小,一般都以安裝mysql來存儲元數據。下面將介紹mysql的安裝配置

a、到MySQL官網打開MySQL 社區版下載頁面,然後下載以下的MySQL rpm安裝包

b、MySQL官網有介紹MySQL rpm包的安裝方法,一般需要安裝 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common, and mysql-community-libs-compat 這些包。在MySQL服務端至少安裝 mysql-community--* 軟體 包,在MySQL客戶端至少安裝 mysql-community--* 軟體包

在安裝之前,先查看一下,系統之前是否有安裝過mysql相關的包,如果有,則卸載掉,輸入指令查詢

在本實驗中,由於在docker裡面的centos6安裝,由於是centos6精簡環境,還需要安裝一些相應的依賴包,如下

接下來,按順序安裝mysql 的 rpm包,由於這幾個rpm包有依賴關係,因此,安裝時按以下順序逐個安裝

c、全部安裝完成後,則使用 service mysqld start 啟動mysql服務,首次啟動時,mysql 資料庫還會進行初始化,並生成root的初始密碼

d、在日誌裡面獲取root初始密碼,使用以下命令

其中,最後的 g1hK=pYBo(x9 就是初始密碼(隨機產生的,每次安裝不一樣的哦)

使用初始密碼,登錄mysql並修改root密碼為 Test.123

【注意】MySQL 默認會開啟強密碼驗證(MySQL"s validate_password plugin is installed by default),要求密碼長度至少8個字元,包含至少1個大寫、1個小寫、1個數字、1個特殊字元。

e、修改資料庫的字符集,查看默認的字符集

可以看出,database、server的字符集為latin1,如果後面在建資料庫、數據表時,沒有指定utf8,輸入中文會變成亂碼。MySQL 官網有介紹了更改字符集的方法,修改 mysql 的配置文件

更改好配置文件後,保存退出,重啟 mysql

再查看資料庫的字符集,已變成utf8,如下

f、創建用於存儲hive元資料庫的資料庫、賬號密碼

使用mysql的root賬號進入mysql後,創建資料庫 hivedb,賬號 hive,密碼 Test.123

到此,存儲hive元數據的mysql已經搭建完成。

接下來,將繼續配置hive-site.xml,使用mysql進行存儲,hive官網有說明文檔

編輯hive_site.xml,修改jdbc鏈接(hd1為mysql server的主機名)、驅動、賬號、密碼、數據倉庫默認路徑(hdfs)等信息,如下:

在完成基本配置後,還有以下幾點需要注意的

a、按官網文檔,還強烈推薦在hive-site.xml中配置datanucleus.autoStartMechanism項,以解決多並發讀取失敗的問題(HIVE-4762),配置如下

b、在hive-site.xml中再配置元數據認證為false,否則啟動時會報以下異常

配置如下

當配置為true時,則表示會強制metastore的版本信息與hive jar 一致。(這裡很奇怪,使用hive官網下載的包來解壓安裝,按理metastore的版本信息應該是會和hive jar一致的,怎麼設置為true會報異常呢)

c、配置 io 臨時目錄,否則會報異常

這是因為在hive-site.xml中使用了變數$為表示io臨時目錄,但沒有指定這個變數的值,也即沒有指定io臨時目錄的路徑,因此會報異常。

創建io臨時目錄

配置 hive-site.xml 指定 io 臨時目錄的路徑(本實驗使用的linux賬號為ahadoop,可根據實際情況修改)

經過以上步驟,已經完成了hive-site.xml的配置了

(4)初始化hive元資料庫

執行以下指令初始化hive元資料庫,否則 mysql 裡面儲存 hive 元數據的資料庫是空的,無法啟動 hive,會報錯

(5)啟動 hive

創建資料庫、數據表、導入數據、查詢數據等,都能正常執行,說明 hive 已經配置成功了

3、配置使用 beeline

beeline 是 hive 提供的一個新的命令行工具,基於SQLLine CLI的JDBC客戶端,beeline 要與HiveServer2配合使用,支持嵌入模式和遠程模式兩種,也即既可以像hive client一樣訪問本機的hive服務,也可以通過指定ip和埠遠程訪問某個hive服務。hive 官網是推薦使用beeline,它還提供了更為友好的顯示方式(類似mysql client)

a、要使用 beeline ,先把 hiveserver2 啟動起來,默認埠為10000

b、使用beeline

在連接時,beeline報異常

這是由於hadoop 2.0以後引入了一個安全偽裝機制,使得hadoop不允許上層系統(例如hive)直接將實際用戶傳遞到hadoop層,而是將實際用戶傳遞給一個超級代理,由該代理在hadoop上執行操作,避免任意客戶端隨意操作hadoop。因此,將本實驗的linux用戶ahadoop,設置為代理用戶

在 $HADOOP_HOME/etc/hadoop/core-site.xml 中配置

配置後,重啟hadoop集群,或者使用以下命令,刷新配置

修改hadoop的core-site.xml配置後,再使用 beeline -u jdbc:hive2:// 重新連接,這時仍然報異常,如下

經查,原因是由於本實驗使用的mysql jdbc驅動是比較高的版本(mysql-connector-java-6.0.6-bin.jar),將其替換為較低的版本(mysql-connector-java-5.1.30-bin.jar)

修改配置後,再次使用 beeline -u jdbc:hive2:// 重新連接,就正常了,可順利進入到 beeline 了

可以看出,其顯示方式與mysql client比較類似

使用完beeline後,使用 !quit 退出 beeline

到此,beeline 成功完成配置

4、配置使用 Hive Web Interface(hwi)

Hive Web Interface(hwi)是Hive自帶的一個Web GUI,功能不多,可用於展示,查看數據表、執行hql腳本。官網有較為詳細的介紹。

由於hive-bin包中並沒有包含hwi的頁面,只有Java代碼編譯好的jar包(hive-hwi-2.1.1.jar),因此,還需要下載hive源代碼,從中提取jsp頁面文件並打包成war文件,放到hive-lib目錄中

(2)解壓並將hwi頁面打包成war

(3)將war包複製到hive-lib目錄

(4)啟動 hwi

輸入指令啟動 hwi

結果報異常,無法啟動

該異常是找不到 war 文件,其原因是hwi啟動腳本($HIVE_HOME/bin/ext/hwi.sh)的bug,hwi.sh裡面用的是完整路徑,而HWIServer類中的代碼用的相對路徑:

再次啟動後,仍然報錯

原因是hwi使用Jetty作為web容器,而該容器需要Apache Ant才能啟動,因此還需要安裝Apache Ant

b、解壓

c、配置環境變數

執行 source .bash_profile 使環境變數生效

完成了 apache ant 安裝後,再次啟動 hwi

已經可順序啟動了,通過在瀏覽器輸入網站 http://172.17.0.1:9999/hwi 訪問 hwi 頁面,仍然報錯,如下圖

這個頁面報錯是

明明已經在環境變數中配置了JAVA_HOME,怎麼還會報錯呢,經查,是由於$HIVE_HOME/lib下沒有tools.jar所致,因此,對 $JAVA_HOME/lib/tools.jar 創建一個軟鏈接到 $HIVE_HOME/lib

重新啟動 hive --service hwi & 之後,再訪問 http://172.17.0.1:9999/hwi ,還是報錯,如下圖

報異常信息

經查,主要是 ant 版本的問題導致的,$HIVE_HOME/lib下的ant.jar版本為1.9.1,而剛才新安裝的ant版本為1.10.1,因此,需要把/lib下的ant.jar包copy到$/lib下

重新啟動 hive --service hwi & 之後,再訪問 http://172.17.0.1:9999/hwi 頁面,終於可正常訪問了

點擊左邊菜單 Browse Schema 可查看數據表情況

點擊左邊菜單 Create Session 可創建一個會話(會話名 test),如下圖

點擊左邊菜單 List Sessions 可顯示會話列表,如下圖

點擊 Manager 按鈕可進入該會話的管理頁面,如下圖

在會話管理頁面中,可執行hql腳本。在 Result File 中輸入個結果文件名,在 Query 編輯框中輸入 hql 腳本(本實驗的腳本為 select * from testdb.tmp_test4),在 Start Query 中選擇 YES,然後點擊下方的 Submit 按鈕提交會話,即可執行 hql 腳本。執行後,點擊 Result File 編輯框右邊的 View File 按鈕,可查看運行結果,如下圖

從上面使用 hwi 的過程可以看出,執行 hql 腳本的過程沒有任何提示,不知道某一個查詢執行是什麼時候結束的,只能在服務端才可以看到執行過程日誌信息,而且使用起來也不是很方便。針對數據分析人員,一般還是建議用CLI操作Hive,效率比較高。

(5)關於 hive metastore 的問題

按官網的介紹,不管是使用Hive CLI、客戶端還是HWI訪問Hive,都需要首先啟動Hive 元數據服務,否則無法訪問Hive資料庫。否則會報異常

使用 hive --service metastore 命令即可啟動 metastore 服務

但在本實驗中,不啟動 metastore 服務也能通過 hwi 正常訪問 hive 裡面的數據,可能跟新版本的機制有關

5、安裝配置 HCatalog

HCatalog是Hadoop的元數據和數據表的管理系統,它是基於Hive的元數據層,通過類SQL的語言展現Hadoop數據的關聯關係,支持Hive、Pig、MapReduce等共享數據和元數據,使用戶在編寫應用程序時無需關心數據是怎麼存儲、存在哪裡,避免用戶因schema和存儲格式的改變而受到影響。HCatalog的這種靈活性,使得在不影響到使用者的應用程序讀取數據的情況下,數據產生者可以在數據中增加新列。在不影響生產者或使用者的情況下,管理員可以遷移數據或是改變數據的存儲格式。如下圖

從上圖可看出,HCatalog低層支持多種文件格式的數據存儲方法,上層支持Pig、MapReduce、Hive、Streaming等多種應用。

這樣的好處在於,可以支持不同的工具集和系統能在一起使用,例如數據分析團隊,一開始可能只使用一種工具(如Hive,Pig,Map Reduce),而隨著數據分析工作的深入,需要多種工具相結合,如剛開始使用Hive進行分析查詢的用戶,後面還需要使用Pig為ETL過程處理或建立數據模型;剛開始使用Pig的用戶發現,他們更想使用Hive進行分析查詢。在這些情況下,通過HCatalog提供了元數據之間的共享,使用戶更方便的在不同工具間切換操作,比如在 Map Reduce或Pig中載入數據並進行規範化,然後通過Hive進行分析,當這些工具都共享一個metastore時,各個工具的用戶就能夠即時訪問其他工具創建的數據,而無需載入和傳輸的步驟,非常高效、方便。

Apache Hive 對 HCatalog 有詳細的介紹說明。從 hive 0.11.0 版本之後,hive 安裝包便提供了 hcatalog,也即安裝hive後,裡面就已經有了hcatalog了。接下來將介紹如何配置使用 HCatalog

(1)配置環境變數

(2)啟動 hcatalog

啟動後,程序報錯,如下

報錯的是log路徑不存在(跟前面介紹的hwi相對路徑、絕對路徑類似),這時通過指定一個hive用戶具有寫許可權的路徑,然後在啟動腳本里export變數HCAT_LOG_DIR指定路徑,如下:

重新啟動後 hcat_server.sh start ,還是報異常

經查,是埠衝突,如果原先已經開啟了 hive --service metastore & ,則會佔用了9083埠。而在開啟 hcat_server.sh start 時,會再重新開啟 metastore 服務,使用9083埠。這是因為 hcatalog 的目的就是要管理元數據的,因此自己會開啟 metastore 服務用於管理元數據,而如果其它應用也啟動了 metastore 服務,則可能會造成不一致。

將 hive --service metastore 的服務結束後,再啟動 hcat_server.sh start & ,即可順利啟動 hcat_server

hcat 是 hcatalog 的客戶端操作入口,官網有介紹了詳細的使用

使用 hcat -e 可執行元數據操作的命令(使用SQL語句,非常方便),例如

創建/修改/刪除數據表,查看數據表結構等等,這些跟元數據相關的DDL語句都是支持的。以下語句就不支持:

ALTER INDEX ... REBUILD

CREATE TABLE ... AS SELECT

ALTER TABLE ... CONCATENATE

ALTER TABLE ARCHIVE/UNARCHIVE PARTITION

ANALYZE TABLE ... COMPUTE STATISTICS

IMPORT FROM ...

EXPORT TABLE

另外,如果執行 hcat -e"select * from tmp_test5",也是不支持的,因為hcatalog主要是用來管理元數據的,而不是分析使用的,因此,不能跟hive等同

使用 hcat_server.sh stop 可停止 hcatalog 服務

6、WebHCat

WebHCat是為HCatalog提供REST API的服務,自hive 0.11.0 版本之後,hive 中也自帶了 webhcat ,如下圖,通過WebHCat,程序能夠通過REST的API很安全的鏈接和操作HCatalog提供的服務,方便Hive、Pig、MapReduce等應用使用。(類似於通過WebHDFS以web的方式來操作HDFS)

使用以下命令啟動 webhcat,默認的web埠為50111(須先啟動 hcat_srever.sh start)

(1)在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/status 可查看 hcatalog 的狀態,如下圖

(2)在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/version/hive 可查看 hive 的版本,如下圖

(3)在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/version/hadoop 可查看 hadoop 的版本,如下圖

(4)在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database 查看元數據的資料庫信息,但卻報錯了,如下圖

這是因為像ddl這些操作,需要指定用戶,因此,指定使用賬號(hcat所在linux伺服器的賬號ahadoop)

在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database?user.name=ahadoop 查看元數據的資料庫信息,還是報錯了,如下圖

報錯信息為 {"error":"Unable to access program:$"},識別不到 python 路徑

這時配置環境變數

重新啟動 webhcat

在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database?user.name=ahadoop 查看元數據的資料庫信息,繼續報錯,錯誤信息為

這是提示找不到 libexec 的路徑,這時,根據提示,編輯 hadoop 執行文件的27行,進行以下修改

重新啟動 webhcat

然後,在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database?user.name=ahadoop 查看元數據的資料庫信息,還是繼續報錯(暈,心中萬馬奔騰啊……)

根據提示,是用戶的問題,因此,跟 hcatalog 的配置一樣,設置超級代理用戶(使用webhcat所在的伺服器linux賬號ahadoop)

完成配置後,再重新啟動webhcat

在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database?user.name=ahadoop 查看元數據的資料庫信息,終於可以正常訪問了

如果需要加篩選條件,則在url後面加上like,例如篩選以t開頭的資料庫名稱,則在瀏覽器中輸入

http://172.17.0.1:50111/templeton/v1/ddl/database?user.name=ahadoop&like=t*

(5)查看某個資料庫的信息,則在database後面指定資料庫名(如本實驗的testdb資料庫),在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database/testdb?user.name=ahadoop

(6)查看某個資料庫裡面所有數據表的信息,則需要加上table關鍵字(如本實驗的testdb資料庫),在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database/testdb/table?user.name=ahadoop

(7)查看某個資料庫、某張表的信息,則需要加上數據表名(如本實驗的testdb資料庫、tmp_test3數據表),在瀏覽器輸入 http://172.17.0.1:50111/templeton/v1/ddl/database/testdb/table/tmp_test3?user.name=ahadoop

(8)使用 webhcat_server.sh stop 可終止 webhcat 服務

6、結語

通過以上的配置,完成了 hive、beeline、hwi、HCatalog、WebHCat 等組件安裝和使用,也了解到了他們的功能。hive 目前一直在持續更新版本,期待未來有更多好用的特性,為Hadoop的數據分析處理人員,帶來更高效的工具。

Hive 底層基於Hadoop,隨著Hadoop版本的不斷升級,Hive的性能也越來越強大。下面是Hadoop的版本變遷圖:


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 大數據與人工智慧Lab 的精彩文章:

TAG:大數據與人工智慧Lab |