设为首页 加入收藏

TOP

利用sqoop从mysql向hbase导数据(拼接mysql多字段做为hbase rowkey)
2019-04-29 01:49:05 】 浏览:64
Tags:利用 sqoop mysql hbase 数据 拼接 做为 rowkey

说说自己的思路,路过的朋友请帮忙指正或提新建议,万分感谢。


场景介绍:

自己在mysql中有1张表,每天2GB左右的统计数据,,因为资源原因需定期删除。

但有其他场景需要保存1年以上,所以想把数据备份在hbase里,同时还要能支持准实时查询。


选择Sqoop原因:

希望以后能有一个较通用的数据迁移方案(在mysql和hbase/hive/hdfs之间),尽量减少重复代码的开发与维护。


测试场景(已验证)

假设在数据库实例 logdb 中有一张表:system_log, 包含如下五个字段:

id: int(12) PRI AUTO_INCREMENT (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)

mytime: datetime (格式:2015-12-12 12:12:12)

mytype: varchar(128)

value1: varchar(256)

value2: varchar(256)

为了提高查询效率,我设计hbase rowkey如下: mytype_mytime_id, 列族(cf)中有两列:cf:value1, cf:value2。因为我的查找需求就是查询某个mytype在指定时间段内的属性值。


具体测试步骤:

<1> 创建一张临时表 system_log_tmp

CREATE TABLE system_log_tmp LIKE system_log;

<2> 将昨日增量数据copy至该临时表

INSERT system_log_Tmp SELECT * FROM system_log

<3> 给临时表添加新列 hbase_row_key

ALTER TABLE system_log_tmp ADD COLUMN hbase_row_key varchar(256)

<4> 在临时表中通过拼接对应三列来补全新列内容(为方便查询,ID字段统一为11位,不够右侧补零;为节省空间,mytime字段改为20151212121212样式)

UPDATE system_log_tmp SET hbase_row_key=concat( type, ':', date_format(time, '%Y%m%d%H%i%s'), ':', right( concat('000000000000', id), 12))

<5> 运行sqoop命令,将数据从临时表导入hbase:

./bin/sqoop import --connect jdbc:mysql://testPC:3306/logdb --table system_log_tmp --hbase-table system_log --column-family cf --hbase-row-key hbase_row_key --hbase-create-table --username 'root' -P;

如果第五步不成功,请检查sqoop是否安装正确,以及Hadoop Resource Manager是否启动(可通过hadoop web UI排查错误)。

最后简单介绍下第<5>步命令中的参数:

--connect: 指明源db为testPC上的logdb

--table: 指明源表为logdb中的system_log_tmp

--hbase-table: 指明hbase中的目标表名称

--column-family: 指明hbase中目标表内的列族

--hbase-row-key: 指明要用mysql中的哪一列作为hbase表中的rowkey

--hbase-create-table: 指明是否需要创建hbase表

--username: 指明mysql账户

--P:会提示输入mysql账户密码


IT人的微信自媒体--- 杰天空, 走在寻找创意的路上

发掘创意,点缀生活,品味人生。
请搜索微信订阅号:
jksy_studio,或者微信扫描头像二维码添加关注


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hbase   snapshot 下一篇Hbase实践将所有info列簇下的name..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目