①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;
不然會有類似如下的錯誤:

那麼怎麼修改mysql的編碼為utf8呢?這裡提供了線上安裝修改和離線方式安裝下的修改方式供大家選擇!
向hive的表中 建立表,表語句部分如下:
在建立表的時候,字段可以有 comment,但是 comment 建議不要用中文說明,因為我們說過,hive 的 metastore 支援的字元集是 latin1,是以中文寫入的時候會有編碼問題,如下圖!
然後通過desc ods_order 檢視 對應的comment中是中文的地方,通過Xshell顯示全部都是 "?" 問号. 同時确認了Xshell支援顯示中文(排除Xshell的問題).
以上就是說Hive在字段定義時的Comment中文亂碼問題.
有了上述的問題,那麼我們該如何去解決注釋中文亂碼問題呢?
①修改編碼,設定為utf8
拷貝 mysql 的配置檔案/usr/share/mysql/my-small.cnf 到/etc/my.cnf
在mysql 配置檔案/etc/my.cnf 中增加以下内容
②重新開機mysql 服務(這樣確定預設編碼是utf8)
③驗證編碼是否改成了utf8:
輸入指令 "\s"
輸入指令:show variables like 'char%'
輸入指令:show variables like "colla%";
OK修改成功!
④這樣在啟動hive,向hive中插入的表中comment等有漢字的情況,就可以正常的顯示(如下為本人測試的部分顯示結果):
①修改編碼,設定為utf-8
在 mysql 配置檔案/etc/my.cnf(不需要拷貝)中[mysqld]的下面增加以下内容
②重新開機mysqld服務
③ 和離線方式一樣驗證編碼是否确實修改;
因為我們知道 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
測試結果:
以上就能完美的解決這個問題.
本文轉自SummerChill部落格園部落格,原文連結:http://www.cnblogs.com/DreamDrive/p/7469476.html,如需轉載請自行聯系原作者