我在分布式模式下安装了Hbase。数据库工作正常,如果我的webapp(spring + datanucleus JDO)部署在与Hbase主机相同的机器上,我就能连接到数据库。
但如果我在另一台机器上运行相同的webapp,我将无法连接到HBase服务器。没有任何例外,webapp只是暂停和几分钟后停止。我的配置文件如下:
hbase-site.xml - >
<configuration>
<property>
<name>hbase.zookeeper.quorum</name>
<value><IP>:2181</value>
<description>The host and port that the HBase master runs at.
</description>
</property>
</configuration>
datanucleus.properties - &gt;
javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.api.jdo.JDOPersistenceManagerFactory
javax.jdo.option.ConnectionURL=hbase:
datanucleus.autoCreateSchema=true
datanucleus.autoCreateTables=true
datanucleus.autoCreateColumns=true
datanucleus.cache.level2.type=none
我在这里做错了什么。以及客户端机器应该可以访问的所有端口(在生产中我们只打开所需的端口)。
由于
答案 0 :(得分:1)
HBase对/ etc / hosts配置非常敏感。我必须正确设置hbase-site.xml中的zeekeeper bindings属性才能使上面提到的Java代码工作...例如:我有设置如下:
{property}
{name}hbase.zookeeper.quorum{/name}
{value}www.remoterg12.net{/value} {!-- this is the externally accessible domain --}
{/property}
{property}
{name}hbase.zookeeper.property.clientPort{/name}
{value}2181{/value} {!-- everything needs to be externally accessible --}
{/property}
{property}
{name}hbase.master.info.port{/name} {!-- http://www.remoterg12.net:60010/ --}
{value}60010{/value}
{/property}
{property}
{name}hbase.master.info.bindAddress{/name}
{value}www.remoterg12.net{/value} {!-- Use this to access the GUI console, --}
{/property}
远程GUI将为您提供绑定域的清晰图片。例如,“GUI Web控制台”中的[HBase Master]属性应该是这样的:www.remoterg12.net:60010(它应该不是localhost:60010)...和YES !!,我确实必须正确使用/ etc / hosts,因为我不想搞乱现有的Apache配置: - )
答案 1 :(得分:0)
人们有时不会想到的一个令人惊讶的事情:通常大多数群集都隐藏在交换机后面。如果您的所有机器IP地址都是198,则通常会出现这种情况。。。*。如果您尝试访问群集的计算机不在同一网络中,则无法使用hbase。这是因为您的hbase连接是从客户端直接连接到托管数据的节点。它们不会通过您习惯登录的双宿主节点。
除了将您的应用程序放在可以看到世界其他地方的双宿主节点上之外,我不知道有什么好的工作。或者在该节点上设置某种网关。这可能是像JDO这样的库的问题
答案 2 :(得分:0)
注意,我没有使用DataNucleus。但是,当我们将Master与客户分开时,我们必须调整配置。
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", SERVER);
conf.set("hbase.zookeeper.property.clientPort", PORT);
您可以查看您的HBase Web shell(通常:主盒上的localhost:60010)并获取ZK转储。检查你是否连接到ZK。