amazon-web-services - 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 但它不起作用。
解决方案
只读集群是 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>
推荐阅读
- python-3.x - 如何在 Python 中附加单个字典键 (1_key : [N_values]) 的值列表?
- html - 图像网格未正确渲染
- javascript - javascript 类中的“SyntaxError:意外的标识符”
- reactjs - 在反应功能组件中定义功能的最佳方法?
- javascript - 「wds」:无效的配置对象。Webpack 已使用与 API 模式不匹配的配置对象进行初始化
- swift - 即使应用程序关闭,每月编译用户数据的最佳方式
- amazon-s3 - 如何使用 aws cli 授权 IAM 云端分发?
- javascript - 过滤数据 - 如何在 JavaScript 中过滤不需要的数据
- ios - 想要在应用程序快速终止之前做一些工作
- java - 如何使用 gradle type:exec 下载 apollo 模式