一、簡單介紹
hive的元數據保存在metastore里面,真實的數據一般位於hdfs中,可以通過hql來對數據進行分析。hbase中的數據也是存放在hdfs上的,可不可以使用hive來分析hbase中的數據呢?
二、hive表到hbase表的映射
2.1hbase表t1的結構和其中的數據如下圖
2.2創建hive表映射到hbase的表
首先輸入下面的命令進入hive的客戶端
hive --auxpath /usr/local/hive-0.14.0/lib/hive-hbase-handler-0.14.0.jar,/usr/local/hive-0.14.0/lib/zookeeper-3.4.5.jar -hiveconf hbase.master=hadoop26:60000 -hiveconf hbase.zookeeper.quorum=hadoop26
使用下面的語句創建hive表,數據是存儲在hbase中的
CREATE EXTERNAL TABLE h1
(id string, name string,age int,gender string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f1:age,f1:gender") TBLPROPERTIES("hbase.table.name" = "t1");
三、使用hql來查詢hbase中的數據
向hbase表t1中插入數據
put 't1','4','f1:name','zhaoliu'
再次從hive中查詢
hbase中的數據和hive是同步的,這也說明hive表的數據是位於hbase中的
四、使用hive向hbase中插入數據
4.1首先是需要創建一個hive臨時表
create table h1_tmp
(id int,name string,age int,gender string)
row format delimited
fields terminated by '\t';
4.2向臨時表中批量的上傳數據
load data local inpath '/root/temp.txt' into table h1_tmp;
4.3把臨時表h1_tmp的數據插入到目標表
insert into table h1 select * from h1_tmp;
五、注意
如果hbase中添加新的列,那么hive中是查詢不到的。
因為hive創建表的字段沒有hbase新列的映射。如下面的情況。
put 't1','4','f1:birthday','1993'
但是在hive中查不到