用sqoop从mysql导入hbase问题
本帖最后由 evababy 于 2018-7-30 16:57 编辑导入数据过程没问题,当增量导入数据时,存在更新数据的情况,如mysql某列变成null,此时无法导入hbase中,hbase中此列没有被更新,数据依然是历史数据,请问如何能解决这个问题?
用的是sqoop1.4.5hbase0.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 试试加上下面内容
--null-string '\\N'
--null-non-string '\\N'
bioger_hit 发表于 2018-7-30 15:36
试试加上下面内容
--null-string '\\N'
试验过了,null列数据还是没有更新,还是老的时间戳数据
可以用Spark自己写个工具读取mysql数据,在插入到HBase中,应该不难! 由于测试机器时虚拟机,耗时存在一定误差,但基本能体现出来性能的差异
结论:
1、null列进行删除处理对性能损耗最为严重
2、对put操作进行合并,性能可以得到小程度提升
3、对del操作进行合并,性能提升最明显!
至此,翻越过其他版本代码,包括对del动作的控制,是否进行忽略处理等功能,因代码复杂程度较低,小伙伴们可以根据自身需求完成功能扩展。
evababy 发表于 2018-8-2 09:43
由于测试机器时虚拟机,耗时存在一定误差,但基本能体现出来性能的差异
结论:
赞,老铁。
页:
[1]