Hive表comment中文乱码解决方案

hive注释中文乱码问题:

针对元数据库metastore中的表,分区,视图的编码设置。
	1、进入数据库metastore中修改mysql编码设置。
	2、修改metastore的连接URL。
1、修改表字段注解和表注解
进入mysql 选择hive库执行:

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 ;
2、修改分区字段注解:
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;
3、修改索引注解:
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
4、修改metastore的连接url:
修改hive-site.xml


      javax.jdo.option.ConnectionURL
      jdbc:mysql://你的IP:3306/hive?createDatabaseIfNotExsit=true&characterEncoding=UTF-8

5、查看修改结果
desc [table];
show create table [table]];
6、假若desc正常, show create table 依旧乱码
问题出在hive内部代码处理字符集上面
7、下载hive源码
下载链接: http://archive.apache.org/dist/hive/
8、修改代码
修改exe下的c.DDLTask类:

outStream.writeBytes(createTab_stmt.toString()); ------ (1700多行)
outStream.writeBytes(createTab_stmt.render()); ------ (1900多行)
分别改成
outStream.write(createTab_stmt.toString().getBytes("UTF-8"));
outStream.write(createTab_stmt.render().getBytes("UTF-8"));
9、编译
根目录执行:
mvn install -DskipTests -Dcheckstyle.skip=true
mvn clean package -Phadoop-2 -Pdist -DskipTests -Dtar
10、替换文件

下载地址

编译成功后去target路径下找到hive-exec-*.jar
替换掉hive安装目录下的hive-exec-*.jar
11、如果下载的和安装的hive版本完全吻合, 按照道理重启hive, 进行表结构查询, 问题应该是解决了
12、依旧失败, 并且hive连接报错
将hive-exec-*.jar文件解压, 拿到解压后的DDLTask.class文件
去hive安装目录替换
13、重启hive, 查询
发现中文不乱码了, 但是当查看分区表时: show partitions [table] 报错
14、修改Hive源码方法
将测试环境的hive-exec-1.2.1000.2.5.0.0-1245.jar拿到本地, 然后将其反编译, 获得DDLTask.java文件, 
再与源码中的该文件比较, 发现两者引用的接口方法名有差异. 测试环境jar包中用的方法名: showTablePartition, 
而源码用到的方法名: showTablePartiton.

将源码中用到showTablePartiton方法的代码文件内容都修改成showTablePartition, (总共四处), 重新编译源码.

最后同样去替换DDLTask.class
15、此时再重启hive, 查询表结构, 查询表分区
结果正常, 问题解决.

(注): 如同样发现执行某sql函数报错, 解决思路和上述一致

参考:
https://www.iteblog.com/archives/1687.html
https://blog.csdn.net/hjw199089/article/details/79048411

你可能感兴趣的:(杂七杂八)