背景:
我在使用 scala 编写一个单元测试,要求自动化的完成写入和读取 Docker 环境下的 Hbase 。
这个是我自己编译的 https://hub.docker.com/r/geekyouth/hbase
启动参数:
docker run -d --name hbase --hostname hbase -p 2181:2181 -p 16000:16000 -p 16010:16010 -p 16020:16020 geekyouth/hbase:2.3.3
其中,连接 Hbase 的参数包含如下:
hbase.master: 127.0.0.1:16010
hbase.zookeeper.quorum: 127.0.0.1
hbase.zookeeper.property.clientPort: 2181
zookeeper.znode.parent: /hbase
必须在 hosts 文件配置如下,才能正常连接 hbase 读写:
127.0.0.1 hbase
现在的需求是,不允许修改 hosts 文件,如何实现本地开发机器上运行单元测试来读写 docker 容器中的 hbase ?
Hbase 的通信机制,其连接 Regionserver 是通过 Hostname:Port 的形式来连接的,zookeeper 返回的地址就是( Hostname:Port:startID )的格式,可以在 zk 上面找到( list /hbase/rs )。因此如果我们使用的是 Docker 容器本身 hostname,显然是无法通过客户端连接到 Hbase 的。