hive學習教程(五):hive和Hbase整合
一、Hive整合HBase原理
Hive與HBase整合的實現是利用兩者本身對外的API介面互相進行通訊,相互通訊主要是依靠hive-hbase-handler-0.9.0.jar工具類,如下圖
Hive與HBase通訊示意圖
二、具體步驟
安裝前說明
1、關於hadoop、HBase、Hive叢集的搭建,請參考本人博文“基於Hadoop的資料分析綜合管理平臺之Hadoop、HBase完全分散式叢集搭建”
2、本文中Hadoop、HBase、Hive安裝路徑
2.1、拷貝jar包
刪除
2.rm -rf
2.2、修改
在尾部新增
[java] view plain copy print?
1.
2.hive.querylog.location
3./home/yujianxin/hive/hive-0.9.0/logs
4.
5.
6.hive.aux.jars.path
7.
8.file:///home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,
9.file:///home/yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,
10.file:///home/yujianxin/hive/hive-0.9.0/lib/zookeeper-3.4.5.jar
11.
12.
修改
[java] view plain copy print?
1.
2. hive.zookeeper.quorum
3. master,slave1,slave2
4.
2.3、拷貝hbase-0.94.7-security.jar到所有hadoop節點(包括master)的hadoop/lib下
[java] view plain copy print?
1.cp
2.4、拷貝hbase/conf下的hbase-site.xml檔案到所有hadoop節點(包括master)的hadoop/conf下
[java] view plain copy print?
1.cp
三、啟動、使用配置後Hive,測試是否配置成功
3.1、啟動Hive
叢集方式啟動
[java] view plain copy print?
1.hive –auxpath /home/yujianxin/hive/hive-0.9.0/lib/hive-hbase-handler-0.9.0.jar,/home/
2.yujianxin/hive/hive-0.9.0/lib/hbase-0.94.7-security.jar,/home/yujianxin/hive/hive-0.9.
3.0/lib/zookeeper-3.4.5.jar
可以將此啟動Hive與HBase整合的命令寫成Shell指令碼,設定成開機啟動
3.2、在Hive中建立HBase識別的表
[java] view plain copy print?
1.CREATE TABLE hbase_hive_1(key int, value string)
2.STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
3.WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:val”)
4.TBLPROPERTIES (“hbase.table.name” = “xyz”);
hbase.table.name 定義在hbase中的table名稱
多列時,data:1,data:2
多列族時,data1:1,data2:1
hbase.columns.mapping 定義在hbase的列族,裡面的:key 是固定值而且要保證在表pokes中的foo欄位是唯一值
建立有分割槽的表
[java] view plain copy print?
1.CREATE TABLE hbase_hive_2(key int, value string)
2.partitioned by (day string)
3.STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
4.WITH SERDEPROPERTIES (“hbase.columns.mapping” = “:key,cf1:val”)
5.TBLPROPERTIES (“hbase.table.name” = “xyz2”);
分別檢視Hive、HBase中建立的表
3.3、匯入資料
新建hive的資料表
create table pokes(foo int,bar string)
row format delimited fields terminated by ‘,’;
批量匯入資料
load data local inpath ‘/home/yujianxin/temp/data1.txt’ overwrite into table pokes;
使用sql匯入hbase_table_1
SET hive.hbase.bulk=true;
insert overwrite table hbase_hive_1 select * from pokes;
匯入有分割槽的表
insert overwrite table hbase_hive_2 partition (day=’2012-01-01’) select * from pokes;
往Hive中插入資料同時會插入到HBase中
3.4、分別檢視Hive、HBase中的資料
OK,到此Hive、HBase整合成功。
——————————————————————————————————————————————————————————————————
下面再給出較複雜的測試例子
情況一、對於在hbase已經存在的表,在hive中使用CREATE EXTERNAL TABLE來建立聯絡
[java] view plain copy print?
1.create external table hive_test (key int,gid map