微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 在Docker中独立的HBase 1.2.1无法连接

我想使用Java和HBase API连接到docker中独立运行的HBase

我用这段代码连接:

Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "163.172.142.199");
config.set("hbase.zookeeper.property.clientPort","2181");
HBaseAdmin.checkHBaseAvailable(config);

这是我的/ etc / hosts文件

127.0.0.1   localhost
XXX.XXX.XXX.XXX hbase-srv

这是我的docker中的/ etc / hosts文件(名为hbase-srv)

XXX.XXX.XXX.XXX hbase-srv

使用此配置,我收到连接拒绝错误

 INFO | Initiating client connection, connectString=163.172.142.199:2181 sessionTimeout=90000 watcher=hconnection-0x6aba2b860x0, quorum=163.172.142.199:2181, baseZNode=/hbase
 INFO | opening socket connection to server 163.172.142.199/163.172.142.199:2181. Will not attempt to authenticate using SASL (unkNown error)
 INFO | Socket connection established to 163.172.142.199/163.172.142.199:2181, initiating session
 INFO | Session establishment complete on server 163.172.142.199/163.172.142.199:2181, sessionid = 0x15602f8d8dc0002, negotiated timeout = 40000
 INFO | Closing zookeeper sessionid=0x15602f8d8dc0002
 INFO | Session: 0x15602f8d8dc0002 closed
 INFO | EventThread shut down
org.apache.hadoop.hbase.MasterNotRunningException: com.google.protobuf.ServiceException: java.net.ConnectException: Connection refused
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$StubMaker.makeStub(ConnectionManager.java:1560)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation$MasterServiceStubMaker.makeStub(ConnectionManager.java:1580)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getKeepAliveMasterService(ConnectionManager.java:1737)
    at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.isMasterRunning(ConnectionManager.java:948)
    at org.apache.hadoop.hbase.client.HBaseAdmin.checkHBaseAvailable(HBaseAdmin.java:3159)
    at hbase.Benchmark.main(Benchmark.java:26)

但是,如果我从/ etc / hosts文件删除行XXX.XXX.XXX.XXX hbase-srv,我会得到错误的未知主机:hbase-srv

我也检查过,我可以成功telnet到客户端端口上的hbase docker.

在docker上,HBase使用的所有端口都打开并绑定到相同的数字(60000上为60000,2181上为2181等).

我还想补充说,当我在localhost上使用此配置时,一切都很好.

如果你不能给我一个问题的答案,你能否至少给我一个程序来在docker上部署一个独立的hbase.

更新:这是我的Docker文件

FROM java:openjdk-8

ADD hbase-1.2.1 /hbase-1.2.1

workdir /hbase-1.2.1
# ZooKeeper
EXPOSE 2181

# HMaster
EXPOSE 60000

# HMaster Web
EXPOSE 60010

# RegionServer
EXPOSE 60020

# RegionServer Web
EXPOSE 60030

EXPOSE 16010

RUN chmod 755 /hbase-1.2.1/bin/start-hbase.sh
CMD ["/hbase-1.2.1/bin/start-hbase.sh"]

我的HBase shell正在运行,我也尝试使用iptables为tcp和udp打开端口,但仍然是同样的问题

解决方法:

Dockerfile有两个问题:

>使用hbase master start而不是start-hbase.sh
> regionserver实际上没有在60020上运行

第二个问题并不那么容易解决.如果运行hbase standalone with version> = 1.2.0(不确定,我运行的是1.2.0),hbase将使用临时端口而不是认端口或你在hbase-site.xml中提供的端口很难使用原始版本在docker中提供hbase服务.

添加一个名为hbase.localcluster.port.ephemeral的属性,并设法在docker中构建一个独立的hbase,你可以参考here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐