hive中解决中文乱码

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

一.个人初始开发环境的基本情况以及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 中执行以下 条 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/p/7469476.html,如需转载请自行联系原作者

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 关系型数据库 MySQL
hive 的注释(comment) 中文乱码的解决方法(亲测有效)
最近群里有人问我hive中文显示乱码的问题, 下面就来说一下,怎么设置. 创建表的时候,comment说明字段包含中文,表成功创建成功之后,desc的时候中文说明显示乱码.如下图所示: 我们知道hive的元数据是有mysql管理的,所以这是mysql的元数据的问题.下面我们就修改一下字符编码 (1)修改表字段注解和表注解 alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8; alter table TABLE_PARAMS modify column PARAM_VALUE var
hive 的注释(comment) 中文乱码的解决方法(亲测有效)
|
SQL 关系型数据库 MySQL
|
SQL 分布式计算 大数据
E-MapReduce解决hive comment中文乱码问题
在最新版本的EMR-1.3.0已经解决了hive comment中文乱码问题。如果已经申请了包年包月的集群,用的是老版本,那么可以过下面介绍的步骤解决这个问题。
4472 0
|
6月前
|
SQL 数据采集 数据挖掘
大数据行业应用之Hive数据分析航班线路相关的各项指标
大数据行业应用之Hive数据分析航班线路相关的各项指标
189 1
|
6月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
249 0
|
6月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
237 0
|
6月前
|
SQL 存储 分布式计算
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
【大数据技术Hadoop+Spark】Hive数据仓库架构、优缺点、数据模型介绍(图文解释 超详细)
1067 0
|
1月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
33 0
|
4月前
|
SQL 分布式计算 大数据
大数据处理平台Hive详解
【7月更文挑战第15天】Hive作为基于Hadoop的数据仓库工具,在大数据处理和分析领域发挥着重要作用。通过提供类SQL的查询语言,Hive降低了数据处理的门槛,使得具有SQL背景的开发者可以轻松地处理大规模数据。然而,Hive也存在查询延迟高、表达能力有限等缺点,需要在实际应用中根据具体场景和需求进行选择和优化。