在我的上一篇博客中讲了如何玩Hadoop,今天我们就来装zookeeper咯!
首先,如果要玩这个就必须先在机器上装好JDK,要求是java6以上的。
安装以及配置:
本机配置:
Ubuntu 16.04 64bit 一共有三台
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
下载好gz安装包之后需要解压到电脑中
sudo tar -zxvf zookeeper-3.4.9.tar.gz /usr/local/
其中/user/local就是我们的安装目录,解压完成之后需要对它进行改名字:
/usr/local$ mv zookeeper-3.4.9 zookeeper
改完名字之后需要进入配置文件修改环境变量:
/usr/local$ sudo vim /etc/profile
在打开的文件末尾添加:
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=.:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH
配置conf
conf中的zoo.cfg是最重要的一步,但是在安装文件中没有这个,我们需要自己创建它!
在Zookeeper下的conf文件夹中执行以下命令:
sudo mv zoo_sample.cfg zoo.cfg
打开它:
sudo vim zoo.cfg
打开文件时你会发现它以及有内容了,我们只需要修改我们需要的内容:
修改缓存文件的地址,我把它放在安装文件夹中,这个data需要我们自己创建:
dataDir=/usr/local/zookeeper/data
末尾添加节点的IP和端口信息:
server.1=Master:2888:3888
server.2=Slaver1:2888:3888
server.3=Slaver2:2888:3888
server的意思是服务机, 这里一共有三台。后面对应的是机器名(写在/etc/hosts当中了)和端口的名字。
接着在刚刚的/usr/local/zookeeper/data文件夹下,创建对应的myid文件:
vim myid
这个文件会记录自己的机器ID,对应的就是刚刚的server后面的数字标示 (ID只需要键入数字)
我这边一共有三台,就分别填 1、2、3。
写完之后就基本完成了配置工作
开始运行:
zkServer.sh start
收到回复:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
记住,要在其他的机子上也运行。
接着Zookeeper为我们准备了很多命令来查看节点的运行状态:
zkServer.sh status
得到反馈:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
当然有的是Leader,没什么区别。
有时候会遇到坑:
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
节点没有启动成功,查看zookeeper.out发现:
...
2017-07-14 01:23:38,578 [myid:3] - WARN [WorkerSender[myid=3]:QuorumCnxManager@400] - Cannot open channel to 2 at election address /192.168.244.128:3888
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
...
拒绝访问,连接失败!
查看情况之后发现是conf当中的zoo.cfg 中节点Ip必须要用地址代替:
server.1=0.0.0.0:2888:3888
server.2=192.168.10.10:2888:3888
server.3=192.168.2.1:2888:3888
Step 1:
Node 1:
zoo.cfg
server.1= 0.0.0.0:<port>:<port2>
server.2= <IP>:<port>:<port2>
server.n= <IP>:<port>:<port2>
Node 2 :
server.1= <IP>:<port>:<port2>
server.2= 0.0.0.0:<port>:<port2>
server.n= <IP>:<port>:<port2>
这个情况困扰了我很久,最后实在Stack Overflow上面看到的,老外早就遇到过这个问题。
有什么问题问吧,看到会回复,