配置 hive 與 hbase 整合的目的是利用 HQL 語法實現對 hbase 資料庫的增刪改查操作,基本原理就是利用兩者本身對外的API介面互相進行通信,兩者通信主要是依靠hive_hbase-handler.jar工具類。 但請註意:使用Hive操作HBase中的表,只是提供了便捷性,前面章節 ...
配置 hive 與 hbase 整合的目的是利用 HQL 語法實現對 hbase 資料庫的增刪改查操作,基本原理就是利用兩者本身對外的API介面互相進行通信,兩者通信主要是依靠hive_hbase-handler.jar工具類。 但請註意:使用Hive操作HBase中的表,只是提供了便捷性,前面章節已經介紹,hiveQL引擎使用的是MapReduce,對於性能上,表現比較糟糕,在實際應用過程中可針對不同的場景酌情使用。
註意:本文介紹的內容適用的版本見我前面章節,HDP2.4.2 ( HBase-1.1.2, hive-1.2.1, hadooop-2.7.1), 文章命令中的路徑根據你配置集群選擇的安裝路徑不同而可能不一樣,請根據實際安裝目錄進行調整。
目錄:
- hive配置
- dfs許可權
- 測試
hive配置:
- 在<HIVE_HOME>/lib 目錄需要有下麵的這些文件,其中(guava-14.0.1.jar、zookeeper-3.4.6.2.4.2.0-258.jar、hive-hbase-handler-1.2.1000.2.4.2.0-258.jar、htrace-core-3.1.0-incubating.jar)在hive安裝時已經包含,列表中的其它文件需要從 <HBASE_HOME>/lib 下copy. (註意: 如果 hive 安裝時自帶的文件版本與 hbase/lib 下的不一致時,應先刪除 hive/lib 下的文件,再從 hbase/lib 下copy 過來)
guava-14.0.1.jar zookeeper-3.4.6.2.4.2.0-258.jar htrace-core-3.1.0-incubating.jar hbase-common-1.1.2.2.4.2.0-258.jar hbase-common-1.1.2.2.4.2.0-258-tests.jar hbase-client-1.1.2.2.4.2.0-258.jar hbase-server-1.1.2.2.4.2.0-258.jar hbase-protocol-1.1.2.2.4.2.0-258.jar hive-hbase-handler-1.2.1000.2.4.2.0-258.jar
- 在 hbase master 主機 hdp4上,執行下麵的命令,將文件copy至 hdp1、hdp2、hdp3 的<HIVE_HOME>/lib 目錄
- hdp4命令:cd /usr/hdp/2.4.2.0-258/hbase/lib
- hdp4命令:scp hbase-common-1.1.2.2.4.2.0-258.jar hbase-common-1.1.2.2.4.2.0-258-tests.jar hbase-client-1.1.2.2.4.2.0-258.jar hbase-server-1.1.2.2.4.2.0-258.jar hbase-protocol-1.1.2.2.4.2.0-258.jar hdp1:/usr/hdp/2.4.2.0-258/hive/lib (再次執行上面命令,修改紅色標註機器名更新文件至 hdp2,hdp3)
- 在 ambari 管理界面修改 hive-site.xml 配置文件,hive --> advanced --> custom hive-site, 選擇 “ Add Property ... ", 彈出框中: key輸入:hive.aux.jars.path, Value的值就是 <HIVE_HOME>/lib 目錄下上面列出文件名(絕對地址),如下:
/usr/hdp/2.4.2.0-258/hive/lib/guava-14.0.1.jar,/usr/hdp/2.4.2.0-258/hive/zookeeper-3.4.6.2.4.2.0-258.jar,/usr/hdp/2.4.2.0-258/hive/hive-hbase-handler-1.2.1000.2.4.2.0-258.jar,/usr/hdp/2.4.2.0-258/hive/hbase-common-1.1.2.2.4.2.0-258.jar,/usr/hdp/2.4.2.0-258/hive/hbase-server-1.1.2.2.4.2.0-258.jar,/usr/hdp/2.4.2.0-258/hive/hbase-client-1.1.2.2.4.2.0-258.jar,/usr/hdp/2.4.2.0-258/hive/hbase-common-1.1.2.2.4.2.0-258-tests.jar,/usr/hdp/2.4.2.0-258/hive/htrace-core-3.1.0-incubating.jar,/usr/hdp/2.4.2.0-258/hive/hbase-protocol-1.1.2.2.4.2.0-258.jar
- 上一步實際就是在 hive-site.xml (/etc/hive/2.4.2.0-258/0) 配置文件中增加一個參數 ,不讓手工修改的原因是,hive服務重啟後,手工修改的配置會被衝掉。
- 在ambari中修改完參數並保存時會生成新的配置版本,同時自動檢測此參數修改對其它主機和組件的影響,提示組件服務重啟,按提示操作即可。
- 將 hdp4 主機上 hbase/conf 下的hbase-site.xml文件複製到所有hadoop節點的hadoop/conf下
dfs許可權:
- 進入ambari管理界面,選擇 HDFS --> Advanced --> Advanced hdfs-site ,設置 dfs.permissions.enabled 屬性為: false 如圖:
測試:
- 使用 xshell 連接 hive 主機 hdp1
- 命令: cd /usr/hdp/2.4.2.0-258/hive/bin (切換至 hive/bin 目錄)
- 單節點連接hbase命令: beeline -hiveconf hbase.master=hdp4.60000 (hdp4是hbase的master節點,見hd2.4安裝第五部分)
- 以集群連接hbase命令:beeline -hiveconf hbase.zookeeper.quorum=R (意思是由zookeeper來分配主機,HBase使用的zookeeper集群,預設埠是2181,可以不指定,如果修改過zookeeper埠,則為:zkNode1:2222,zkNode2:2222,zkNode3:2222)
- beeline: !connect jdbc:hive2://hdp1:10000/default (連接hive)
- 測試: show databases; (查看 hive 中所有的資料庫,驗證hive連接成功否)
- 執行下麵的sql, 創建 hive 的擴展表與 hbase 資料庫 stocksInfo 表關聯。 (見 HBase(二): c#訪問HBase之股票行情Demo)
CREATE EXTERNAL TABLE if not exists StocksInfo( Rowkey string, Code string, Name string ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES('hbase.columns.mapping' = ':key,d:Code,d:Name') TBLPROPERTIES('hbase.table.name' = 'StocksInfo');
- hbase.columns.mapping: Hive表和HBase表的欄位映射關係,分別為:Hive表中第一個欄位映射:key(rowkey),d:code (d 指hbase 資料庫 stocksInfo 表列族,code 列名)
- 表創建成功後,執行 : select * from stocksInfo; 查一下,如下則OK
- hive 擴展表可理解為關係型資料庫裡面的視圖, 表刪除時,並不會刪除數據,我在應用過程中,大部分場景是與 hbase 數據關聯。
- 如果創建 hive 實表與 hbase 關聯時,通過 hiveQL 進行的創建表、增加數據等操作均會影響到 hbase 資料庫中的數據,具體會在以後的章節介紹。