Hive中文乱码解决

Hive中文乱码解决

在练习Hivesql语句时,发现中文插入乱码。

首先查看文件的编码格式

使用命令:cd /export/data/hivedata/ 进入数据存储位置

然后使用命令:file t_map.txt

发现文件编码格式时UTF-8 ,所以不是文件编码格式问题。

Hive中文乱码解决_第1张图片

查看MySQL的编码格式

先使用命令mysql -uroot -p ,然后输入密码,进入MySQL;

使用命令:show variables like 'char%'; 查看MySQL的的编码格式,发现不是 UTF-8 编码;

Hive中文乱码解决_第2张图片

修改MySQL的编码格式

  1. 找到mysql的配置文件,拷贝到etc目录下,第一步很重要

    配置文件一般在 /usr/share/doc/ 下,可以先进入这个文件夹,然后找对应的 mysql-server-xxx

  2. 将配置文件my-large.cnf 复制到 /etc/my.cnf

    cp /usr/share/doc/mysql-server-5.1.73/my-large.cnf  /etc/my.cnf
    

    Hive中文乱码解决_第3张图片

  3. 修改覆盖过去的 my.cnf 文件

    • 在[client]下增加 default-character-set=utf8
    • 在[mysqld]下增加 default-character-set=utf8
    • 同时加上 init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行)

    [外链图片转存失败(img-6HQMmXoD-1568682098962)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\03修改my_cnf文件.jpg)]

    Hive中文乱码解决_第4张图片

  4. 重新启动mysql,然后再此查询

    service mysqld restart      # 重新启动MySQLd进程
    

    Hive中文乱码解决_第5张图片

再次查询发现还是乱码!!!

Hive中文乱码解决_第6张图片

尝试修改外部表的编码格式

alter table t_map character set utf8;

语法错误!

重启Hive客户端也不成。

修改连接时设置UTF-8编码也不行。

问题发现

重启Hive时操作失误了下,导致几次没链接上,然后手贱测试了一下直接在node-1上查,发现数据没有乱码。

[外链图片转存失败(img-EfdR9L7z-1568682098970)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\07node-1没有乱码.jpg)]

于是猜测是node-3机器上的编码格式错了。

  1. 查询node-3节点的编码格式:

    直接输入 locale 即可

    Hive中文乱码解决_第7张图片

  2. 发现编码格式正常,上网查询:可能是没有安装中文支持包

    yum -y groupinstall chinese-support
    

    然后设置语言格式为: zh_CN.UTF-8

    export LANG="zh_CN.UTF-8"
    

    再次查看发现没有变化。

  3. 开始怀疑是不是克隆机有问题,直接上Linux终端查,mmp,发现node-1 和node-3都显示一样(乱码),然后心态就炸了,为啥node-1 也这样了,回到CRT上一查node-1正常

  4. 接着再找解决方案的时候看到CRT编码格式要修改为UTF-8 ,我想了下,node-1 可以显示,是不是代表CRT就是UTF-8的编码格式,死马当活马医,不看不知道,CRT的编码格式为default,改为UTF-8显示正常。

    Hive中文乱码解决_第8张图片

    [外链图片转存失败(img-MbRQeCdh-1568682098975)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\10结果.jpg)]

  5. 之前因为node-1显示正常,就没有怀疑CRT的编码格式问题,看到了好几次要修改CRT的编码格式都选择性的忽略了…

  6. 之前还修改了etc下的my.cnf文件,也没有解决

    Hive中文乱码解决_第9张图片

并不是说上面那些不能解决乱码的问题,而是在我这个BUG中不适合。

所有的解决方法都对应的一系列问题,所以需要对症下药。

经过这事后,觉得发生错误了不要一味的猜测问题,先检查一下基本的配置先。

你可能感兴趣的:(从零开始Hadoop,Hadoop,#Hive)