【发布时间】: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 测试或集成测试中重要的情况