优雅的将hbase的数据导入hive表

 

 

                   优雅的将hbase的数据导入hive

背景

 

Hive是一个构建在Hadoop基础设施之上的数据仓库。通过Hive可以使用HQL语言查询存放在HDFS上的数据。HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce.

 

 HBase是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务。

 

hive帮助熟悉SQL人运行MapReduce任务。因为它是JDBC兼容的,同时,它也能够和现存的SQL工具整合在一起。HBase通过存储key/value来工作。它支持四种主要的操作:增加或者更新行,查看一个范围内的cell,获取指定的行,删除指定的行、列或者是列的版本。

 

由于hive目前不支持更新操作(非实时性)。所以在生产环境上不能直接将数据写入hive表,一般都是先将数据写到hbase上,而在大数据的计算及统计的时候,hive的读写速率大大优于hbase表,在处理大数据时(几TB的数据量),将会大大的提高挖掘的效率。

所以,比较常规的做法都是在生产环境下,将数据写入hbase表,再在数据挖掘的时候,将数据导入hive表,进行数据分析统计操作。

那怎么将数据从hbase表转入hive表里面呢,本文将介绍以下几种办法。

 

转换

hbase的数据转换成hive,笔者知道的就有以下几种转换方式,下面一道来。

创建hive外部关联表

在创建hive表的时候,指定与hbase某个表做为关联,如下所示的建表语句

CREATE TABLE hive_table_hbase(key int, value1 string, value2 int, value3 int)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler 
WITH SERDEPROPERTIES (  "hbase.columns.mapping"=":key,a:b,a:c,d:e )

TBLPROPERTIES("hbase.table.name" = "some_existing_table");;  

 

上面的语句翻译为:创建一个hive_table_hbase为名称的hive表,与hbasesome_existing_table表作关联,具体关联方式为字段对应:

 

hive_table_hbas

some_existing_table

key

:key

value1

a:b

value2

a:c

value3

d:e

 

此种关联的好处是,将hbasehive实时关联,hbase只要有数据更新,hive表当然就有了更新,不过要说明的时,此时,hive并没有分配空间去存储数据,仅仅只是做了一个映射。当然了,在使用大数据分析的时候,效率是很不好的。

 

hbase将数据导入hive

此种实现思路是将hbase表的数据转成RDD(可查看上篇文章)模型,在将RDD转成DataFrame模型,注册Shark临时表,在就数据一次从临时表中,导入到hive表中

 

如下所示

<![endif]><![if !vml]>圆角矩形: Shark临时表<![endif]><![ !>圆角矩形: Hive数据<!<![if !vml]>圆角矩形: DataFrame<>![f圆角矩形: RDD<!圆角矩形: Hbase数据d:e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

此种转换,只是在hbase表数据导入到hive表的时候,会花费一定时间,但为后面的密集的hive表查询,大大增加了效率。

 

 

 

结论

在数据量比较小的时候,比如只有10几个G以下时,第一种效率比较高,因为没有转换的时间,当数据量超过10几个G后,且后续需要很密集的查询,当然要选第二种转换方式,一次转换,终生无忧!!

极点科技

诚信 专注 创新

 

转载于:https://www.cnblogs.com/JDtech/p/5348596.html

你可以使用Sqoop来将HBase数据导入到MySQL中,Sqoop是一个用于在Apache Hadoop和结构化数据存储(如Apache HBase和Apache Hive)之间传输数据的工具。以下是一些步骤: 1. 确保你已经安装了Sqoop,并且已经配置好了HBase和MySQL的连接。 2. 创建一个HBase并将数据存储在其中。 3. 将HBase中的数据导出到一个文件中,可以使用以下命令: ``` $ hbase org.apache.hadoop.hbase.mapreduce.Export <tablename> <outputdir> <scan> ``` 其中\<tablename>是你要导出的的名称,\<outputdir>是输出文件的目录,\<scan>是一个扫描器配置字符串,用于指定要导出的数据范围。 4. 现在你有了一个包含HBase数据的文件,你可以使用Sqoop将其导入到MySQL中。以下是一个示例命令: ``` $ sqoop import --connect jdbc:mysql://<mysql-hostname>/<database> --username <username> --password <password> --table <tablename> --m 1 --fields-terminated-by '\t' --lines-terminated-by '\n' --null-string '\\N' --null-non-string '\\N' --input-fields-terminated-by '\t' --input-lines-terminated-by '\n' --input-null-string '\\N' --input-null-non-string '\\N' --target-dir <inputdir> ``` 其中\<mysql-hostname>是你的MySQL主机名,\<database>是你要导入数据数据库名称,\<username>和\<password>是你的MySQL用户名和密码,\<tablename>是你要导入数据的名称,\<inputdir>是包含你想要导入数据的目录。 请注意,这个命令使用了很多参数来指定输入和输出文件的格式,包括字段分隔符、行分隔符、空值字符串和空值非字符串。 5. 运行Sqoop命令后,数据将被导入到MySQL中。你可以使用MySQL客户端验证导入数据是否正确。 希望这些步骤对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值