首页 > 解决方案 > S3 支持的 EMR HBase 只读副本无法通过 Java API 连接

问题描述

问题介绍

我正在使用使用 HBase 1.4.10 版本的 AWS EMR 5.29 版本。我正在尝试将 Geomesa 与 HBase 只读集群连接起来。通过 AWS ECS 服务(使用 HBase Java 客户端代码)连接到 EMR 集群时,出现以下错误:

`引起:org.apache.hadoop.hbase.NotServingRegionException: org.apache.hadoop.hbase.NotServingRegionException: Region hbase:meta,,1 is not online on ip-10-0-xx-xxx.ec2.internal,16020 ,1585249817xxx

上面的异常是从这里抛出的。很明显,我能够连接到 zookeeper,但由于 hbase:meta 表而失败。`

笔记

我能够成功连接读写集群。问题仅在于只读Cluster.Hbase 和 Geomesa shell 工作正常。我能够通过外壳获取数据。该问题仅与 HBase 或 Geomesa Java 客户端有关。

潜在问题

EMR 上的 HBase (由 S3 支持)使用元数据表名称作为“hbase:meta_”,例如只读集群的 hbase:meta_j-1ExxxHC16Oxxx。这里的代码使用 hbase:meta 作为常量。我认为这里需要进行更改才能从配置中读取它。

要求

有人遇到过这个问题吗?有没有办法克服这个问题?有什么配置可以帮助解决这个问题吗?

我已经尝试设置hbase.meta.table.suffix为 clusterId 但它不起作用。

标签: amazon-web-servicesamazon-s3hbaseamazon-emrgeomesa

解决方案


只读集群是 AWS 特有的功能。为了添加这个功能,亚马逊在他们的 HBase jars 中有自定义代码。您在 EMR 集群上拥有的 hbase-server-1.4.10.jar 与您从 Apache 获得的 hbase-server-1.4.10.jar 不同。这意味着为了让客户端代码支持此功能,您需要在任何地方使用 AWS jar。您可以直接从正在运行的 EMR HBase 集群下载 jar,或者您可以通过在您的<repositories>部分中首先指定它来使用 Amazon maven 存储库:

<repository>
    <id>emr-${aws-emr.version}-artifacts</id>
    <name>EMR ${aws-emr.version} Releases Repository</name>
    <releases>
        <enabled>true</enabled>
    </releases>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
    <url>https://s3.us-west-1.amazonaws.com/us-west-1-emr-artifacts/emr-${aws-emr.version}/repos/maven/</url>
</repository>

推荐阅读