storage R&D guy.
全部博文(1000)
分类: 服务器与存储
2015-10-13 14:37:37
下载zookeeper-3.5.5稳定版本
解压到/usr目录下,修改所属用户为hadoop
$chown –R hadoop:hadoop /usr/zookeeper-3.3.5
添加zookeeper目录到配置文件/etc/profile
$export ZOOKEEPER_INSTALL=/usr/zookeeper-3.3.5
$export PATH=$PATH:$ZOOKEEPER_INSTALL/bin
新建配置文件zoo.cfg,保存在conf子目录下,写入以下内容:
dataDir=/home/hadoop/zookeeper #
clientPort=2181 #
initLimit=5 #
syncLimit=2 #
dataLogDir=/home/hadoop/zookeeper/logs
server.1=namenode:2888:3888
server.2=datanode1:2888:3888
server.3=datanode2:2888:3888
server.4=datanode3:2888:3888
其中2888端口号是zookeeper服务之间通信的端口,而3888是zookeeper与其他应用程序通信的端口。由于jobtracker机器作为hadoop主机存在,故暂不作为zookeeper服务器
新建文件myid(在zoo.cfg 配置的dataDir目录下,此处为/home/hadoop/zookeeper),使得myid中的值与server的编号相同,比如namenode上的myid: 1。datanode1上的myid:2。以此类推。
将/usr/zookeeper-3.3.5和/home/hadoop/zookeeper文件夹分别分发到其它机器上。命令为scp,并修改相应的所属用户,myid的值和系统配置文件/etc/profile
测试:
$zkServer.sh start
会报FAILED TO WRITE PID的错误。查看进程发现zookeeper进程存在, 并可以正常使用。
这是zkServer.sh脚本的一个BUG,dataDir是zookeeper进程内部建立的,并且有一定延迟, 因此将zookeeper进程id写入到dataDir下的pidfile时,dataDir还没有建立好, 因此就出现了上述情况。
解决办法修改zkServer.sh脚本,等待dataDir目录创建完毕后再将pid写入。找到相应的语句块,替换为下面的语句,注意替换的范围
...
进行测试:
是zookeeper在说 I’m OK,可以把namenode换成集群里其它的主机名测试是否组网成功
在每台机器上分别执行zkServer.sh start,启动后通过jps看java进程是否出现QuoRumPeerIn,出现后再通过zkServer.sh status命令查看zookeeper的状态。然后echo ruok | nc namenode 2181,看是否会输出imok
而且集群中的zookeeper需要每台机器都启动zookeeper,保证每台机器的3888端口都是开通的
zookeeper启动时的错误:貌似已经zookeeper已经启动了,但是没有办法查看状态,查看日志发现没有创建logs文件夹,如下
如果$ZK_INSTALL下不存在logs目录,也会报错。所以需要手动创建logs文件夹。
报错异常信息如下:
这样修改之后,就能正常运行了。
错误3:
启动正常没报错,但zkServer.sh status查看状态的时候却出现错误,如下:
jps查看进程,却发现进程已启动
7313
原以为是配置文件有问题,各种调式,尝试各种模式都不起作用!最后发现是nc版本的问题,
导致zkServer.sh status出错……各种无语!
解决方法:
打开zkServer.sh
找到
status)
在nc与localhost之间加上 -q 1
如果已存在则去掉