升级配置单元时重复键名称

时间:2017-10-18 10:26:49

标签: hadoop hive

尝试将hive从2.1.0升级到2.3.0时遇到以下错误 (实际上将emr 5.7.0升级到5.8.0)

init hive-metastore schema]/returns: 0: jdbc:mysql://connection_string-> CREATE INDEX PCS_STATS_IDX ON PART_COL_STATS (DB_NAME,TABLE_NAME,COLUMN_NAME,PARTITION_NAME) USING BTREE Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061) Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: Closing: 0: jdbc:mysql://connection_string:3306/hive?createDatabaseIfNotExist=true Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !! Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: at org.apache.hive.beeline.HiveSchemaTool.doInit(HiveSchemaTool.java:586) Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: ... 8 more Notice: /Stage[main]/Hadoop_hive::Init_metastore_schema/Exec[init hive-metastore schema]/returns: *** schemaTool failed ***

有没有办法解决而无需在hive外部Metastore中手动删除已创建的索引PCS_STATS_IDX?

2 个答案:

答案 0 :(得分:0)

这也是我在EMR集群的RDS实例上观察到的外部hive Metastore数据库的事情。对于任何emr-5 +版本,AWS似乎没有一个好的解决方法 - 如果已经创建了Metastore架构,它几乎应该能够跳过这些init hive-Metoreore脚本。解决此问题的一种可能方法是让EMR启动其自己的hive本地Metastore(因此启动EMR集群而不更改初始hive-site.xml),并在集群启动后运行停止的EMR步骤hive-server2 sudo stop hive-server2,修改/etc/hive/conf/hive-site.xml,通过插入以下属性将Hive Metastore指向外部RDS实例:

      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>username</value>
      </property>

      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>password</value>
      </property>

      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://<rds instance connection string>:3306/db_name?createIfNotExist=true</value>
      </property>

然后重启hive-server2(sudo start hive-server2)。

答案 1 :(得分:0)

这可能是因为您的Hive Distribution版本和Metastore架构版本不同。 使用@ [Kyle Meyer]方式启动你的emr并执行以下命令来检查版本: schematool -dbType dbType -info 如果它们不匹配使用schematool从2.1.0升级到2.3.0: schematool -dbType mysql -initSchemaTo 2.3.0

这将为您提供您现在面临的错误。要解决此问题,请使用SQL Workbench等任何客户端连接到数据库。它主要会给你一些错误,例如“table_name / Indexes已经存在”。 使用sql客户端删除这些表/索引。但是您必须一起删除这些表/索引。因此,您必须删除该表,然后执行该命令。如果它再次为某些其他表/索引提供错误,则必须删除以前的表以及错误中的当前表。这需要时间,但您可以升级架构。