说干就干, 让我们试一个简单的例子。
首先在HBase里面建一个表, 名为 student, 包含 id 和 name 两个column.
hbase shell
create 'student', 'id', 'name'
向表中插入两行数据
put 'student', 'row1', 'id:val', '1'
put 'student', 'row1', 'name:val', 'Tony'
put 'student', 'row2', 'id:val', '2'
put 'student', 'row2', 'name:val', 'Mike'
注意:在插入数据的时候一定要指定column (如id:val, name:value) 直接使用column family (如 id, name) 去存数据会导致后面Hive 建表的时候有问题。
扫描此表, 确定数据已经插入
scan 'student'
ROW COLUMN+CELL
row1 column=id:val, timestamp=1384939342989, value=1
row1 column=name:val, timestamp=1384939365511, value=Tony
row2 column=id:val, timestamp=1384939351444, value=2
row2 column=name:val, timestamp=1384939379245, value=Mike
建立Hive 对HBase的访问
参考:
这里我们使用的是Pivotal 公司的Pivotal Hadoop,
hive --auxpath /usr/lib/gphd/hive/lib/hive-hbase-handler-0.11.0-gphd-2.1.1.0.jar,/usr/lib/gphd/hbase/hbase.jar,/usr/lib/gphd/zookeeper/zookeeper.jar,/usr/lib/gphd/hbase/lib/guava-11.0.2.jar -hiveconf hbase.zookeeper.quorum=centos62-3,centos62-4,centos62-5
解释一下参数:
后
面三个jar 包主要是Hive 访问时需要用到的,
hhbase.zookeeper.quorum=centos62-3,centos62-4,centos62-5
是指hbase使用的是这三个zookeeper, 这样就不用指定hbase master了。
这个命令运行完以后会打开Hive 的输入终端。
从Hive建立可以访问HBase的外部表
CREATE EXTERNAL TABLE student(key string, id int, name string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "id:val,name:val")
TBLPROPERTIES("hbase.table.name" = "student")
扫描student表, 确认访问成功:
hive>select * from student
OK
row11Tony
row22Mike
但是此时这个表实际上是一个虚拟表, 实际的数据还在HBase中。 下面需要在Hive中另建一个结构一样的空表, 再把数据导出来。
Hive中建立一个新的空表
CREATE TABLE new_student (
key string,
id INT,
name STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
将数据从HBase中导入到新的Hive表中
hive>INSERT OVERWRITE TABLE new_student SELECT * FROM student
确认新表中数据正确:
hive>select * from new_student
OK
row11Tony
row22Mike
从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字)LOAD DATA LOCAL INPATH 'dim_csl_rule_config.txt' OVERWRITE into table dim.dim_csl_rule_config
--从查询语句给table插入数据
INSERT OVERWRITE TABLE test_h02_click_log PARTITION(dt) select *
from stage.s_h02_click_log where dt='2014-01-22' limit 100
一个是通过select hql进行插入已经存在的hive表insert overwrite table table_name select ... from ...
一个是load数据到表中
load data [local] inpath .... overwrite into table ....
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)