【问题标题】:Hbase client hardcoding regionserverHbase 客户端硬编码 regionserver
【发布时间】:2020-07-14 08:51:40
【问题描述】:

我正在尝试配置一个 hbase 客户端以连接到在 docker 容器中运行的 HBase。鉴于它是出于集成测试目的,我们可以将 master 和 regionserver 硬编码(它们都放在同一个地址)。

我们使用 cloudera 发行版,但我想这应该是一样的。我在 org.apache.hadoop.conf.Configuration 中定义了“hbase.master”

configuration.set("hbase.master", config.getMaster());

它似乎被接受了(在 SO 中查看了其他提到这一点的问题)。

但尝试对区域服务器执行类似操作,如 http://archive.cloudera.com/cdh5/cdh/5/hbase-0.98.6-cdh5.3.4/book/config.files.html 中所述

configuration.set("hbase.regionserver.port", config.getRegionserver());

我可以看到这仍然是从 Zookeeper 中检索到的,因为错误显示无法连接到 60002 的套接字,这是 regionserver 端口号(我放入配置中的那个是在 Docker 中声明的另一个。

【问题讨论】:

  • 不确定它是否有帮助,但为了提供一些上下文,我们正在使用 testcontainers 并且我们也在旋转 SocatContainer 实例,就像他们在这里所做的那样github.com/testcontainers/testcontainers-java/blob/1.11.2/… 进行这种重定向是有效的,但是 Hbase客户很固执,只接受 ZK 告诉他的内容
  • 不确定我是否理解正确,但是为什么您的客户端需要连接到主服务器和区域服务器?您需要连接到 zooekeper 仲裁。如果在您的测试环境中这些恰好是同一台机器,也不会感到惊讶,但从技术上讲,它们是侦听不同端口的不同进程。
  • 确实,hbase 客户端只需要配置 ZK quorum。但在内部,客户端将根据 Zookeeper 将拥有的 hbase 属性与 master 和 regionserver 建立连接。这只是 e2e 测试或集成测试中重要的情况

标签: docker hbase


【解决方案1】:

将条目放在 /etc/hosts 中的第一个更简单的方法是使 hbase 服务器名称指向环回地址。

由于我们不想修改 CI 环境中的配置文件,我们发现的一种解决方法是根据这个答案设置我们自己的主机名解析器 https://stackoverflow.com/a/43870031/3774176

仅适用于JDK8,但除此之外,还有类似的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多