org.apache.hadoop.hbase.TableNotFoundException:与Phoenix 4.5.2的SYSTEM.CATALOG异常

时间:2015-10-16 17:17:08

标签: hadoop hbase phoenix

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

Hadoop Version : 2.7.1
HBase Version : 1.1.2

当我尝试从我的凤凰客户端创建表时,我遇到了异常。但我能够从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是否兼容。

6 个答案:

答案 0 :(得分:4)

清理zookeeper将解决问题。

ImageViews

注意: - 在使用上述命令之前,您需要关闭master和regionserver。

答案 1 :(得分:1)

以下是您需要做的事情:

  1. 登录hbase zookeeper cli:hbase zkcli
  2. 通过发出:ls / hbase / table
  3. 检查SYSTEM.CATALOG,SYSTEM.SEQUENCE,SYSTEM.STATS和SYSTEM.FUNCTION是否存在
  4. 如果是......那么这就是解决方案:)
  5. 删除所有上述目录:即来自相同的cli问题rmr /hbase/table/SYSTEM.CATALOG。对所有上述四个文件执行此操作
  6. 重复生理盐水...并微笑

答案 2 :(得分:0)

根据你给出的日志,

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

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

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

答案 3 :(得分:0)

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

bin/hbase clean --cleanAll

这解决了我的问题。

答案 4 :(得分:0)

以上仅使用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客户端的连接问题。

除了确保凤凰客户端库位于/ squirrel / lib文件夹中以便松鼠工作之外。

答案 5 :(得分:-1)

检查你的hdfs://.../hbase/data/default/是否存在SYSTEM.CATALOG?在此处输入图像描述

enter image description here

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