hive中的数据同步到hbase

2024-03-20 1317阅读

温馨提示:这篇文章已超过368天没有更新,请注意相关的内容是否还可用!

hive中的数据同步到hbase

工作中遇到了这个工作,就是将hive中的数据同步到hbase中,然后java通过hbase相关的API来访问hbase中的数据。

关于hadoop,hive,hbase这三个技术栈我写了两篇博客简单的分享了我对这三个技术栈的一些看法,在我目前的认知里,hadoop提供hdfs这个组件来存储大数据量的数据(相比于mysql,oracle这些关系型数据库),然后提供了MapReduce这个组件来对这些数据进行操作,通过yarn这个组件来调度这些操作数据的动作。

但是MapReduce操作数据的命令比较复杂,学习成本较高,这时候hive就可以解决这个问题了,hive是基于hadoop的,通过类sql(HQL)的方式就可以操作这些hdfs中的数据了,这对于经常使用msyql,oracle的人来说,这了解起来就相对容易了。

通过hive sql的方式处理hadoop中的数据速度不是很快,不能满足业务上的需求,至于通过MapReduce的方式来操作数据有多快,这个我没有了解过,不清楚。这时候hbase就解决了这个问题,hbase是一个K-V格式的数据库,处理数据的速度较快,目前业务上也是通过查询hbase。

以上就是我对这三者的一些粗浅理解,今天要介绍的就是如何将hive中的数据同步到hbase中,既然想通过hbase来处理数据,那么hbase中的数据势必要从hive中拿过来,我今天介绍的就是通过外部表的方式将hive中的数据同步到hbase中。

既然提到了外部表,那就会有内部表的概念,其实这两种方式都是hive表和hbase表的一个映射,通过内部表的方式,如果删除了hive表,那对应的hbase表也会删除;外部表的方式就是在删除hive表的时候不会删除对应的hbase表。

好了,想介绍的都说完了,我下面的操作都是基于自己电脑上的虚拟机,不是集群的操作,虚拟机上启动habse,hadoop,和hive。

通过外部表的方式,首先在hbase中要先存在一张表

hive中的数据同步到hbase

我这里已经建好了这各表,namespace(命名空间)是test,表名是gdp,有三个列,c1,c2,c3。具体的hbase shell里创建表的命令可以自行搜一下,后面我可能也会写一遍来介绍hbase shell命令,hive sql,和操作hdfs的命令。

在habse里创建好表之后,就可以去hive中创建对应的映射表了

hive中的数据同步到hbase

hive中我也都创建好了表,其中t_gdp是原始数据表,tmp_gdp_table是和hbase中gdp表关联的外部表,我这里因为只是一个简单的示范,只是将t_gdp表中的数据insert到了tmp_gdp_table表中,正常的业务中,可能是查询了多个表,通过sql处理将数据存到tmp_gdp_table中,然后通过外部表映射的方式同步到habse的gdp表中。

下面是hive中创建外部关联表的命令:

CREATE EXTERNAL TABLE tmp_gdp_table(key varchar(100), province varchar(100),city varchar(100),gdp double) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,c1:province,c2:city,c3:gdp") 
TBLPROPERTIES ("hbase.table.name" = "test:gdp", "hbase.mapred.output.outputtable" = "test:gdp");

创建好关联表之后,将t_gdp中的数据insert到tmp_gdp_table表中:

insert into tmp_gdp_table (select f_year,f_province,f_city,f_gdp from t_gdp);

在实际的业务开发中一般是通过定时任务执行脚本的方式来执行上面的sql:

脚本命令如下:

#!/bin/bash
hive -e 'insert into tmp_gdp_table (select f_year,f_province,f_city,f_gdp from t_gdp);'

通过执行脚本,在实际业务开发中就可以通过linux里的crontab或者公司自己的调度平台来执行了。

下面看一下对应表中的数据:

原始数据表t_gdp中的数据:

hive中的数据同步到hbase

再看一下hive中的关联表tmp_gdp_table中的数据:

hive中的数据同步到hbase

最后看一下hbase中的表test:gdp中的数据:

hive中的数据同步到hbase

可以看到已经将hive中的数据同步到了habse中,再往下就可以通过java来访问hbase中的这张表了,就可以向处理mysql中的数据一样来执行对应的业务逻辑了。

# 是不是一定要有所失,才能有所悟

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]