在上一篇文章《从hive将数据导出到mysql》中,虽然通过hive中转,将hbase的数据成功导出到了mysql中,但是我们遇到了中文乱码问题。
一、mysql中的编码
mysql> show variables like 'collation_%'; +----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+ 3 rows in set (0.00 sec) mysql> show variables like 'character_set_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
可见原来缺省是latin1编码,会导致中文乱码。
可以在mysql中设置编码,单个设置
mysql> alter database name character set utf8;
mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_connection=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_results=utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> set character_set_server=utf8;
Query OK, 0 rows affected (0.00 sec)
但重启后会失效。
可以修改配置文件:
[root@Hadoop48 ~]# vi /etc/my.cnf [mysql] default-character-set=utf8 [client] default-character-set=utf8 [mysqld] default-character-set=utf8 character_set_server=utf8 init_connect='SET NAMES utf8'
重启mysql,这样确保缺省编码是utf8
[root@Hadoop48 ~]# service mysqld restart
查看是否变成utf8:
mysql> \s -------------- mysql Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (x86_64) using readline 5.1 Connection id: 2 Current database: toplists Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.95 Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/lib/mysql/mysql.sock Uptime: 39 sec Threads: 1 Questions: 12 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 9 Queries per second avg: 0.308 -------------- mysql> show variables like "char%"; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) mysql> show variables like "colla%"; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec)
将mysql编码改成utf8,并在命令行中指定编码为utf8,执行导出报错:
[zhouhh@Hadoop46 ~]$ sqoop export --connect "jdbc:mysql://Hadoop48/toplists?useUnicode=true&characterEncoding=utf-8" -m 1 --table award --export-dir /user/hive/warehouse/hive_myaward/000000_0 --input-null-string "\\\\N" --input-null-non-string "\\\\N" --input-fields-terminated-by "\\01" --input-lines-terminated-by "\\n" 12/07/20 13:17:22 INFO mapred.JobClient: Task Id : attempt_201207191159_0233_m_000000_0, Status : FAILED java.io.IOException: java.sql.SQLException: Incorrect string value: '\xE6\x9D\x80\xE7\xA0\xB4...' for column 'nick' at row 1
原来我创建的表缺省编码不是utf8的,也需改变一下。
mysql> ALTER TABLE award CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
再导出
[zhouhh@Hadoop46 ~]$ sqoop export --connect "jdbc:mysql://Hadoop48/toplists?useUnicode=true&characterEncoding=utf-8" -m 1 --table award --export-dir /user/hive/warehouse/hive_myaward/000000_0 --input-null-string "\\\\N" --input-null-non-string "\\\\N" --input-fields-terminated-by "\\01" --input-lines-terminated-by "\\n" ... 12/07/20 14:03:10 INFO mapred.JobClient: map 0% reduce 0% 12/07/20 14:03:24 INFO mapred.JobClient: map 100% reduce 0% ... 12/07/20 14:03:29 INFO mapreduce.ExportJobBase: Exported 2 record
检查表 mysql> select * from award; +-------------------------------+-----------+-----------+------+-----------+-----------+--------+------+-------------+-----------------+---------+ | rowkey | productid | matchid | rank | tourneyid | userid | gameid | gold | loginid | nick | plat | +-------------------------------+-----------+-----------+------+-----------+-----------+--------+------+-------------+-----------------+---------+ | 2012-04-27 06:55:00:402713629 | 5947 | 433203828 | 2 | 4027102 | 402713629 | 1001 | NULL | 715878221 | 杀破天A | ios | | 2012-04-27 06:55:00:406788559 | 778 | 433203930 | 19 | 4017780 | 406788559 | 1001 | 1 | 13835155880 | 亲牛牛旦旦 | android | +-------------------------------+-----------+-----------+------+-----------+-----------+--------+------+-------------+-----------------+---------+ 2 rows in set (0.00 sec)
中文编码问题解决。
相关推荐
在使用 DataX 将数据从 Hive 表导入 MySQL 表的过程中,遇到了数据缺失的问题。具体表现为,在某些特定条件下(如数据块大小超过 256M 时),导入到 MySQL 的数据量少于预期。 #### 现象分析 根据观察发现,当数据...
1.将Mysql中的数据迁移到Hdfs文件系统中,然后通过Hive加载HDFS文件系统中的数据值 2.将Hive中的数据迁移到指定Mysql数据库中 注意点: 1.数据迁移的过程中,由于hive的Null值存储为"\N",Mysql存储为NULL值,二者...
2. 将"Hive 3.1.2+mysql驱动.zip"中的MySQL驱动JAR文件(通常为`mysql-connector-java.jar`)添加到Hive的类路径中。 3. 修改Hive的配置文件`hive-site.xml`,设置`javax.jdo.option.ConnectionURL`、`javax.jdo....
例如,list-databases 命令用于列出 MySQL 数据库中的所有数据库,list-tables 命令用于列出指定数据库中的所有表格,import 命令用于将数据从 MySQL 导入到 Hive,export 命令用于将数据从 Hive 导出到 MySQL。...
支持hive 源数据、表结构导出
针对 hdp-22.4.3.0-227版中的hive1.2.1000的cli show create table乱码的替换jar包。
在实际业务中,将MySQL中的数据迁移到Hive进行分析和挖掘是一个常见的需求。本教程主要围绕“mysql数据抽取,自动生成hive建表语句”这一主题展开,讲解如何高效地实现这一过程。 首先,我们需要理解MySQL与Hive...
pyflink将mysql数据直接插入hive,由此可以延伸出pyflink实现hive关联mysql
在 Hive 中,如果要将数据导出到 MySQL 或从 MySQL 导入数据,这个驱动是必需的。版本 5.1.37 是一个稳定版本,提供了与 MySQL 5.7.x 版本的兼容性。 3. **mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar**:这是 MySQL...
1. **数据类型匹配**:Spark DataFrame 和 Hive 或 MySQL 表的列数据类型应保持一致,否则可能会在读写过程中遇到问题。 2. **分区策略**:在写入 Hive 时,如果数据量大,可以使用分区策略来优化存储和查询性能。...
除了将数据加载到 Hive 表中,还需要能够将数据导出到外部系统。通常使用 `INSERT OVERWRITE` 或 `INSERT INTO` 命令来实现这一目标。 - **INSERT OVERWRITE**: 当需要将 Hive 表中的数据导出到指定目录时,可以...
在Hive中,当选择MySQL作为元数据存储时,这个驱动文件是必需的,因为它使得Hive Metastore服务能够与MySQL数据库通信,存储表信息、分区信息、列信息等元数据。 知识点详细说明: - **Apache Hive**:Hive是一个...
在Cloudera Manager中配置Hive使用MySQL数据库涉及多个步骤,从卸载CentOS默认MySQL到配置完毕,下面详细说明每一步的知识点。 首先,确保在添加Hive数据库前,系统中不存在先前安装的MySQL版本。使用命令rpm -qa |...
centos 下hive连接mysql驱动 ,mysql-connector-java-8.0.26-1.el7....4.按你的实际需求,将此mysql-connector-java.jar文件复制到你需要的地方,一班是在大数据组件的conf目录,比如hive是/usr/software/hive312/lib/
在大数据处理中,Sqoop 提供了方便的数据导入和导出功能,它能够将结构化的数据从传统数据库迁移到 Hadoop 生态系统中的组件,如 Hive。 在本主题中,我们将深入探讨 Sqoop 的导入功能,特别是如何将数据从 MySQL ...
"生成Hive建表语句"这个主题主要涉及到如何创建Hive表结构,以便存储和管理大数据。下面我们将深入探讨Hive建表的相关知识点。 首先,我们需要了解Hive的基本概念。Hive是由Facebook开源的一个数据仓库工具,它可以...
通过shell脚本,批量把一个库下面的表结构全部导出,在开发环境执行过。
解决Hadoop中文乱码问题的关键在于识别和匹配数据的正确编码,并在Hadoop组件和工具中设置相应的编码选项。在实际操作中,可能需要结合日志信息和源码调试来定位问题。同时,建立良好的编码规范,统一数据的编码格式...
标题中的“hive2.1.1_mysql_sqoop.zip”表明这是一个与Hive 2.1.1、MySQL数据库和Sqoop工具相关的压缩包。这个压缩文件包含了一系列组件,旨在帮助用户在数据仓库环境中进行数据导入导出操作。下面将详细阐述这些...
- 执行Sqoop命令,将Hive表的数据导入到MySQL中。 **3. 使用Sqoop将数据从MySQL导入HBase**: - 在MySQL中更新或添加数据后,使用Sqoop连接到MySQL并指定要导入的表。 - 设置HBase的连接信息,包括Zookeeper地址...