1. 程式人生 > >8.HBase_應用_整合Hive

8.HBase_應用_整合Hive

1.HBase與Hive整合配置

  • HBase與Hive整合:Hive資料儲存在HBase、Hive表的描述資訊儲存在Hive。因為,Hive是高延遲的,而HBase是低延遲的。我們整合的目的就是利用HBase的優勢。
  • 整合Hive建立表的方式:(1) 管理表 - Hive資料儲存指定在HBase上。(2) 外部表 - 現有一個HBase表,需要對錶中資料進行分析。
  • 實際上,Hive成了HBase的客戶端。因此,Hive需要配置一些HBase的jar包。
# hive需要的hbase的jar包
export HBASE_HOME=/usr/hdp/2.5.3.0-37/hbase
export HIVE_HOME=/usr/hdp/2.5.3.0-37/hive
ln -s $HBASE_HOME/lib/hbase-common-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-common-1.1.2.2.5.3.0-37.jar
ln -s $HBASE_HOME/lib/hbase-server-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-server-1.1.2.2.5.3.0-37.jar
ln -s $HBASE_HOME/lib/hbase-client-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-client-1.1.2.2.5.3.0-37.jar
ln -s $HBASE_HOME/lib/hbase-protocol-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-protocol-1.1.2.2.5.3.0-37.jar
ln -s $HBASE_HOME/lib/hbase-it-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-it-1.1.2.2.5.3.0-37.jar
ln -s $HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $HIVE_HOME/lib/htrace-core-3.1.0-incubating.jar
ln -s $HBASE_HOME/lib/hbase-hadoop2-compat-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-hadoop2-compat-1.1.2.2.5.3.0-37.jar
ln -s $HBASE_HOME/lib/hbase-hadoop-compat-1.1.2.2.5.3.0-37.jar $HIVE_HOME/lib/hbase-hadoop-compat-1.1.2.2.5.3.0-37.jar

2.Hive中建表

2.1 管理表 - Hive資料儲存指定在HBase上

# 1. hive上建立管理表
hive (default)> create table hbase_table(key int,value string)
              > stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
              > with serdeproperties("hbase.columns.mapping"=":key,cf1:val")
              > tblproperties("hbase.table.name"="xyz");
OK
Time taken: 3.937 seconds

# 2. hbase上出現了hive關聯的hbase表
hbase(main):001:0> list
TABLE                                                                                                                                                                         
xyz                                                                                      
1 row(s) in 0.2200 seconds

=> ["xyz"]

# 3. hive表插入資料
hive (default)> insert into hbase_table values (1,'smith'),(2,'allen'),(3,'black');

# 4. 檢視hbase,對應表也有了資料
hbase(main):001:0> scan 'xyz'
ROW                     COLUMN+CELL                                                      
 1                      column=cf1:val, timestamp=1540472134371, value=smith             
 2                      column=cf1:val, timestamp=1540472134371, value=allen             
 3                      column=cf1:val, timestamp=1540472134371, value=black             
3 row(s) in 0.2210 seconds

2.2 外部表 - 現有一個HBase表,需要對錶中資料進行分析

# 1.檢視hbase中已存在的表emp
hbase(main):004:0> scan 'emp'
ROW                     COLUMN+CELL                                                      
 10001                  column=info:address, timestamp=1540373935927, value=hebei sjz yuh
                        ua                                                               
 10001                  column=info:age, timestamp=1540373917799, value=22               
 10001                  column=info:name, timestamp=1540373904273, value=zhangsan        
 10002                  column=info:address, timestamp=1540373978440, value=henan zhengzh
                        ou erqi                                                          
 10002                  column=info:age, timestamp=1540373956551, value=24               
 10002                  column=info:name, timestamp=1540373947414, value=lisi            
 10003                  column=info:age, timestamp=1540395652596, value=beijing chaoyang 
 10003                  column=info:name, timestamp=1540395652596, value=wangwu          
 10004                  column=info:age, timestamp=1540395652596, value=shanghai chongmin
                        g                                                                
 10004                  column=info:name, timestamp=1540395652596, value=zhengliu        
 10005                  column=info:age, timestamp=1540395652596, value=anhui hefei      
 10005                  column=info:name, timestamp=1540395652596, value=zhaoqi          
5 row(s) in 0.0280 seconds

# 2.建立外表
hive (default)> create external table hbase_emp_table(
              > id int,name string,age int,address string) 
              > stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
              > with serdeproperties
              > ("hbase.columns.mapping"=":key,info:name,info:age,info:address") 
              > tblproperties("hbase.table.name"="emp");

# 3.查看錶資料,結果表中有hbase表的資料
hive (default)> select * from hbase_emp_table;
OK
10001	zhangsan	22	hebei sjz yuhua
10002	lisi	24	henan zhengzhou erqi
10003	wangwu	NULL	NULL
10004	zhengliu	NULL	NULL
10005	zhaoqi	NULL	NULL

3.應用場景

日誌檔案
    |    匯入到hive表中
hive-table
    |    hive倉庫儲存資料
hive-hbase-table
    |    insert ... select ...(設計rowkey)  from hive-table  
load
    |    實際儲存在hbase上
hbase