Hive中文乱码解决
在练习Hivesql语句时,发现中文插入乱码。
首先查看文件的编码格式
使用命令:cd /export/data/hivedata/
进入数据存储位置
然后使用命令:file t_map.txt
发现文件编码格式时UTF-8
,所以不是文件编码格式问题。
查看MySQL的编码格式
先使用命令mysql -uroot -p
,然后输入密码,进入MySQL;
使用命令:show variables like 'char%';
查看MySQL的的编码格式,发现不是 UTF-8
编码;
修改MySQL的编码格式
-
找到mysql的配置文件,拷贝到etc目录下,第一步很重要
配置文件一般在
/usr/share/doc/
下,可以先进入这个文件夹,然后找对应的mysql-server-xxx
-
将配置文件my-large.cnf 复制到 /etc/my.cnf
cp /usr/share/doc/mysql-server-5.1.73/my-large.cnf /etc/my.cnf
-
修改覆盖过去的
my.cnf
文件- 在[client]下增加
default-character-set=utf8
- 在[mysqld]下增加
default-character-set=utf8
- 同时加上
init_connect='SET NAMES utf8'
(设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)
- 在[client]下增加
-
重新启动mysql,然后再此查询
service mysqld restart # 重新启动MySQLd进程
再次查询发现还是乱码!!!
尝试修改外部表的编码格式
alter table t_map character set utf8;
语法错误!
重启Hive客户端也不成。
修改连接时设置UTF-8编码也不行。
问题发现
重启Hive时操作失误了下,导致几次没链接上,然后手贱测试了一下直接在node-1上查,发现数据没有乱码。
于是猜测是node-3机器上的编码格式错了。
-
查询node-3节点的编码格式:
直接输入
locale
即可 -
发现编码格式正常,上网查询:可能是没有安装中文支持包
yum -y groupinstall chinese-support
然后设置语言格式为:
zh_CN.UTF-8
export LANG="zh_CN.UTF-8"
再次查看发现没有变化。
-
开始怀疑是不是克隆机有问题,直接上Linux终端查,mmp,发现node-1 和node-3都显示一样(乱码),然后心态就炸了,为啥node-1 也这样了,回到CRT上一查node-1正常
-
接着再找解决方案的时候看到CRT编码格式要修改为UTF-8 ,我想了下,node-1 可以显示,是不是代表CRT就是UTF-8的编码格式,死马当活马医,不看不知道,CRT的编码格式为default,改为UTF-8显示正常。
-
之前因为node-1显示正常,就没有怀疑CRT的编码格式问题,看到了好几次要修改CRT的编码格式都选择性的忽略了…
-
之前还修改了etc下的my.cnf文件,也没有解决