使用 java 的 Titan-1.0.0+Hbase-0.98.20 远程模式连接错误

A connection error in remote mode of Titan-1.0.0+Hbase-0.98.20 using java

我正在学习 Titan 数据库。我 运行 它在本地模式下成功。现在,我正在尝试使用 Titan 文档中介绍的 "Remote Server Mode" 中的 Titan 数据库。我的 Titan 版本是 Titan-1.0.0-hadoop1.

我的 LAN 中有集群,包括 cloud12cloud13。我在上面安装了hadoop-1.2.1,master是cloud12,slave是cloud13.

我想测试创建图的性能,所以我设计在机器 cloud12 上以伪分布式模式启动我的 Hbase-0.98.20,独立的 zookeeper-3.4.6 和 elasticsearch cloud12.(我修改了hbase-env.sh,在zoo.cfg中使用默认端口2181)

Hadoop 和 HBase 似乎正常工作,我通过 Jps 检查了两台服务器,我还通过 HBase 检查了 HBase shell。

这是我的 hbase-site.xml 配置:

<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://cloud12:9000/hbase</value>
</property>

<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>

<property>
<name>hbase.master.port</name>
<value>60000</value>
</property>

<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/Titan/hbase/zookeeperDir</value>
</property>

<property>
<name>hbase.tmp.dir</name>
<value>/home/Titan/hbase/tmpDir</value>
</property>

<property>
<name>hbase.zookeeper.property.clientPort</name>
<value>2181</value>
</property>

<property>
<name>zookeeper.znode.parent</name>
<value>/hbase-unsecure</value>
</property>

<property>
<name>hbase.zookeeper.property.maxClientCnxns</name>
<value>600</value>
</property>
</configuration>

虽然我运行我在局域网中另一台名为cloud6的机器上的Eclipse中的程序(我在这台机器上安装了Titan-1.0.0),我的程序打印了一个混乱的错误信息输出日志。

这是我输出中不断重复的错误

789 [main] INFO org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString=192.168.12.148:2181 sessionTimeout=90000 watcher=hconnection-0x12d3a4e9, quorum=192.168.12.148:2181, baseZNode=/hbase

870 [main] INFO org.apache.hadoop.hbase.zookeeper.RecoverableZooKeeper - Process identifier=hconnection-0x12d3a4e9 connecting to ZooKeeper ensemble=192.168.12.148:2181

878 [main-SendThread(192.168.12.148:2181)] INFO org.apache.zookeeper.ClientCnxn - Opening socket connection to server 192.168.12.148/192.168.12.148:2181. Will not attempt to authenticate using SASL (unknown error)

1030 [main-SendThread(192.168.12.148:2181)] INFO org.apache.zookeeper.ClientCnxn - Socket connection established to 192.168.12.148/192.168.12.148:2181, initiating session

1049 [main-SendThread(192.168.12.148:2181)] INFO org.apache.zookeeper.ClientCnxn - Session establishment complete on server 192.168.12.148/192.168.12.148:2181, sessionid = 0x15654717951001b, negotiated timeout = 40000

1054 [main] INFO org.apache.hadoop.hbase.client.ZooKeeperRegistry - ClusterId read in ZooKeeper is null

在ZooKeeper中读到的ClusterId为null?我真是一头雾水。我试图解决问题,我发现我的错误与许多其他错误相似,但我无法从 Google 或其他网站获得明确的答案。我的架构设计有错误吗?还是配置错误?

我可以确保我的主机和集群的时间都是正确的。这是我的程序的一部分,用于从 cloud6 连接 cloud12 上的 Hbase,我的代码有什么错误或不足吗?

  public static final String INDEXNAME = "search"; 
  ...
  BaseConfiguration conf=new BaseConfiguration();
  conf.setProperty("storage.backend", "hbase");
  conf.setProperty("storage.hostname", "192.168.12.148");//ip of cloud12
  conf.setProperty("storage.tablename", "graph1");
  conf.setProperty("index." + INDEXNAME + ".backend", "elasticsearch");
  conf.setProperty("index." + INDEXNAME + ".hostname", "192.168.12.148"); 
  conf.setProperty("index." + INDEXNAME + ".elasticsearch.local-mode", false);  
  conf.setProperty("index." + INDEXNAME + ".elasticsearch.client-only", true); 

由于您使用的是 external Zookeeper 集成,因此需要检查一些事项:

  1. hbase-site.xml中添加hbase.zookeeper.quorum属性值。该值应该是以逗号分隔的 Zookeeper 节点列表。默认为 localhost.

  2. export HBASE_MANAGES_ZK=false 添加到 hbase-env.sh。默认为 true.

  3. 确保 hbase-site.xml 中的 zookeeper.znode.parent 属性 值与 Titan 配置中 storage.hbase.ext.zookeeper.znode.parent 的值相匹配。它默认为 /hbase。如果这些值不匹配,Titan connection to HBase will hang.

  4. 确保 zoo.cfg 中的 clientPort 属性 值与 hbase-site.xml 中的 hbase.zookeeper.property.clientPort 值匹配,并且还匹配 storage.hbase.ext.hbase.zookeeper.property.clientPort 泰坦配置中的值。它默认为 2181。如果这些不匹配,您会在日志中看到连接异常。

  5. 确保 Zookeeper 节点正在使用可访问的 IP 地址(而不是 localhost)侦听 clientPort

一旦您确认可以连接到您的 Titan table,我认为 INFO 消息可以安全地忽略。您可以通过 log4j.properties:

中的设置切换日志记录级别
log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop.hbase.client=WARN
log4j.logger.org.apache.hadoop.hbase.zookeeper=WARN

还有一个针对 Titan 的 open issue 来调查为什么 Zookeeper 客户端连接如此频繁。

我也遇到了这个问题。 只需将zookeeper3.4.5升级到zookeeper3.4.6,并同步时间, 但是仍然有很多信息消息,所以我像这样修改了log4j:

log4j.properties: log4j.logger.org.apache.zookeeper=WARN log4j.logger.org.apache.hadoop.hbase.client=WARN log4j.logger.org.apache.hadoop.hbase.zookeeper=WARN

还可以,