1. 程式人生 > >hive jdbc連線時的亂碼問題

hive jdbc連線時的亂碼問題

之前寫了個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")));

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包。