码迷,mamicode.com
首页 > 数据库 > 详细

多种字符集并存情况下sqoop从MySQL导入HBase中文乱码解决

时间:2014-09-11 19:26:02      阅读:573      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   os   ar   for   数据   sp   代码   

最近在做binlog日志采集同步到数据平台的事。刚开始需要借助sqoop将从库数据表数据初始化到hbase中,整个过程都需要自动化进行,尽量减少人为干预。但是,由于历史原因,线上存在两种字符集格式的数据库(表),而导入到hbase的数据我们需要统一采用utf-8格式存储。sqoop直接导入的话,没法控制中文字符转码工作。所以需要对sqoop源码进行简单改动支持这种方式。

大体思路是,通过定义一个接口可以从InformationSchema库的tables中获取某个表的table-collation。这样做的原因是我们关注的字符集粒度确定到表级别, 因为有些库虽然是utf但是表确是latin1。将获取到的table-collation放入ImportJobContext中,进而将其放入HBaseImportJob的conf中。之后通过HBasePutProcessor将其设入ToStringPutTransformer的tableCollation属性中,最后在完成Put对象组装过程中,就会利用上该属性判断是否需要针对latin1和utf8的字符串数据进行转码。

同时还要注意在开始时,获取到数据库连接的方法中,需要首先执行一个query  "set names utf8"。

具体代码可以参考:http://url.cn/UmWQUd ,全卷搜索huanggang,可以看到所有改动的代码片段。

多种字符集并存情况下sqoop从MySQL导入HBase中文乱码解决

标签:style   http   io   os   ar   for   数据   sp   代码   

原文地址:http://blog.csdn.net/huanggang028/article/details/39209317

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!