Hive(五):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 數據庫中的數據,具體會在以后的章節介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM