您的位置:首页 > 运维架构

hive中文注释乱码问题

2014-03-11 15:14 423 查看
开始的时候使用hive-0.7.1在建表的时候使用如下语句

hive>createtable t1(c1 string comment '列1');

然后查看该表

hive>describet1;

其中的注释变成了乱码。

后来得知是hive版本的问题,然后使用hive-0.8.0(该版本的代码经过了修改,从而支持中文显示)。

(1)将原来hive-0.7.1创建的数据库drop掉。

(2)使用hive-0.8.0,并将原来hive-0.7.1的配置文件copy到0.8.0中使用

(3)执行 hive>create
table t1(c1string comment '列1');

会抛出类似于com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:
Specified key was toolong;的异常(省略了很多的java错误信息)。 这时到mysql中的hive数据库里执行 alter
database hive character set latin1;改变hive元数据库的字符集,问题就可以解决!

(4)然后在mysql中通过语句:alter
tableCOLUMNS_V2 modify column COMMENT varchar(256) character set utf8; 修改COLUMNS_V2表中用于存储注释内容的列的编码格式。(在0.8.0之前存储注释信息的表的名字为COLUMNS,从0.8.0开始改成了COLUMNS_V2)。

(5)重新执行createtable t2(c1 string comment '列1');可以将表创建成功

问题解决,收工~~

在这里补充下为了使hive-0.8.0能够显示所有的元数据中文的全部配置:

让hive的注释可以添加中文

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://IP:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>

表或者字段有中文的时候需要修改hive的元数据库的设置。

以mysql为例子,当mysql的字符集设置成utf8的时候使用hive会有问题

(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Specified key
was too long; max key length is 767 bytes )

所以当hive使用mysql作为元数据库的时候mysql的字符集要设置成latin1 default。

alterdatabase hive character set latin1;

为了保存那些utf8的中文,要将mysql中存储注释的那几个字段的字符集单独修改为utf8。

修改字段注释字符集

alter tableCOLUMNS_V2 modify column COMMENT varchar(256) character set
utf8;

修改表注释字符集

alter tableTABLE_PARAMS modify column PARAM_VALUE varchar(4000) character
set utf8;

注意:这里使用的hive不是从官网下载的,而是修改过之后的,我已经传到了csdn上,可以下载使用

hive-0.8.0-sup-chinese.zip

如果使用的hive版本是0.9.0以上,则需要打上HIVE-3914的patch,patch的地址为:https://issues.apache.org/jira/browse/HIVE-3914

(1)hive-0.11.0

我在用hive-0.11.0的时候遇到了中文显示的问题,上面地址的patch打不上去,使用的是https://issues.apache.org/jira/browse/HIVE-2905的patch,里面一共有两个,使用的是https://issues.apache.org/jira/secure/attachment/12589572/HIVE-2905.D11487.1.patch

注意该patch下面是对test的patch,在hive-0.11.0中没有相关的test文件因此需要将https://issues.apache.org/jira/secure/attachment/12589572/HIVE-2905.D11487.1.patch中对test做的patch部分的语句去掉,因此我打上相关的补丁之后,发现在创建表的时候列上的中文注释可以正常显示,但是表上的中文注释还是乱码。

没有办法,只能重新修改源码,解决表上中文注释不能正常显示的问题,修改完之后做成了补丁,提交上了社区上

patch编码为:HIVE-5499,地址为https://issues.apache.org/jira/browse/HIVE-5499

(2)hive-0.12.0

hive-0.12.0的发布,虽然解决了表中的中文列注释显示乱码的问题,但是表注释的中文乱码问题并没有解决,因此,果断修改源码,重新编译,$HIVE_HOME/lib/hive-exec-0.12.0.jar。可以解决表中文注释显示乱码的问题。关于修改的代码也已经递交到了hive的jira上,地址为:

https://issues.apache.org/jira/browse/HIVE-5682

打上该patch可以解决问题。

转自:http://lvxin1986.blog.51cto.com/4953500/1316747
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop Hive