如何解决使用 Phoenix 运行 HBase 只读副本 Amazon EMR 集群时出现的“Cache of region boundaries are out of date”错误?

上次更新日期:2020 年 4 月 13 日

当我尝试使用 Apache Phoenix 连接到 Amazon EMR 读取副本集群上的 Apache HBase 时,我收到如下错误消息:

Error: ERROR 1108 (XCL08): Cache of region boundaries are out of date. (state=XCL08,code=1108) org.apache.phoenix.schema.StaleRegionBoundaryCacheException: ERROR 1108
 (XCL08): Cache of region boundaries are out of date.
      at org.apache.phoenix.exception.SQLExceptionCode$14.newException(SQLExceptionCode.java:365)
      at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:150)
      at org.apache.phoenix.util.ServerUtil.parseRemoteException(ServerUtil.java:189)
      at org.apache.phoenix.util.ServerUtil.parseServerExceptionOrNull(ServerUtil.java:169)
      at org.apache.phoenix.util.ServerUtil.parseServerException(ServerUtil.java:140)

简短描述

默认情况下,Phoenix 会尝试连接到 hbase:meta 表。但是,由于 hbase:meta 表属于主集群,Phoenix 无法连接读取副本集群。要解决此问题,请修改 hbase-site.xml 以指向属于 HBase 读取副本集群的 hbase:meta_cluster-id 表。

解决方法

开始之前,请确认主集群和读取副本集群上已安装 Phoenix。如果主集群上未安装 Phoenix,则 Phoenix 无法从读取副本集群连接到 HBase。

正在运行的集群上

1.    将以下配置添加到主节点上的 HBase 配置文件 (/etc/phoenix/conf/hbase-site.xml)。将 cluster-id 替换为读取副本集群的 ID。

<property>
   <name>hbase.balancer.tablesOnMaster</name>
   <value>hbase:meta</value>
</property>
<property>
   <name>hbase.meta.table.suffix</name>
   <value>cluster-id</value>
</property>

2.    重新启动 Phoenix 服务:

sudo stop phoenix-queryserver
sudo start phoenix-queryserver

在 Amazon EMR 5.21.0 及更高版本中,您还可以通过覆盖主实例组的集群配置来进行这些配置更改:

1.    打开 Amazon EMR 控制台

2.    在集群列表中,选择要重新配置的活动读取副本集群。

3.    打开集群的集群详细信息页面,然后转至配置选项卡。

4.    在筛选条件下拉列表中,选择主实例组。

5.    在重新配置下拉菜单中,选择以表格式编辑

6.    选择添加配置 然后添加以下两个配置:

分类:phoenix-hbase-site
属性:hbase.balancer.tablesOnMaster
:hbase:meta

分类:phoenix-hbase-site
属性:hbase.meta.table.suffix
:${emr.clusterId}

7.    选择保存更改

有关此流程的更多信息,请参见在控制台中为实例组提供配置

在新集群上

使用 Amazon EMR 4.6.0 或更高版本启动集群时,添加配置对象类似于以下内容:

[
  {
    "Classification": "phoenix-hbase-site", 
    "Configurations": [
      ], 
    "Properties": {
      "hbase.balancer.tablesOnMaster" : "hbase:meta",
      "hbase.meta.table.suffix" : "${emr.clusterId}"
      }
  },
  {
    "Classification": "hbase-site", 
    "Configurations": [
      ], 
    "Properties": {
      "hbase.meta.table.suffix" : "${emr.clusterId}"
      }
  }
]

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?