【问题标题】:org.apache.hadoop.hbase.TableNotFoundException: SYSTEM.CATALOG exception with phoenix 4.5.2org.apache.hadoop.hbase.TableNotFoundException:凤凰 4.5.2 的 SYSTEM.CATALOG 异常
【发布时间】:2015-10-16 17:17:07
【问题描述】:

我一直在尝试将 Phoenix 4.5.2 集成到我现有的 hadoop 集群中。

Hadoop Version : 2.7.1
HBase Version : 1.1.2

当我尝试从我的 phoenix 客户端创建表时,我遇到了以下异常。但我可以从 HBase 控制台成功创建表。

org.apache.phoenix.exception.PhoenixIOException: SYSTEM.CATALOG
    at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:108)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1051)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1014)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.createTable(ConnectionQueryServicesImpl.java:1259)
    at org.apache.phoenix.query.DelegateConnectionQueryServices.createTable(DelegateConnectionQueryServices.java:113)
    at org.apache.phoenix.schema.MetaDataClient.createTableInternal(MetaDataClient.java:1937)
    at org.apache.phoenix.schema.MetaDataClient.createTable(MetaDataClient.java:751)
    at org.apache.phoenix.compile.CreateTableCompiler$2.execute(CreateTableCompiler.java:186)
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:320)
    at org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:312)
    at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
    at org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:310)
    at org.apache.phoenix.jdbc.PhoenixStatement.executeUpdate(PhoenixStatement.java:1422)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1927)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1896)
    at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1896)
    at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:180)
    at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:132)
    at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:151)
    at org.apache.tools.ant.taskdefs.JDBCTask.getConnection(JDBCTask.java:370)
    at org.apache.tools.ant.taskdefs.SQLExec.getConnection(SQLExec.java:940)
    at org.apache.tools.ant.taskdefs.SQLExec.execute(SQLExec.java:612)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.helper.SingleCheckExecutor.executeTargets(SingleCheckExecutor.java:38)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.taskdefs.Ant.execute(Ant.java:440)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
    at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1364)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1248)
    at org.apache.tools.ant.Main.runBuild(Main.java:851)
    at org.apache.tools.ant.Main.startAnt(Main.java:235)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
Caused by: org.apache.hadoop.hbase.TableNotFoundException: SYSTEM.CATALOG
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1257)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1155)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1139)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1096)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getRegionLocation(ConnectionManager.java:931)
    at org.apache.hadoop.hbase.client.HRegionLocator.getRegionLocation(HRegionLocator.java:83)
    at org.apache.hadoop.hbase.client.HTable.getRegionLocation(HTable.java:496)
    at org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:736)
    at org.apache.hadoop.hbase.client.HTable.getKeysAndRegionsInRange(HTable.java:706)
    at org.apache.hadoop.hbase.client.HTable.getStartKeysInRange(HTable.java:1760)
    at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1715)
    at org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1695)
    at org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1034)
    ... 49 more

请指出这里出了什么问题,Phoenix 4.5.2 是否与 HBase 1.1.2 兼容。

【问题讨论】:

  • 看起来 Phoenix 无法创建自己的附加(元)表。您能否附加在通过 Phoenix 连接到 HBase 期间创建的 HBase 日志(sqlline.py localhost 命令)。 Apache Phoenix 在第一次连接时创建这些表。

标签: hadoop hbase phoenix


【解决方案1】:

清除zookeeper即可解决问题。

bin/hbase clean --cleanZk

注意:- 在使用上述命令之前,您需要关闭您的主服务器和区域服务器。

【讨论】:

  • ZNode(s) [sandbox-hdp.hortonworks.com,16020,1549335973089] of regionservers are not expired. Exiting without cleaning hbase data. 我关闭了master和regionserver。
【解决方案2】:

这是你需要做的:

  1. 登录 hbase zookeeper cli:hbase zkcli
  2. 通过发出以下命令检查 SYSTEM.CATALOG、SYSTEM.SEQUENCE、SYSTEM.STATS 和 SYSTEM.FUNCTION 是否存在:ls /hbase/table
  3. 如果是这样...那么这就是解决方案:)
  4. 删除所有上述目录:即从同一个 cli 问题 rmr /hbase/table/SYSTEM.CATALOG。对上述所有四个文件执行此操作
  5. 重试盐水……然后微笑

【讨论】:

    【解决方案3】:

    我有一个嵌入式 HBase,在手动删除 HBase 数据后出现此错误,因此我不得不清理 Zookeeper 和 HBase 的其余部分:

    bin/hbase clean --cleanAll
    

    这解决了我的问题。

    【讨论】:

      【解决方案4】:

      根据你给定的日志,

      Pheonix 试图在 Hbase 中创建一个名为 SYSTEM.CATALOG 的表。但是,由于 Hbase 的一些问题,它无法创建它。

      第一次从 Pheonix 连接到 Hbase 时创建表“SYSTEM.CATALOG”。

      因此,我建议检查您的 Pheonix 配置是否存在连接问题,例如 IP-Address 映射错误、忘记创建无密码 SSH 等。

      【讨论】:

        【解决方案5】:

        上面只运行zookeeper清理hbase数据的建议对我没有帮助。 fiannl 帮助我克服了这个错误并允许创建 SYSTEM.CATALOG 表和其他关联表的方法是将 hbase-site.xml 从 hbase 安装复制到 apache-phoenix 安装的 bin 文件夹中。

        在我的情况下,hbase conf 位于 /usr/local/hbase/conf 中,我将其复制到 /usr/local/apache-phoenix/bin 中。我只是将 bin 文件夹中已经存在的原始 hbase-site.xml 重命名为其他内容,作为备份。 这解决了 sqlline.py 以及 SQuirreL 客户端的连接问题。

        除了确保 phoenix 客户端库位于 /squirrel/lib 文件夹中以使 squirrel 正常工作之外。

        【讨论】:

          【解决方案6】:

          检查你的 hdfs://.../hbase/data/default/ 是否存在 SYSTEM.CATALOG ?在此处输入图片说明

          如果什么都没有,你必须在使用命令之前尝试使用 bin/hbase clean --cleanZk,你必须停止 hbase Master 和 regionServers,但仍然保持 ZK 存活。

          【讨论】:

            猜你喜欢
            • 2017-05-20
            • 1970-01-01
            • 2016-01-30
            • 2016-05-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多