首先mysql 字符集修改
1:[client] 下面增加:
default-character-set = utf8
2:[mysqld]下面增加:
character-set-server = utf8
3:[mysql] 下面增加:
default-character-set = utf8
4:重启mysql数据库:service mysqld restart
5:hive-site.xml配置文件中指定utf-8:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://IP:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
6:启动hive,执行show tables;
第一次执行hive会创建相关元数据库表,此时会报错,具体原因是package.jdo中定义的字段太长,因为默认是按照latin1编码的长度,utf8编码的话要长度缩小3倍。
latin1编码的index和pk字段都有长度限制最大为767,utf8的话最大只能设置255了。所以就有下一步操作
7:修改hive-metastore-0.10.0-cdh4.2.2.jar中的package.jdo文件,将index和pk字段的长度大于255的字段定义都改小,默认是缩小3倍把。比如原文件定义的是256,那么改成85.
然后把修改好的jar包替换掉HIVE_HOME/lib目录下的hive-metastore-0.10.0-cdh4.2.2.jar。
8:删除mysql中的hive元数据库,drop database hive; 删除hdfs上的 /user/hive目录和/tmp/hive-hadoop目录(如果有的话)
9:重新运行hive命令,执行show tables;重新创建元数据库表。此时应该能够创建成功,不会报哪个超过767长度的错误了。
10:测试一下load中文分区:
create table userinfo(id int ,name string,age int) partitioned by (province string) row format delimited fields terminated by '\t';
load data local inpath '/home/hadoop/hive_example_data/province_jx.txt' overwrite into table userinfo partition (province='上海');
select * from userinfo;
查询结果能够正常显示中文的分区。
但是show partitions userinfo;显示的分区还是乱码,没解决。
1:[client] 下面增加:
default-character-set = utf8
2:[mysqld]下面增加:
character-set-server = utf8
3:[mysql] 下面增加:
default-character-set = utf8
4:重启mysql数据库:service mysqld restart
5:hive-site.xml配置文件中指定utf-8:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://IP:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
6:启动hive,执行show tables;
第一次执行hive会创建相关元数据库表,此时会报错,具体原因是package.jdo中定义的字段太长,因为默认是按照latin1编码的长度,utf8编码的话要长度缩小3倍。
latin1编码的index和pk字段都有长度限制最大为767,utf8的话最大只能设置255了。所以就有下一步操作
7:修改hive-metastore-0.10.0-cdh4.2.2.jar中的package.jdo文件,将index和pk字段的长度大于255的字段定义都改小,默认是缩小3倍把。比如原文件定义的是256,那么改成85.
然后把修改好的jar包替换掉HIVE_HOME/lib目录下的hive-metastore-0.10.0-cdh4.2.2.jar。
8:删除mysql中的hive元数据库,drop database hive; 删除hdfs上的 /user/hive目录和/tmp/hive-hadoop目录(如果有的话)
9:重新运行hive命令,执行show tables;重新创建元数据库表。此时应该能够创建成功,不会报哪个超过767长度的错误了。
10:测试一下load中文分区:
create table userinfo(id int ,name string,age int) partitioned by (province string) row format delimited fields terminated by '\t';
load data local inpath '/home/hadoop/hive_example_data/province_jx.txt' overwrite into table userinfo partition (province='上海');
select * from userinfo;
查询结果能够正常显示中文的分区。
但是show partitions userinfo;显示的分区还是乱码,没解决。