分享

用sqoop从mysql导入hbase问题

本帖最后由 evababy 于 2018-7-30 16:57 编辑

导入数据过程没问题,当增量导入数据时,存在更新数据的情况,如mysql某列变成null,此时无法导入hbase中,hbase中此列没有被更新,数据依然是历史数据,请问如何能解决这个问题?

用的是sqoop1.4.5  hbase0.98   
发现bug https://issues.apache.org/jira/browse/SQOOP-3149
无法将null数据添加到hbase中
1.4.7修复了,可是又需要hbase1.x版本,太他妈的蛋疼了


补充内容 (2018-7-31 10:07):
用 sqoop 3149 修正版本,更改了hbase0.98的支持,包含4个原文件,有特殊需求的小伙伴可再次优化,
核心思路,数据为空后删除词条数据列,可能对于第一次导入大量空列造成性能上的损耗,不过貌似没什么好办法

补充内容 (2018-7-31 10:08):
文件下载地址
http://pan.baidu.com/s/1_O86mIjlcffMzGvvmJeC5Q

补充内容 (2018-7-31 18:00):
大量测试发现这个版本效率比以前低了很多,优化版本,合并操作 避免多次操作put  和  delete
https://pan.baidu.com/s/1nNkHIH9JqmxbxiUhzMaU1Q

补充内容 (2018-8-2 09:46):
5楼 有性能测试对比


补充内容 (2018-8-23 15:39):
终极版本:https://pan.baidu.com/s/1UICzROSPK2aQppa1UVVp0A
考虑首次导入可能造成严重的性能问题,增加可控制参数,默认true:hbase对null数据进行delete,参数详见文档read.txt

已有(5)人评论

跳转到指定楼层
bioger_hit 发表于 2018-7-30 15:36:26
试试加上下面内容
--null-string '\\N'

--null-non-string '\\N'

回复

使用道具 举报

evababy 发表于 2018-7-30 15:47:43
bioger_hit 发表于 2018-7-30 15:36
试试加上下面内容
--null-string '\\N'

试验过了,null列数据还是没有更新,还是老的时间戳数据
回复

使用道具 举报

w517424787 发表于 2018-7-31 13:39:36
可以用Spark自己写个工具读取mysql数据,在插入到HBase中,应该不难!
回复

使用道具 举报

evababy 发表于 2018-8-2 09:43:29
由于测试机器时虚拟机,耗时存在一定误差,但基本能体现出来性能的差异
1.png
结论:
1、null列进行删除处理对性能损耗最为严重
2、对put操作进行合并,性能可以得到小程度提升
3、对del操作进行合并,性能提升最明显!

至此,翻越过其他版本代码,包括对del动作的控制,是否进行忽略处理等功能,因代码复杂程度较低,小伙伴们可以根据自身需求完成功能扩展。
回复

使用道具 举报

pig2 发表于 2018-8-2 10:03:45
evababy 发表于 2018-8-2 09:43
由于测试机器时虚拟机,耗时存在一定误差,但基本能体现出来性能的差异

结论:

赞,老铁。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条