Hive中文乱码解决

43 篇文章 0 订阅
13 篇文章 0 订阅

Hive中文乱码解决

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

首先查看文件的编码格式

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

然后使用命令:file t_map.txt

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

[外链图片转存失败(img-HCoETM6A-1568682098960)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\00查看文件编码格式.jpg)]

查看MySQL的编码格式

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

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

[外链图片转存失败(img-OlKbu8r9-1568682098961)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\01MySQL原始编码格式.jpg)]

修改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
    

    [外链图片转存失败(img-paxFlRm4-1568682098962)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\02覆盖my_cnf文件.jpg)]

  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)]

    [外链图片转存失败(img-hvvzjFsg-1568682098966)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\04修改内容.jpg)]

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

    service mysqld restart      # 重新启动MySQLd进程
    

    [外链图片转存失败(img-tfmFGirq-1568682098967)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\05修改MySQL编码格式成功.jpg)]

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

[外链图片转存失败(img-935W0W4o-1568682098969)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\06乱码继续.jpg)]

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

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 即可

    [外链图片转存失败(img-fTqHf8RD-1568682098974)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\08查询node-3的编码.jpg)]

  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显示正常。

    [外链图片转存失败(img-6NVV2Oms-1568682098975)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\09修改ok.jpg)]

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

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

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

    [外链图片转存失败(img-brU1vNJ6-1568682098976)(D:\学习笔记\hadoop\保存图片\Hive乱码解决\102修改etc下的my_cnf文件.jpg)]

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

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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值