2.8.12 hadoop体系之离线计算-HBase数据库-HBase高级-HBase与Hive交互

目录

0.HBase与Hive的对比

0.1 Hive(分析框架)

0.2 HBase(存储框架)

1.前置准备

2.Hive读取HBase中的数据

3.Hive写入数据到HBase中


0.HBase与Hive的对比

0.1 Hive(分析框架)

(1) 数据仓库 Hive 的本质其实就相当于将 HDFS 中已经存储的文件在 Mysql 中做了一个双射关系,以方便使用 HQL 去管理查询。

(2) 用于数据分析、清洗 Hive 适用于离线的数据分析和清洗,延迟较高。

(3) 基于 HDFS、MapReduce Hive 存储的数据依旧在 DataNode 上,编写的 HQL 语句终将是转换为 MapReduce 代码执行。

0.2 HBase(存储框架)

(1) 数据库是一种面向列族存储的非关系型数据库。

(2) 用于存储结构化和非结构化的数据适用于单表非关系型数据的存储,不适合做关联查询,类似 JOIN 等操作。

(3) 基于 HDFS 数据持久化存储的体现形式是 HFile,存放于 DataNode 中,被 ResionServer 以 region 的形式进行管理。

(4) 延迟较低,接入在线业务使用面对大量的企业数据,HBase 可以直线单表大量数据的存储,同时提供了高效的数据访问速度。

1.前置准备

jdk 1.8

hadoop 2.7.7集群

zookeeper 3.5.7集群

hbase 1.4.13集群

mysql 5.3 node01单机

hive 2.3.6 node01单机(mysql-connector-java-8.0.15)

2.Hive读取HBase中的数据

 先在HBase上创建一张表hbase_hive(方便测试使用默认命名空间default)

hbase(main):025:0> create 'hbase_hive','info'

向hbase_hive表中插入两条测试数据

hbase(main):031:0> put 'hbase_hive','user001','info:name','xiaokang'
hbase(main):032:0> put 'hbase_hive','user001','info:age',18
hbase(main):033:0> put 'hbase_hive','user002','info:name','xiaokang1'
hbase(main):034:0> put 'hbase_hive','user002','info:age',19

 在Hive中创建外部表hive_user关联到HBase的hbase_hive

create external table hive_user(userid string,name string,age int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,info:name,info:age") tblproperties("hbase.table.name" = "hbase_hive");

读取Hive中表,测试

hive (default)> select * from hive_user;
OK

Time taken: 0.989 seconds, Fetched: 1 row(s)

HBase的hbase_hive表中再添加一条数据进行读取测试

hbase(main):033:0> put 'hbase_hive','user003','info:name','xiaokang2'
hbase(main):034:0> put 'hbase_hive','user003','info:age',20

hive (default)> select * from hive_user;
OK
hive_user.userid        hive_user.name  hive_user.age
user001 xiaokang        18
user002 xiaokang1       19
user003 xiaokang2       20
Time taken: 0.471 seconds, Fetched: 3 row(s)

3.Hive写入数据到HBase中

先在HBase上创建一张表from_hive(数据导入到此表中)

hbase(main):025:0> create 'from_hive','info'

Hive中创建外部表hive_user_hbase并关联到HBase的from_hive

create external table hive_user_hbase(userid string,name string,age int) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,info:name,info:age") tblproperties("hbase.table.name" = "from_hive");

Hive中创建临时表(用于将数据写入到hive_user_hbase)

create temporary table tmp_user(userid string,name string,age int) row format delimited fields terminated by '\t';

Hive中,向临时表中加载数据

load data local inpath '/home/xiaokang/user.txt' into table tmp_user;

#查询验证数据是否加载成功
hive (default)> select * from tmp_user;
OK
tmp_user.userid tmp_user.name   tmp_user.age
user111 xiaokang        18
user222 xiaokang        19
user333 xiaokang        20
user444 xiaokang        21
Time taken: 0.379 seconds, Fetched: 4 row(s)

Hive向HBase中写入数据

hive (default)> insert into table hive_user_hbase select * from tmp_user;

HBase中验证数据是否写入

#扫描全表(大数据量的情况下不推荐,会造成机器崩溃)
hbase(main):041:0> scan 'from_hive'
ROW                                 COLUMN+CELL
 user111                            column=info:age, timestamp=1585814173216, value=18
 user111                            column=info:name, timestamp=1585814173216, value=xiaokang
 user222                            column=info:age, timestamp=1585814173216, value=19
 user222                            column=info:name, timestamp=1585814173216, value=xiaokang
 user333                            column=info:age, timestamp=1585814173216, value=20
 user333                            column=info:name, timestamp=1585814173216, value=xiaokang
 user444                            column=info:age, timestamp=1585814173216, value=21
 user444                            column=info:name, timestamp=1585814173216, value=xiaokang
4 row(s) in 0.0320 seconds

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值