首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HBase 1.2.1无法连接的码头独立设备

HBase 1.2.1无法连接的码头独立设备
EN

Stack Overflow用户
提问于 2016-07-19 07:40:14
回答 1查看 2.6K关注 0票数 4

我想使用Java和HBase API连接到独立地运行在坞中的HBase。

我使用此代码连接:

代码语言:javascript
复制
Configuration config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "163.172.142.199");
config.set("hbase.zookeeper.property.clientPort","2181");
HBaseAdmin.checkHBaseAvailable(config);

这是我的/etc/host文件

代码语言:javascript
复制
127.0.0.1   localhost
XXX.XXX.XXX.XXX hbase-srv

下面是我的停靠程序的/etc/host文件(名为hbase)

代码语言:javascript
复制
XXX.XXX.XXX.XXX hbase-srv

使用此配置,我得到一个连接拒绝错误:

代码语言:javascript
复制
 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)

但是,如果从两个XXX.XXX.XXX.XXX hbase-srv文件中删除/etc/hosts行,则会得到错误unknown host : hbase-srv

我也检查过了,我可以在客户端端口上成功地向我的hbase对接者发电话。

在码头上,HBase使用的所有端口都被打开并绑定到相同的号码(60000在60000,2181在2181,等等)。

我还想补充一点,当我在localhost上使用这个配置时,一切都很好。

如果你不能回答我的问题,你能至少给我一个程序来部署一个独立的hbase的码头。

更新:这是我的码头文件

代码语言:javascript
复制
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和udp打开端口,但仍然存在相同的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 07:32:25

Dockerfile有两个问题:

  1. 使用hbase master start而不是start-hbase.sh
  2. 区域化服务器实际上不在60020上运行。

第二个问题不是那么容易解决的。如果使用版本>= 1.2.0单独运行hbase (不确定,我正在运行1.2.0),则hbase将使用临时端口,而不是您在hbase-site.xml中提供的默认端口或端口,这使得很难使用原始版本在码头上提供hbase服务。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38452284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档