把 hbase 分享给同学用后,突然想到能不能在 docker 上多开 hbase,然后远程连接。
首先要了解相关 api 的运行机制。
我们通过
conf= HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","39.99.156.XXX");
conf.set("hbase.zookeeper.property.clientPort","2181");
创建的连接,会向服务器对应的端口发送请求,然后再映射到 docker 容器上的端口,然后 hbase 会发送给客户端一个 Hostname
以及对应master
端口,然后客户端通过Hostname
以及端口的方式连接 master。
所以关键只需要做两件事:
1. 修改 docker 的宿主端口映射
2. 修改 docker 内容器的 hbase的master
端口
关于docker单纯搭建 hbase,网上 博客很多,这里就不介绍了
首先要有一个镜像
docker ps
已经运行了一个容器
我们发现宿主的2181,16000
端口都是已经绑定容器里对应的端口,也就是说这些端口都已经被占用了,所以新的容器我们要用新的宿主端口映射到 容器。
- 使用如下命令
docker run -d -h myhbase1 -p 2182:2181 -p 8081:8080 -p 8086:8085 -p 9091:9090 -p 9096:9095 -p 16001:16001 -p 16011:16011 -p 16202:16202 -p 16302:16302 --name hbase1 harisekhon/hbase
这个命令把宿主的2182
端口映射到容器的’2181’端口,也就是说我们只要访问宿主的 2182
端口,就可以进入容器的2181
端口。
- 进入容器修改
master
服务端口
首先进入容器
docker exec -it hbase1 bash
然后进入到 hbase 的配置文件里面修改端口
vi /hbase/conf/hbase-site.xml
增加如下配置
<property>
<name>hbase.master.port</name>
<value>16001</value>
</property>
然后重启 hbase
stop-hbase.sh
start-hbase.sh
然后在本地增加 hosts 映射
然后代码就只要修改
conf= HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum","39.99.156.XXX");
//把端口修改为2182就行了!
conf.set("hbase.zookeeper.property.clientPort","2182");