duang,duang,duang~,本期我们迎来了《大数据集群环境搭建》的第二篇,ZooKeeper篇。之前一直加班,终于有空腾出时间写点东西了,呼呼~。看到这里,很多初学者朋友们可能会有疑问,大数据的学习不是要最开始都要搭建Hadoop环境么。确实是的,虽然现在Spark风头正劲,并行计算的性能号称已经超过了Hadoop MapReduce几十倍,但Hadoop作为大数据存储和计算的“鼻祖”,还是值得我们学习的。MapReduce虽然被Spark虐的够呛,但是Hadoop还有我们的HDFS嘛,更别提还有YARN,很多公司的大数据环境中,Spark就是运行在YARN上的。科科,说了这么多,还是没说为什么要先搭建ZooKeeper。其实很简单,HDFS的HA模式需要用到ZooKeeper的协同。所以,要配置HDFS的HA,就要先配置ZooKeeper啦。
由于目前没打算开发ZooKeeper的客户端程序,ZooKeeper只是为其他组件的运行提供协同功能,所以我们的ZooKeeper的配置并不算复杂。当然,不管配置什么,得先有服务器不是,所以,如果您还没有配置服务器,那么请参考我之前的文章大数据集群环境搭建——服务器篇来配置我们大数据环境的服务器。另外,JDK显然也是必不可少的,但是JDK的配置网上的资料台丰富了,我在这里就不赘述了。下面就让我们正式来搭建ZooKeeper。
1、解压软件包
我这里用的是从官网上下载的tar包,版本是3.4.8,大家可以自行去官网下载。解压的命令
tar -xzvf /root/packages/zookeeper-3.4.8.tar.gz -C /home/hadoop/deploy/
这样就会被解压到 /home/hadoop/deploy目录下了,当然了,前提是服务器上要有这个目录。
2、配置zoo.cfg
进入ZooKeeper的conf目录下,一般会自带一个叫做zoo_sample.cfg的文件,请复制这份文件并改名为zoo.cfg
mv zoo_sample.cfg zoo.cfg
接下来我们要修改的就是这份zoo.cfg文件。
tickTime=2000
initLimit=5
syncLimit=2
dataDir=/home/hadoop/bigdata/zookeeper
dataLogDir=/home/hadoop/bigdata/zookeeper/zookeeper_log
clientPort=2181
server.1=master1:2888:3888
server.2=master2:2888:3888
server.3=slave1:2888:3888
server.4=slave2:2888:3888
server.5=slave3:2888:3888
接下来我们来讲讲这些配置项究竟都是干什么的。
tickTime:
这是ZooKeeper基本的时间单元,后面跟超时等相关的设置会跟这个设置有关。单位是毫秒。
initLimit:
follower和leader之间同步数据的用时,这里的单位是数量,实际时间是 initLimit×tickTime,按照我这里的配置就是 5*2000=10000 毫秒,也就是10秒。如果你在ZooKeeper中存储的数据量比较大的话,可以适当的增大这个值。
syncLimit:
这个是follower与leader进行对时用的,如果follower和leader时钟相差太多,就会被集群抛弃掉。
dataDir:
这个目录用来存储ZooKeeper在内存中的数据的本地数据快照。因为ZooKeeper被访问的数据都会在内存中,而这个目录下存储的就是那些在内存中存储的数据的本地快照。
dataLogDir:
这个目录用来存储事务日志。因为ZooKeeper的机制是每次对内存数据进行操作以前都会进行事务日志的写入,所以这个目录存储的就是这些事务的日志啦。如果不设定这个参数,默认情况下事务日志会存储在上面设置的dataDir中。ZooKeeper官方是强烈推荐把两个目录分开的,最好是放在不同的硬盘上,因为这样可以避免由于磁盘IO的争用而导致ZooKeeper的性能的降低。另外,这个目录和上面的dataDir目录都需要手动创建,如果目录不存在可能导致ZooKeeper启动出现问题。
clientPort:
这个就是ZooKeeper服务开放的监听客户端连接的端口啦,如果要开发ZooKeeper的客户端程序的话,连接server就要用这个端口。一些会用到ZooKeeper的其他的大数据的组件,也会在配置文档中配置要连接的ZooKeeper服务的服务器IP地址和端口号,这些我们在后面其他组件的篇中会看到。这个端口号一般都会配置为2181。
server.X:
这个配置是让整个集群能发现所有的服务器的。X一般都从1开始,有几台服务器就是配置到几。后面要跟着的为 host:2888:3888,这个host就是你的服务器名。后面跟着两个端口号,2888是follower连接leader用的,而3888则为leader选举时用到(当leader挂掉的时候...)。
PS:这个地方有个小问题,这么配置在有些服务器上启动时可能会出现不能识别主机,导致连接失败的情况。所以如果出现了这种情况,请把当前服务器的host的改成0.0.0.0。比如在master1服务器中为:
server.1=0.0.0.0:2888:3888
server.2=master2:2888:3888
server.3=slave1:2888:3888
server.4=slave2:2888:3888
server.5=slave3:2888:3888
在master2服务器中为:
server.1=master1:2888:3888
server.2=0.0.0.0:2888:3888
server.3=slave1:2888:3888
server.4=slave2:2888:3888
server.5=slave3:2888:3888
其他服务器请自行配置。
3、设置myid
配置完了上面的zoo.cfg文件,还有一件事要做,就是设置myid。这个文件中只有一个数字,这个数字即为当前服务器的唯一标识。按照上面的server.X配置,这个myid文件中的数字要和X保持一直,比如在master1中这个数字就是1,在master2中这个数字就是2,slave1中就是3,以此类推。文件的位置,就在我们上面配置的dataDir目录中,可以用以下命令创建:
echo "1" > dataDir/myid
注意这里千万不要配错了,不然服务无法正常启动。
4、启动ZooKeeper
至此,所有基本的配置都完成了。如果大家想看更详细的配置,请去官网上浏览 Administrator's Guide。
那我们来验证一下我们的ZooKeeper是否部署成功。
首先把我们的整个ZooKeeper目录复制到其他服务器上,可以使用 scp 命令来完成这个操作。
然后在每台服务器的ZooKeeper目录下分别执行:
bin/zkServer.sh start
这样就能启动所有的ZooKeeper节点,注意一定要每个节点分别启动。这个过程也可以写Shell脚本来简化操作。
查看ZooKeeper状态:
bin/zdServer.sh status
能看到,所有节点中有一个是leader,其他为follower。说明启动成功。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。