hive jdbc连接时的乱码问题

来源:互联网 发布:淘宝天猫全年销售额 编辑:程序博客网 时间:2024/05/01 18:11

之前写了个web端的程序用来控制从oracle向hadoop导数据,同时在页面上可以通过jdbc调用hive,发现中文显示为乱码,因为是装在windows2003上

在网上查了一下,通过修改hive的jdbc包可以解决这个问题,将jdbc包里的org.apache.hadoop.hive.jdbc.HiveQueryResultSet文件修改后放回去,就可以了。

改这行:  Object data = this.serde.deserialize(new BytesWritable(rowStr.getBytes()));

修改成:  Object data = this.serde.deserialize(new BytesWritable(rowStr.getBytes("UTF-8")));

上传一个修改好的包:改好的hive-jdbc包

http://download.csdn.net/detail/sardtass/6873591


windows的编码默认是gbk,之前也遇到过在开发环境中文正常而生产环境中文乱码的问题,主要是因为windows的编码不是utf8的,这个编码不知道在哪改,但是在启动tomcat时可以设置-D参数,进行修改,在启动tomcat时加上 -Dfile.encoding=UTF-8 就可以了,但是这样调整以后通过myeclipse调用tomcat时,后台输出都会是乱码,因为myeclipse默认也使用gbk,myeclipse也需要设置。

后来发现是装hadoop的服务器语言配置有问题,改成utf8就好了。


盾环境的配置:

Properties pps=System.getProperties();
pps.list(System.out);


另外,通过jdbc调用hive的时候,如果语句中有中文会报错,注意看一下服务器上的语言配置,改为utf8,而且web端的默认语言也需要是utf8的。

使用java调hive的jdbc时,如果连接由tomcat管理,则需要在tomcat的lib下放1个hadoop-core-**.jar的包和4个hive的包core,jdbc,metastore,service还有2个libfb303-0.9.0(facebook的包,为什么还要有这个)和libthrift-0.9.0包。



0 0