大数据-hive创建表出现中文乱码问题-解决过程详解

一、场景描述


1、创建表语句:

hive> create table movie02(
     userID int comment '用户ID',
     movieID int comment '电影ID',
     rating int comment '电影评分',
     timestamped bigint comment '评分时间戳',
     movieName string comment '电影名字', 
     movieType string comment '电影类型', 
     sex string comment '性别', 
     age int comment '年龄', 
     occupation string comment '职业', 
     zipcode string comment '邮政编码'
     ) comment '影评三表合一' 
     row format delimited fields terminated by ",";
OK
Time taken: 0.207 seconds

2、查看创建的表结构:
    第三列备注显示中文乱码:

hive> desc movie02;
OK
userid                  int                     ??ID                
movieid                 int                     ??ID                
rating                  int                     ????                
timestamped             bigint                  ?????               
moviename               string                  ????                
movietype               string                  ????                
sex                     string                  ??                  
age                     int                     ??                  
occupation              string                  ??                  
zipcode                 string                  ????                
Time taken: 0.087 seconds, Fetched: 10 row(s)

 

二、分析问题


    中文乱码一般情况下就是字符编码的问题,
    第一种情况是:hive本身字符编码有问题,我在网上查找大量的hive安装资料,发现安装时没有相关操作,由此推测不是hive的问题。
    第二种情况是:hive的操作是依托于mysql的。有可能是mysql的字符编码问题导致中文乱码(极大可能是这个问题)
    第三种情况是:linux的centos系统显示问题,显示中文乱码(这个我之前解决过,所以我排除了这个可能) 


三、解决问题


    这里附上我参考的一个链接https://www.cnblogs.com/huhongy/p/11854938.html
    通过分析得出是mysql的编码问题
    这里需要注意的是mysql客户端字符编码要和mysql服务端的字符编码保持一致,大多数小伙伴都会遇到的问题是将客户端的字符编码改成了utf8,
    但是其服务器端没有改成对应的utf8,导致编码问题的出现

    解决方式:
    1、在mysql中输入命令查询当前mysql的编码设置: show variables like 'char%';
    2、修改mysql客户端的字符编码为utf8,修改/etc/my.cnf配置文件
        [client]
        port=3306
        default-character-set=utf8

        修改mysql服务器端的字符编码为utf8
        [mysql]
        default-character-set = utf8
    3、重启mysql服务
        ps -ef|grep mysql查看进程号为9528
        kill -9 9528杀死进程
        注意:查到几个进程号就杀掉几个,上面我只是举个例子
        mysql -uroot -proot 登录一下mysql,能登录就表示已经重启的,因为设置了开机启动,不会的可以百度一下教程
    4、重启hive服务
        同理用ps -ef|grep hive查看hive的进程号98755
        kill -9 9528杀死进程
        然后输入命令:nohup hive --service hiveserver2 >/dev/null &    重启hive


四、测试代码


    在hive下面删除之前创建的表
  

  hive>drop table movie02;

   重新创建:

 hive> create table movie02(
    > userID int comment '用户ID',
    > movieID int comment '电影ID',
    > rating int comment '电影评分',
    > timestamped bigint comment '评分时间戳',
    > movieName string comment '电影名字', 
    > movieType string comment '电影类型', 
    > sex string comment '性别', 
    > age int comment '年龄', 
    > occupation string comment '职业', 
    > zipcode string comment '邮政编码'
    > ) comment '影评三表合一' 
    > row format delimited fields terminated by ",";
OK
Time taken: 0.419 seconds

  查看表格:

 hive> desc movie02;
    OK
    userid                  int                     用户ID                
    movieid                 int                     电影ID                
    rating                  int                     电影评分                
    timestamped             bigint                  评分时间戳               
    moviename               string                  电影名字                
    movietype               string                  电影类型                
    sex                     string                  性别                  
    age                     int                     年龄                  
    occupation              string                  职业                  
    zipcode                 string                  邮政编码                
    Time taken: 0.137 seconds, Fetched: 10 row(s)
    hive> 


       发现第三列中文乱码解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值