Java Docker中的HBase 1.2.1单机版无法连接

Java Docker中的HBase 1.2.1单机版无法连接,java,docker,connection,hbase,Java,Docker,Connection,Hbase,我想使用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(con

我想使用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(名为hbase srv)的/etc/hosts文件

通过此配置,我得到一个连接被拒绝错误:

 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外壳正在工作,我还尝试使用iptables for tcp和udp打开端口,但仍然存在相同的问题,Dockerfile有两个问题:

  • 使用
    hbase master start
    而不是
    start hbase.sh
  • regionserver实际上没有在60020上运行
  • 第二个问题不是那么容易解决的。如果运行版本>=1.2.0的hbase standalone(不确定,我正在运行1.2.0),hbase将使用临时端口,而不是默认端口或您在
    hbase site.xml
    中提供的端口,这使得使用原始版本在docker中提供hbase服务非常困难


    我添加了一个名为
    hbase.localcluster.port.ephemeral
    的属性,并在docker中构建了一个独立的hbase,您可以引用它

    你把所有必要的端口都暴露出来了吗?也许这篇文章可以给你一些提示。我使用了docker-P60000:60000等命令,但我不知道它是否与EXPOSE相同,我将在明天的工作中尝试并给出结果,谢谢!我已经尝试过暴露,但它不工作,我把我的dockerfile的问题,如果你能看到任何有价值的信息里面的工作!非常感谢你!谢谢你抽出时间。现在我的hbase部署在docker上,我可以请求it@sel-鱼你刚刚救了我的命。
    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"]