天天看點

hive中解決中文亂碼

①hive的中繼資料庫改成了mysql(安裝完mysql之後也沒有進行其它别的設定)

②hive-site.xml中設定中繼資料庫對應的配置為  jdbc:mysql://crxy99:3306/hive_cz3q?createDatabaseIfNotExist=true

③普通情況下咱們的mysql預設編碼是latin1,但是我們在日常開發中大多數情況下需要用到utf-8編碼,如果是預設latin1的話,咱們的中文存儲進去容易亂碼,是以說大家在遇到一些資料亂碼的情況話,最好把mysql的編碼改成utf-8.

但是在這裡要非常嚴重強調的一點:hive的中繼資料metastore在mysql的資料庫,不管是資料庫本身,還是裡面的表編碼都必須是latin1(CHARACTER SET latin1 COLLATE latin1_bin)!!!!!

驗證方式:(可以通過用戶端軟體在資料庫上右鍵屬性檢視,也可以通過指令檢視)

mysql> show create database hive_cz3q;

不然會有類似如下的錯誤:

hive中解決中文亂碼

那麼怎麼修改mysql的編碼為utf8呢?這裡提供了線上安裝修改和離線方式安裝下的修改方式供大家選擇!

 向hive的表中 建立表,表語句部分如下:

hive中解決中文亂碼
hive中解決中文亂碼

在建立表的時候,字段可以有 comment,但是 comment 建議不要用中文說明,因為我們說過,hive 的 metastore 支援的字元集是 latin1,是以中文寫入的時候會有編碼問題,如下圖! 

然後通過desc ods_order 檢視 對應的comment中是中文的地方,通過Xshell顯示全部都是 "?" 問号.  同時确認了Xshell支援顯示中文(排除Xshell的問題).

以上就是說Hive在字段定義時的Comment中文亂碼問題.

hive中解決中文亂碼

有了上述的問題,那麼我們該如何去解決注釋中文亂碼問題呢? 

①修改編碼,設定為utf8

拷貝 mysql 的配置檔案/usr/share/mysql/my-small.cnf 到/etc/my.cnf 

在mysql 配置檔案/etc/my.cnf 中增加以下内容

 ②重新開機mysql 服務(這樣確定預設編碼是utf8)

③驗證編碼是否改成了utf8:

輸入指令 "\s"

hive中解決中文亂碼

輸入指令:show variables like 'char%' 

hive中解決中文亂碼

輸入指令:show variables like "colla%";

hive中解決中文亂碼

OK修改成功!

④這樣在啟動hive,向hive中插入的表中comment等有漢字的情況,就可以正常的顯示(如下為本人測試的部分顯示結果):

hive中解決中文亂碼
hive中解決中文亂碼

 ①修改編碼,設定為utf-8

 在 mysql 配置檔案/etc/my.cnf(不需要拷貝)中[mysqld]的下面增加以下内容

hive中解決中文亂碼

②重新開機mysqld服務

③ 和離線方式一樣驗證編碼是否确實修改;

hive中解決中文亂碼

因為我們知道 metastore 支援資料庫級别,表級别的字元集是 latin1,那麼我們隻需要把相應注釋的地方的字元集由 latin1 改成 utf-8,就可以了。用到注釋的就三個地方,表、分區、視圖。如下修改分為兩個步驟:

 (1)、進入資料庫 Metastore 中執行以下 5 條 SQL 語句 

 ①修改表字段注解和表注解

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

② 修改分區字段注解:

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;

③修改索引注解:

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

 (2)、修改 metastore 的連接配接 URL

測試結果: 

hive中解決中文亂碼

以上就能完美的解決這個問題.

本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/7469476.html,如需轉載請自行聯系原作者