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

最近在做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,可以看到所有改动的代码片段。

时间: 2024-10-12 04:09:49

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

Linux下Tomcat向MySQL插入数据中文乱码解决办法

Linux下Tomcat向MySQL插入数据中文乱码解决办法 一.问题 在windows上面使用eclipse开发的项目在windows上面运行一切正常,部署到腾讯云时出现向MySQL数据库中插入数据是中文乱码 二.解决办法 1.尝试一直接在linux上面使用insert语句插入中文,正常2.尝试二在tomcat配置文件server.xml中加入useBodyEncodingForURI="true",不行3.尝试三在tomcat配置文件server.xml中再加入URIEncodin

mysql使用utf8中文乱码解决方法

最近,我在做一个项目的部署,这个项目是已nginx为前端代理两个tomcat的节点,通过mysql-proxy代理访问两台主从的mysql数据库. 整个项目搭建部署完成,进行测试,发现打开网页出现中文乱码.好吧,我进行修改. 开始以为是mysql数据库配置有问题,查看mysql的配置文件my.conf,内容如下: [mysqld] datadir=/usr/local/mysql/data socket=/tmp/mysql.sock user=mysql skip-character-set-

Centos下安装部署gisserver及centos6-7中文乱码解决

1.部署前准备 1.1操作系统centos6.x 1.2jdk1.8.0_151 1.3apache-tomcat-7.0.81 1.4Gisserver安装文件 2.部署程序运行环境 2.1解压安装jdk tar -zxf jdk-8u151-linux-x64.tar.gz mv jdk1.8.0_151/ /usr/local/ 2.2设置jdk环境变量 #编辑名为java.sh的shell脚本 vi /etc/profile.d/java.sh JAVA_HOME=/usr/local/

mysql导入数据中文乱码_ubuntu

1.在ubuntu中mysql的部分编码格式不是utf-8,故在导文件的时候会出现中文乱码,Windows中编码格式为gbk,因此要修改mysql的编码方式为utf-8. 2.查看MySQL编码格式: a.进入MySQL b. 输入 1 show variables like '%chart%': 3.修改编码方式(永久): 进入Termina: a.输入:sudo vi /etc/mysql/my.cnf 或 sudo vi /etc/mysql/conf.d/mysql.cnf(mysql5

MySQL安装及中文乱码解决

MySQL安装 终端输入 sudo apt-get install mysql-server 启动和关闭mysql服务器 service mysql start service mysql stop 进入mysql shell界面 mysql -u root -p 在Ubuntu18.04第一次安装mysql进入Shell时,需要设置密码 sudo cat /etc/mysql/debian.cnf 得到一系列信息: user password 用mysql -u debian-sys-main

使用sqoop从mysql导入数据到hive

前言 这篇文章主要是用sqoop从mysql导入数据到hive时遇到的坑的总结. 环境: 系统:Centos 6.5 Hadoop:Apache,2.7.3 Mysql:5.1.73 JDK:1.8 Sqoop:1.4.7 Hadoop以伪分布式模式运行. 一.使用的导入命令 我主要是参考一篇文章去测试的,Sqoop: Import Data From MySQL to Hive. 参照里面的方法,在mysql建了表,填充了数据,然后按照自己的情况输入了命令: sqoop import --co

教程 | 使用Sqoop从MySQL导入数据到Hive和HBase

基础环境 sqoop:sqoop-1.4.5+cdh5.3.6+78, hive:hive-0.13.1+cdh5.3.6+397, hbase:hbase-0.98.6+cdh5.3.6+115 Sqool和Hive.HBase简介 Sqoop Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的开源工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中. Hiv

sqoop从mysql导入到hdfs

1.mysql -- 创建数据库 create database logs; -- 使用 use logs; -- 创建表 create table weblogs(  md5 varchar(32),  url varchar(64),  request_date date,  request_time time,  ip varchar(15) ); -- 从外部文本文件加载数据 load data infile '/path/weblogs_entries.txt' into table

mysql导入导出数据中文乱码解决方法小结

inux系统中 linux默认的是utf8编码,而windows是gbk编码,所以会出现上面的乱码问题. 解决mysql导入导出数据乱码问题 首先要做的是要确定你导出数据的编码格式,使用mysqldump的时候需要加上--default-character-set=utf8, 例如下面的代码: 复制代码 代码如下: mysqldump -uroot -p --default-character-set=utf8 dbname tablename > bak.sql 那么导入数据的时候也要使用--