天天看点

hive中解决中文乱码

①hive的元数据库改成了mysql(安装完mysql之后也没有进行其它别的设置)

②hive-site.xml中设置元数据库对应的配置为  jdbc:mysql://crxy99:3306/hive_cz3q?createDatabaseIfNotExist=true

③普通情况下咱们的mysql默认编码是latin1,但是我们在日常开发中大多数情况下需要用到utf-8编码,如果是默认latin1的话,咱们的中文存储进去容易乱码,所以说大家在遇到一些数据乱码的情况话,最好把mysql的编码改成utf-8.

但是在这里要非常严重强调的一点:hive的元数据metastore在mysql的数据库,不管是数据库本身,还是里面的表编码都必须是latin1(CHARACTER SET latin1 COLLATE latin1_bin)!!!!!

验证方式:(可以通过客户端软件在数据库上右键属性查看,也可以通过命令查看)

mysql> show create database hive_cz3q;

不然会有类似如下的错误:

hive中解决中文乱码

那么怎么修改mysql的编码为utf8呢?这里提供了在线安装修改和离线方式安装下的修改方式供大家选择!

 向hive的表中 创建表,表语句部分如下:

hive中解决中文乱码
hive中解决中文乱码

在创建表的时候,字段可以有 comment,但是 comment 建议不要用中文说明,因为我们说过,hive 的 metastore 支持的字符集是 latin1,所以中文写入的时候会有编码问题,如下图! 

然后通过desc ods_order 查看 对应的comment中是中文的地方,通过Xshell显示全部都是 "?" 问号.  同时确认了Xshell支持显示中文(排除Xshell的问题).

以上就是说Hive在字段定义时的Comment中文乱码问题.

hive中解决中文乱码

有了上述的问题,那么我们该如何去解决注释中文乱码问题呢? 

①修改编码,设置为utf8

拷贝 mysql 的配置文件/usr/share/mysql/my-small.cnf 到/etc/my.cnf 

在mysql 配置文件/etc/my.cnf 中增加以下内容

 ②重启mysql 服务(这样确保缺省编码是utf8)

③验证编码是否改成了utf8:

输入命令 "\s"

hive中解决中文乱码

输入命令:show variables like 'char%' 

hive中解决中文乱码

输入命令:show variables like "colla%";

hive中解决中文乱码

OK修改成功!

④这样在启动hive,向hive中插入的表中comment等有汉字的情况,就可以正常的显示(如下为本人测试的部分显示结果):

hive中解决中文乱码
hive中解决中文乱码

 ①修改编码,设置为utf-8

 在 mysql 配置文件/etc/my.cnf(不需要拷贝)中[mysqld]的下面增加以下内容

hive中解决中文乱码

②重启mysqld服务

③ 和离线方式一样验证编码是否确实修改;

hive中解决中文乱码

因为我们知道 metastore 支持数据库级别,表级别的字符集是 latin1,那么我们只需要把相应注释的地方的字符集由 latin1 改成 utf-8,就可以了。用到注释的就三个地方,表、分区、视图。如下修改分为两个步骤:

 (1)、进入数据库 Metastore 中执行以下 5 条 SQL 语句 

 ①修改表字段注解和表注解

alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8

alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8

② 修改分区字段注解:

alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;

alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;

③修改索引注解:

alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

 (2)、修改 metastore 的连接 URL

测试结果: 

hive中解决中文乱码

以上就能完美的解决这个问题.

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/7469476.html,如需转载请自行联系原作者