如何用Hive 往HBase里面插入大量的数据

如何用Hive 往HBase里面插入大量的数据,第1张

利用选项2, 先打通Hive对HBase指定表的全表访问, 再建立一个新的空表, 把查询出来的数据全部导入到新表当中, 以后的所有数据分析 *** 作在新表中完成。

说干就干, 让我们试一个简单的例子。

首先在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 ....


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11415018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存