我在 HDFS 和 hive 实例运行时关闭了我的 HDFS 客户端。现在,当我重新登录 Hive 时,我无法执行任何 DDL 任务,例如“显示表”或“描述表名”等。它给了我如下错误

ERROR exec.Task (SessionState.java:printError(401)) - FAILED: Error in metadata: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

任何人都可以建议我需要做什么才能在不重新创建表的情况下实例化我的 metastore_db?否则,我必须再次重复创建整个数据库/模式的工作。

最佳答案

我已经解决了这个问题。这些是我遵循的步骤:

  • 转到 $HIVE_HOME/bin/metastore_db
  • 将 db.lck 复制到 db.lck1 并将 dbex.lck 复制到 dbex.lck1
  • 删除了 db.lck 和 dbex.lck 中的锁条目
  • 从 hive shell 以及所有正在运行的 HDFS 实例注销
  • 重新登录HDFS和hive shell。如果您运行 DDL 命令,它可能会再次为您提供“无法实例化 HiveMetaStoreClient 错误”
  • 现在将 db.lck1 复制回 db.lck 并将 dbex.lck1 复制回 dbex.lck
  • 从所有 hive shell 和 HDFS 实例注销
  • 重新登录,您应该会看到旧表

  • 注意:第 5 步可能看起来有点奇怪,因为即使删除了锁条目,它仍然会给出 HiveMetaStoreClient 错误,但它对我有用。

    优点:您不必重复重新创建整个数据库的工作。

    希望这有助于有人面临同样的错误。如果您觉得有用,请投票。提前致谢

    关于hadoop - 失败 : Error in metadata: java. lang.RuntimeException : Unable to instantiate org. apache.hadoop.hive.metastore.HiveMetaStoreClient,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16154060/

    10-12 23:48