2017-04-20 20 views
0

我在一个Docker容器中启动hbase并希望客户端代码能够连接到hbase rpc服务器端口。问题是:它总是不同(从短暂端口范围中随机选择)。如何指定hbase的RPC服务器端口?

寻找通过HBase的代码(https://github.com/apache/hbase/blob/9facfa550f1e7386be3a04d84f7e8013f5002965/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java,bindAddress从管线1078)我发现我可以通过设置 “hbase.regionserver.port” 或 “hbase.master.port” 覆盖端口。

我试着在HBase的-conf.xml中,但没有任何效果设置这些 - 端口仍然是随机的,因为如果这些属性被解析为0

如何改变这种状况?

+0

默认情况下,它们是用于master和regionserver的'16000'和'16020'。什么让你觉得他们是随机选择的? – franklinsijo

+0

hbase log:'ipc.RpcServer:master/localhost/127.0.0.1:0:启动10个端口读取器= 40897' 在这种情况下,它的端口是'40897',但每次都不一样。它可能受到其他一些属性的控制,但是从我指定的源代码中应该查看** hbase.regionserver.port **,对吗? – Art

回答

0

找到解决方案。默认情况下,Hbase以独立模式启动并且随机选择端口。所以读完doc后,我编辑的HBase的-site.xml中看起来像这样:

<configuration> 
<property> 
    <name>hbase.cluster.distributed</name> 
    <value>true</value> 
</property> 
<property> 
    <name>hbase.regionserver.ipc.address</name> 
    <value>0.0.0.0</value> 
</property> 
<property> 
    <name>hbase.master.ipc.address</name> 
    <value>0.0.0.0</value> 
</property> 

请注意,我做它在分布式模式运行(伪分布于我的情况),并将master和regionserver的ipc listen地址设置为0.0.0.0(否则,您仍然无法从Docker容器外部连接)。这些更改后端口变得稳定,所以一切都很好。

附加说明:切换到分布式模式后,我必须在hbase-env.sh中专门设置JAVA_HOME。这可以在文档中找到。

相关问题