8.HBase_應用_整合Hive
阿新 • • 發佈:2018-11-06
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