HIVE使用过程中发现对中文的支持很糟,通过JDBC连接HIVE,查询到的数据中,如果包含了中文字符(不管是GB2312还是UTF-8)一律显示乱码,识别不出来,转码也没有办法解决,因为在jdbc驱动里获取数据时,已经将原始的二进制改变了,数据的始终是错误的字符串。
在网上查了下,有人提出了HIVE 2137的补丁(https://issues.apache.org/jira/browse/HIVE-2137),在jdbc的源码中,需做一下修改
jdbc/src/java/org/apache/hadoop/hive/jdbc/HiveQueryResultSet.java:
StructObjectInspector soi = (StructObjectInspector) serde.getObjectInspector(); List<? extends StructField> fieldRefs = soi.getAllStructFieldRefs(); - Object data = serde.deserialize(new BytesWritable(rowStr.getBytes())); + Object data = serde.deserialize(new BytesWritable(rowStr.getBytes("UTF-8")));
其中用“UTF-8”来编码字符串。
为解决这个问题,不得不重新编译HIVE。。。。。
步骤1: http://mirror.bjtu.edu.cn/apache/hive/hive-0.7.1/ 下载hive-0.7.1.tar.gz ,解压到/home/hadoop/hive/
步骤2:下载ant 从http://ant.apache.org/ 解压到 /user/local/ ,ln -s apache-ant-1.7.1 ant
步骤3:下载ant 从http://www.apache.org/dist/ant/ivy/ 解压到 /user/local/,ln -s apache-ivy-2.1.0-rc2 ivy
步骤4:修改 /etc/profile 增加两行: export PATH=/usr/local/ant/bin:$PATH export IVY_HOME=/usr/local/ivy
步骤5:修改build.properties文件中:否则原配置是facebook,被河蟹了,只能用人人的镜像
hadoop.version=0.20.2
hadoop.mirror=http://labs.renren.com/apache-mirror/
hadoop.security.url=http://people.apache.org/~todd/snapshot-for-hive-build/hadoop-0.20.3-CDH3-SNAPSHOT.tar.gz
hadoop.security.version=0.20.3-CDH3-SNAPSHOT
步骤6: 开始编译 : ant package
有可能出现的问题: 目录权限不够,或者下载组件失败。。。。反正哪里出错就处理哪里问题。