一.个人初始开发环境的基本情况以及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;

+-----------+-----------------------------------------------------------------------------------------+
| Database | Create Database |
+-----------+-----------------------------------------------------------------------------------------+
| hive_cz3q | CREATE DATABASE `hive_cz3q` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_bin */ |
+-----------+-----------------------------------------------------------------------------------------+

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

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

二.乱码的情况:

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

create table ods.ods_order
(
ORDER_ID int comment '订单ID',
ORDER_NO varchar(30) comment '订单编号(唯一字段),前缀字符表示订单来源:a,Andriod;b,微博;c,WEB;e,饿了么;i,Iphone;m,Mobile;x,微信; z,中粮我买网;l,其它。 接着3位数字代表订单城市编号;接着字符z与后面的真正订单编号分隔。这套机制从2014年12月开始实施。',
DEALER_ID int comment '门店ID',
CUST_ID int comment '客户ID',
**********

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

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

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

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

三.解决方式:

1.首先进行Mysql的编码设置

(1)离线安装mysql的修改方式:

①修改编码,设置为utf8

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

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

[client]下面增加
default-character-set=utf8
在[mysqld]下面增加
default-character-set=utf8
init_connect='SET NAMES utf8'

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

 service mysqld restart

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

输入命令 "\s"

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

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

OK修改成功!

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

0: jdbc:hive2://localhost:10000/ods> desc ods_order;
+--------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------+--+
| col_name | data_type | comment |
+--------------------------+-----------------------+---------------------------------------------------------------------------------------------------------------------------------------------+--+
| order_id | int | 订单ID |
| order_no | varchar(30) | 订单编号(唯一字段),前缀字符表示订单来源:a,Andriod;b,微博;c,WEB;e,饿了么;i,Iphone;m,Mobile;x,微信; z,中粮我买网;l,其它。 接着3位数字代表订单城市编号;接着字符z与后面的真正订单编号分隔。这套机制从2014年12月开始实施。

(2)在线安装mysql的修改方式

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

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

init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

②重启mysqld服务

 service mysqld restart

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

 show variables like 'char%';

2.针对元数据库metastore中的表,分区,视图的编码设置

因为我们知道 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

<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://IP:3306/db_name?createDatabaseIfNotExist=true&amp;useUnicode=true&characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>

测试结果:

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

作者:SummerChill
出处:http://www.cnblogs.com/DreamDrive/
本博客为自己总结亦或在网上发现的技术博文的转载。
如果文中有什么错误,欢迎指出。以免更多的人被误导。
 
 
 

hive中文字符乱码 解决方法【转】的更多相关文章

  1. JMeter 查看结果树监听器响应数据中文显示乱码解决方法

    查看结果树监听器响应数据中文显示乱码解决方法 by:授客 QQ:1033553122   问题描述 使用监听器-查看结果树(View Results Tree Listener)过程中发现,响应数据面 ...

  2. 【Qt开发】Qt5.7中文显示乱码解决方法两种

    升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题 第一种: 在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8 ...

  3. windows command ftp 中文文件名乱码解决方法

    有时,使用临时的windows机子,要进行ftp简单操作,但又不想装其它的ftp-client,可以直接使用windows command中的命令ftp来操作. 通常,ftp服务器按标准,使用utf8 ...

  4. Code:Blocks中文输出乱码解决方法

    0x01 问题描述 将CB的编码格式设置为UTF-8之后,在CMD窗口输出中文乱码. 0x02 解决办法 控制台显示的时候缺省的是使用系统默认的字符集,比如windows下用的是GBk,但是默认情况下 ...

  5. IE下get方式传中文参数乱码解决方法

    乱码原因:浏览器在传递url的时候,会使用自己的编码格式对地址进行编码,如果浏览器所使用编码与服务器采用编码不一致,服务器接收到的参数就会出现乱码.在firefox,chrome下正常,ie下会出现乱 ...

  6. javascript通过url向jsp页面传递中文参数乱码解决方法

    解决方法:在传递参数前将中文参数进行两次编码,jsp页面获取参数后对中文参数进行一次解码,中文参数就不会变为乱码了! 参考例子: <%@ page language="java&quo ...

  7. openfire存储中文字符乱码解决办法

    转载于: Xmpp问题总结:处理Openfire 中文乱码问题(2) openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据存储可以采用多种数据库,如MySQL ...

  8. c#写入Mysql中文显示乱码 解决方法

    如题,mysql字符集utf8,c#写入中文后,全部显示成?,一个汉字对应一个?解决方法:在数据库连接字符串中增加字符集的说明,Charset=utf8,如 MySQLConnection con = ...

  9. c#写入Mysql中文显示乱码 解决方法 z

    mysql字符集utf8,c#写入中文后,全部显示成?,一个汉字对应一个? 解决方法:在数据库连接字符串中增加字符集的说明,Charset=utf8,如 MySQLConnection con = n ...

随机推荐

  1. CSS 的介绍

    第一章 的介绍 1.CSS:“层叠样式表”,它是cascading style sheets的缩写,作用就是给HTML标签加表现形式(样式-显示),如:字体,图片,列表,位置等. 在浏览器中可以看到部 ...

  2. P2P文件上传

    采用uploadify上传  官网:http://www.uploadify.com/  (有H5版本和flash版本,H5收费,所以暂时用flash) uploadify的重要配置属性(http:/ ...

  3. 图形报表部署在Linux下出现乱码解决办法

     客户问题: 客户的操作系统SUSE LINUX Enterprise Server 10 (i586) 64位,服务器 weblogic8.1, JDK版本:jdk1.4.系统中只有图形报表展示 ...

  4. 团队项目个人进展——Day02

    一.昨天工作总结 冲刺第二天,昨天成功接入高德地图接口,并通过官方提供的文档实现了地图定位功能,通过官方在GitHub上提供的Demo可以看出还能实现天气查看,路径规划等功能: 二.遇到的问题 虽然通 ...

  5. spring boot(11)-druid监控

    druid druid是和tomcat jdbc一样优秀的连接池,出自阿里巴巴.关于druid连接池参数,参考 https://github.com/alibaba/druid/wiki/DruidD ...

  6. 搜索关键字自动更正 - Oracle Endeca Server

    做了几个Oracle Endeca 电商项目.每个项目都会有搜过关键字拼写错误更正(Spelling Correction)的需求.淘宝也有类似功能. Oracle Endeca Sever提供了关键 ...

  7. 从Azure上构建Linux应用程序映像

    下图描述了总体的虚拟机的VHD映像生成以及发布到 Azure Azure 镜像市场的全过程: 具体步骤如下: 从Azure管理平台上Linux申请虚拟机, 安装和配置您要发布的应用软件产品,制作成映像 ...

  8. node-sass 解决 no such file or directory

    在使用node-sass编译的时候出现以下情况 Error: ENOENT: no such file or directory, scandir 'D:\xxxx\node_modules\.npm ...

  9. [SQLServer] 数据库SA用户被锁定或者忘记密码的恢复

    一.以管理员权限运行命令提示符 CMD C:\>net stop mssqlserver您想继续此操作吗? (Y/N) [N]: y C:\>net start mssqlserver / ...

  10. 从一个简单的 JPA 示例开始

    本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Sp ...