设置regionserver和zookeeper仲裁的好方法是什么?
我有一个带有16个节点的小型hadoop集群。按照http://hbase.apache.org/book/example_config.html中给出的示例,我选择16个节点作为regionserver,将这些节点的子集作为zookeeper。
但是当一个节点在一个不在hbase.zookeeper.quorum对应列表中的节点启动时,我收到以下错误:
13/08/23 15:40:05 INFO zookeeper.ClientCnxn:打开套接字连接 到服务器localhost / 0:0:0:0:0:0:0:1:2181。不会尝试 使用SASL进行身份验证(未知错误)13/08/23 15:40:05警告 zookeeper.ClientCnxn:服务器null的会话0x0,意外错误, 关闭套接字连接并尝试重新连接 java.net.ConnectException:拒绝连接 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:592) 在 org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) 在 org.apache.zookeeper.ClientCnxn $ SendThread.run(ClientCnxn.java:1068) 13/08/23 15:40:05 INFO zookeeper.ClientCnxn:打开套接字连接 到服务器localhost / 127.0.0.1:2181。不会尝试进行身份验证 使用SASL(未知错误)13/08/23 15:40:05 INFO zookeeper.ClientCnxn:建立套接字连接 localhost / 127.0.0.1:2181,发起会议13/08/23 15:40:05警告 zookeeper.RecoverableZooKeeper:可能是短暂的ZooKeeper 例外: org.apache.zookeeper.KeeperException $ ConnectionLossException: KeeperErrorCode = ConnectionLoss for / hbase / hbaseid 13/08/23 15:40:05 INFO util.RetryCounter:在重试#1之前睡眠2000毫秒......
所以它试图连续600秒然后返回
任务attempt_xxx无法报告状态60秒。杀死!
经过几次尝试后,它会更改节点,如果新节点偶然属于zookeeper列表,则作业将成功完成。
这是正常的吗?
我最终将所有节点添加到zookeeper列表中,但我想知道这是否是一个好习惯。还有区域服务器列表应该与节点列表不同的任何地方吗?
谢谢
答案 0 :(得分:2)
不,看起来你所做的不是一个好习惯。对于16个RS群集,1个ZK节点应该没问题。
要使ZooKeeper服务处于活动状态, 必须有大多数可以通信的非故障机器 彼此。创建可以容忍失败的部署 对于F机器,你应该指望部署2xF + 1台机器。因此,一个 由三台机器组成的部署可以处理一个故障,并且 部署五台机器可以处理两次故障。注意一个 部署六台机器只能处理三次以来的两次故障 机器不是多数。出于这个原因,ZooKeeper部署是 通常由奇数机器组成。
虽然它没有说明,但ZK集群不应该超过7个节点。鉴于奇数节点的建议,留下了1,3,5和7的选项。对于像你这样的小集群,1应该足够了,但3会给你弹性。 5可能是矫枉过正。肯定是7。
另外,查看您粘贴的错误:
java.net.ConnectException: Connection refused
这似乎表明: