hive乱码彻底解决方案全记录

hive乱码主要分为三种:

  1. 一种是hive cli查询乱码,但是在ambari端查看正常;
  2. 一种是导入汉字数据后,所有客户端方式查询都乱码;
  3. 一种是hive cli查询没有乱码,但是通过jdbc或者hiveserver2查询出现了乱码。

下面分别列出亲测可行的解决方案:

第一种:hive cli查询乱码,但是在ambari端查看正常

表现:在hive基础命令行下后查询时,中文出现乱码,但是ambari控制台界面显示正常。
原因:数据是正常的,但是使用hive命令行的ssh工具的编码问题
解决方案:把xshell,putty之类的远程终端的编码修改为UTF-8 ,然后重新连接即可。

第二种:导入包含汉字的文本数据后,hive查询出现乱码

表现:导入包含中文的文本数据后,使用hive cli及hiveserver2查询数据时,中文部分均出现乱码。
原因:编码不一致的问题,hive默认使用utf-8编码,导入的中文文本数据需要保证也是utf-8格式。
解决方案:首先在linux或者macos终端下,使用file 文件名 查看文本编码格式是不是utf-8。如果不是就需要改为utf-8,修改文本编码格式有两种常用方式:

  1. 使用一些常用文本工具,比如editplus,notepad++ 打开这个包含中文的文件,并修改它的编码格式为utf-8,保存即可;
  2. 在linux或者macOS终端下,使用vim编辑器修改,首先vim 文件名打开文件,然后在控制台输入:set fileencoding=utf-8,然后:wq保存退出即可。

第三种:hive cli查询没有乱码,但是通过jdbc或者hiveserver2查询出现了乱码。

表现:导入utf-8格式的文本数据后,基础的hive cli查询没有乱码,presto查询hive也没有出现乱码,但是hiveserver2查询却出现了乱码。
原因:这是由于hive-env.sh里面没有配置编码格式,导致hiveserver2查询出中文后,输出的格式发生了变化,导致了乱码。
解决方案:首先在在hive-env.sh文件的最后加上编码格式:

export HADOOP_OPTS="$HADOOP_OPTS -Dfile.encoding=UTF-8"

然后重启hiveserver2

bin/hiveserver2 restart

最后连接hiveserver2测试即可

/bin/beeline -u jdbc:hive2://localhost:10000

你可能感兴趣的:(HIVE)