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。segmentfault
我这里用的是从官网上下载的tar包,版本是3.4.8,你们能够自行去官网下载。解压的命令服务器
tar -xzvf /root/packages/zookeeper-3.4.8.tar.gz -C /home/hadoop/deploy/
这样就会被解压到 /home/hadoop/deploy目录下了,固然了,前提是服务器上要有这个目录。ide
进入ZooKeeper的conf目录下,通常会自带一个叫作zoo_sample.cfg的文件,请复制这份文件并更名为zoo.cfgoop
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
接下来咱们来说讲这些配置项究竟都是干什么的。学习
这是ZooKeeper基本的时间单元,后面跟超时等相关的设置会跟这个设置有关。单位是毫秒。大数据
follower和leader之间同步数据的用时,这里的单位是数量,实际时间是 initLimit×tickTime,按照我这里的配置就是 5*2000=10000 毫秒,也就是10秒。若是你在ZooKeeper中存储的数据量比较大的话,能够适当的增大这个值。ui
这个是follower与leader进行对时用的,若是follower和leader时钟相差太多,就会被集群抛弃掉。日志
这个目录用来存储ZooKeeper在内存中的数据的本地数据快照。由于ZooKeeper被访问的数据都会在内存中,而这个目录下存储的就是那些在内存中存储的数据的本地快照。code
这个目录用来存储事务日志。由于ZooKeeper的机制是每次对内存数据进行操做之前都会进行事务日志的写入,因此这个目录存储的就是这些事务的日志啦。若是不设定这个参数,默认状况下事务日志会存储在上面设置的dataDir中。ZooKeeper官方是强烈推荐把两个目录分开的,最好是放在不一样的硬盘上,由于这样能够避免因为磁盘IO的争用而致使ZooKeeper的性能的下降。另外,这个目录和上面的dataDir目录都须要手动建立,若是目录不存在可能致使ZooKeeper启动出现问题。
这个就是ZooKeeper服务开放的监听客户端链接的端口啦,若是要开发ZooKeeper的客户端程序的话,链接server就要用这个端口。一些会用到ZooKeeper的其余的大数据的组件,也会在配置文档中配置要链接的ZooKeeper服务的服务器IP地址和端口号,这些咱们在后面其余组件的篇中会看到。这个端口号通常都会配置为2181。
这个配置是让整个集群能发现全部的服务器的。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
其余服务器请自行配置。
配置完了上面的zoo.cfg文件,还有一件事要作,就是设置myid。这个文件中只有一个数字,这个数字即为当前服务器的惟一标识。按照上面的server.X配置,这个myid文件中的数字要和X保持一直,好比在master1中这个数字就是1,在master2中这个数字就是2,slave1中就是3,以此类推。文件的位置,就在咱们上面配置的dataDir目录中,能够用如下命令建立:
echo "1" > dataDir/myid
注意这里千万不要配错了,否则服务没法正常启动。
至此,全部基本的配置都完成了。若是你们想看更详细的配置,请去官网上浏览 Administrator's Guide。
那咱们来验证一下咱们的ZooKeeper是否部署成功。
首先把咱们的整个ZooKeeper目录复制到其余服务器上,可使用 scp 命令来完成这个操做。
而后在每台服务器的ZooKeeper目录下分别执行:
bin/zkServer.sh start
这样就能启动全部的ZooKeeper节点,注意必定要每一个节点分别启动。这个过程也能够写Shell脚原本简化操做。
查看ZooKeeper状态:
bin/zdServer.sh status
能看到,全部节点中有一个是leader,其余为follower。说明启动成功。