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

weixin_38087753 2019-09-12 12:28:00
我想使用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打开端口,但仍然是同样的问题
...全文
28 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38102914 2019-09-12
  • 打赏
  • 举报
回复
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.

476

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧