《转载,亲测通过》hbase hive 数据表映射关联

本文介绍如何配置Hive与HBase的整合环境,并通过实际案例演示数据同步及关联查询过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Hive整合HBase的环境配置以及测试

1,环境配置

因为Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-.jar工具类来实现。所以只需要将hive的 hive-hbase-handler-.jar 复制到hbase/lib中就可以了。
切换到hive/lib目录下
输入:

cp hive-hbase-handler-*.jar /opt/hbase/hbase1.2/lib

这里写图片描述
注: 如果在hive整合hbase中,出现版本之类的问题,那么以hbase的版本为主,将hbase中的jar包覆盖hive的jar包。

2,hive和hbase测试

在进行测试的时候,确保hadoop、hbase、hive环境已经成功搭建好,并且都成功启动了。
打开xshell的两个命令窗口
一个进入hive,一个进入hbase

6.2.1在hive中创建映射hbase的表

在hive中创建一个映射hbase的表,为了方便,设置两边的表名都为t_student,存储的表也是这个。
在hive中输入:

create table t_student(id int,name string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,st1:name") tblproperties("hbase.table.name"="t_student","hbase.mapred.output.outputtable" = "t_student");

说明:第一个t_student 是hive表中的名称,第二个t_student是定义在hbase的table名称 ,第三个t_student 是存储数据表的名称("hbase.mapred.output.outputtable" = "t_student"这个可以不要,表数据就存储在第二个表中了) 。
(id int,name string) 这个是hive表结构。如果要增加字段,就以这种格式增加。如果要增加字段的注释,那么在字段后面添加comment ‘你要描述的’。
例如:
create table t_student(id int comment ‘StudentId’,name string comment ‘StudentName’)
org.apache.hadoop.hive.hbase.HBaseStorageHandler 这个是指定的存储器。
hbase.columns.mapping 是定义在hbase的列族。
例如:st1就是列族,name就是列。在hive中创建表t_student,这个表包括两个字段(int型的id和string型的name)。 映射为hbase中的表t_student,key对应hbase的rowkey,value对应hbase的st1:name列。

表成功创建之后
在hive、hbase分别中查看表和表结构
hive中输入

show tablesdescribe t_student;

hbase输入:

list
describe ‘t_student’

这里写图片描述

这里写图片描述
可以看到表已经成功的创建了

6.2.2数据同步测试

进入hbase之后
在t_student中添加两条数据 然后查询该表

put 't_student','1001','st1:name','zhangsan'
put 't_student','1002','st1:name','lisi'
scan 't_student'

这里写图片描述

然后切换到hive中
查询该表
输入:

select * from t_student;

这里写图片描述

然后在hive中删除该表
注:因为做测试要看结果,所以将表删除了。如果同学们要做测试的话,是没有必要删除该表的,因为在后面还会使用该表。

然后查看hive和hbase中的表是否删除了
输入:

drop table t_student;

这里写图片描述

这里写图片描述
通过这些可以看到hive和hbase之间的数据成功同步!

6.2.3关联查询测试
hive外部表测试

先在hbase中建一张t_student_info表,添加两个列族
然后查看表结构
输入:

create 't_student_info','st1','st2'
describe 't_student_info'

这里写图片描述

然后在hive中创建外部表
说明:创建外部表要使用EXTERNAL 关键字
输入:

create external table t_student_info(id int,age int,sex string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,st1:age,st2:sex") tblproperties("hbase.table.name"="t_student_info");

这里写图片描述

然后在t_student_info 中添加数据

put 't_student_info','1001','st2:sex','man'
put 't_student_info','1001','st1:age','20'
put 't_student_info','1002','st1:age','18'
put 't_student_info','1002','st2:sex','woman'

这里写图片描述

然后在hive中查询该表
输入:

select * from t_student_info;

这里写图片描述

查询到数据之后,然后将t_student 和t_student_info进行关联查询。
输入:

select * from t_student t join t_student ti where t.id=ti.id ;

这里写图片描述
说明:通过关联查询,可以得出表之间是可以关联查询的。但是明显看到hive 使用默认的mapreduce 作为引擎是多么的慢。。。

其他说明:
由于自己的虚拟机配置实在太渣,即使调大reduce内存,限制每个reduce处理的数据量,还是不行,最后没办法使用公司的测试服务进行测试。
在查询一张表的时候,hive没有使用引擎,因此相对比较快,如果是进行了关联查询之类的,就会使用引擎,由于hive默认的引擎是mr,所以会很慢,也和配置有一定关系,hive2.x以后官方就不建议使用mr了。

### HiveHBase 的表映射方法 HiveHBase 是两种常见的大数据存储和查询工具,它们可以通过特定的方式实现相互之间的表映射。以下是关于如何在 HiveHBase 之间进行表映射的方法及其示例。 #### 映射方式概述 Hive 可以通过 `STORED BY` 子句指定使用 `org.apache.hadoop.hive.hbase.HBaseStorageHandler` 来与 HBase 进行集成[^1]。这种方式允许用户定义一个 Hive 表来访问已经存在的 HBase 表或者将 Hive 数据写入到新的 HBase 表中。 --- #### 创建 Hive 表并将其映射到已有的 HBase 表 假设有一个名为 `crawl:user_regionalization` 的 HBase 表,可以按照如下方式进行 Hive 表的创建: ```sql CREATE TABLE hive_user_regionalization ( key STRING, column_family_data MAP<STRING, STRING> ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,family_name:") TBLPROPERTIES ("hbase.table.name" = "crawl:user_regionalization"); ``` 上述 SQL 定义了一个 Hive 表,并指定了它对应的 HBase 表名称以及列族的映射关系[^2]。 --- #### 将 Hive 表的数据导入到 HBase 表 如果需要将 Hive 表中的数据插入到 HBase 表中,则可以采用以下语句作为参考: ```sql INSERT OVERWRITE TABLE hbase_comments SELECT ROW_NUMBER() OVER (ORDER BY videoId) AS key, videoId, uploader, age, category, length, views, rate, ratings, comments, relatedId FROM test1.video_comments; ``` 此语句实现了从 `test1.video_comments` 到 `hbase_comments` 的数据迁移操作[^4]。 --- #### 使用 HappyBase 库连接 HBase 并验证数据 对于开发者来说,Python 提供了 HappyBase 库用于简化与 HBase 的交互过程。下面是一个简单的例子展示如何读取刚刚由 Hive 插入的数据: ```python import happybase connection = happybase.Connection('localhost') table = connection.table('crawl:user_regionalization') row_key = b'example_row_key' data = table.row(row_key) print(data[b'family_name:column_qualifier']) ``` 这段代码展示了如何通过 Python 脚本获取来自 HBase 的记录[^3]。 --- #### 注意事项 当尝试建立 HiveHBase关联时需要注意一些细节问题,比如字段类型的匹配、分区设置的影响等。这些因素可能会影响最终的结果准确性或性能表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值