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