2012-10-18 30 views
2

我配置Hive以使用mysql Metastore。它工作正常。创建Hive表会自动更改mysql Metastore的字符集设置

但是,当我尝试删除表格时,出现如下所示的错误。

FAILED: Error in metadata: javax.jdo.JDODataStoreException: Error(s) were found while auto-creating/validating the datastore for classes. The errors are printed in the log, and are attached to this exception. 
NestedThrowables: 
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes 
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 

我做了一些研究,谷歌和official faq告诉我,改变MySQL字符集设置将解决这个问题。

我的MySQL设置如下

mysql> show variables like '%char%'; 
+--------------------------+----------------------------------------+ 
| Variable_name   | Value         | 
+--------------------------+----------------------------------------+ 
| character_set_client  | utf8         | 
| character_set_connection | utf8         | 
| character_set_database | utf8         | 
| character_set_filesystem | binary         | 
| character_set_results | utf8         | 
| character_set_server  | utf8         | 
| character_set_system  | utf8         | 
| character_sets_dir  | /usr/local/mysql/share/mysql/charsets/ | 
+--------------------------+----------------------------------------+ 
8 rows in set (0.02 sec) 

我改变了所有的字符集设置从utf8latin1,除了character_set_filesystemcharacter_set_systemcharacter_sets_dir

即使这样做,当我尝试删除表格时,仍然会出现相同的错误。 更糟糕的是,每当我创建一个新表时,mysql字符集设置将重置为utf-8

任何人都可以帮忙吗?

回答

5

的问题是,在蜂房的site.xml它在波纹管

<property> 
<name>javax.jdo.option.ConnectionURL</name> 
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value> 
</property> 

改变使用其他数据库中创建“蜂巢”数据库名称“metastore”你哈得已经像MySQL创建这

<property> 
<name>javax.jdo.option.ConnectionURL</name> 
<value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true</value> 
</property> 

希望这REGLE的问题,我有同样的问题,我固定它这样。 freindly Matouk