如何为hbase指定RPC服务器端口?

How to specify RPC server port for hbase?

我在 docker 容器中启动 hbase,并希望客户端代码能够连接到 hbase rpc 服务器端口。问题是:它总是不同的(从临时端口范围内随机选择)。

查看 hbase 代码(https://github.com/apache/hbase/blob/9facfa550f1e7386be3a04d84f7e8013f5002965/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RSRpcServices.java,第 1078 行的 bindAddress)我发现我可以通过设置“hbase.regionserver.port”或“hbase.master.port”。

我尝试在 hbase-conf.xml 中设置这些但没有任何效果 - 端口仍然是随机的,就好像这些属性被解析为 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>

注意我正在运行分布式模式(在我的例子中是伪分布式)并将两者的 ipc 侦听地址设置为 0.0.0.0 master 和 regionserver(否则你仍然无法从 docker 容器外部连接)。这些更改后端口变得稳定,所以一切都很好。

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