Mac系统下,Hadoop 2.6.2 + Zookeeper 3.4.6 完全分布式配置

来源:互联网 发布:淘宝天猫贴吧论坛 编辑:程序博客网 时间:2024/06/05 08:36

简介

        ZooKeeper是一个为分布式应用所设计的开源协调服务。它可以为用户提供同步、配置管理、分组和命名等服务。用户可以使用ZooKeeper提供的接口方便地实现一致性、组管理、leader选举及某些协议。ZooKeeper意欲提供一个易于编程的环境,所以它的文件系统使用了我们所熟悉的目录树结构。ZooKeeper是使用Java编写的,但是它支持Java和C两种编程语言接口。
        众所周知,协调服务非常容易出错,而且很难从故障中恢复,例如,协调服务很容易处于竞态以至于出现死锁。ZooKeeper的设计目的是为了减轻分布式应用程序所承担的协调任务。
        以上介绍来自《Hadoop实战》

环境

  • mac OSX EI Capitan 10.11.5 (master节点)
  • 虚拟机:Parallels Desktop
  • ubuntukylin 14.04 64bit * 2 (node1节点,node2节点)
  • ZooKeeper 3.4.6

Hadoop 安装

        关于此部分内容,请移步博文:Hadoop 2.6.2 完全分布式配置。

ZooKeeper安装

        该配置过程需要在每个系统上均实现一遍,也可以在mac上先配置好,然后通过scp命令复制到其余的节点上,再做些许修改即可。
        下述步骤需要保证三个节点间能互相通信,并且可以通过SSH免密码登陆,如有疑问可参考本人另一篇博文:http://blog.csdn.net/wk51920/article/details/51686038

        1. 前往ZooKeeper官网,下载3.4.6安装包:http://apache.fayea.com/zookeeper/

        2. 默认将安装包下载至~/Downloads下,可以在此目录下解压缩:

tar -zxvf zookeeper-3.4.6.tar.gz 

        得到文件夹zookeeper-3.4.6

        3. 可以将此文件夹移动至合适的目录下,也可以不移动,记住路径即可,如在mac系统上,我的存放路径是:/usr/hadoop/hadoop-2.6.2/,并将zookeeper-3.4.6文件夹更名为zookeeper方便管理。

        4. 配置环境变量:

vim ~/.bash_profile

        在其中加入:

#其中的/usr/hadoop/hadoop-2.6.2/zookeeper是我存放zookeeper的路径#注意其中的zookeeper是zookeeper-3.4.6解压并改名后的根目录export ZOOKEEPER_HOME=/usr/hadoop/hadoop-2.6.2/zookeeperexport PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

        保存后退出,并使用source命令使配置立即生效:

source ~/.bash_profile

        5. 进入$ZOOKEEPER_HOME/conf文件夹下,其中有文件zoo_sample.cfg文件,执行如下命令:

cp zoo_sample.cfg zoo.cfg

        复制一份配置文件,打开zoo.cfg,在其中完成如下修改:

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/usr/hadoop/hadoop-2.6.2/zookeeper/datadataLogDir=/usr/hadoop/hadoop-2.6.2/zookeeper/logs# the port at which the clients will connectclientPort=2181server.1=10.211.55.2:2888:3888server.2=10.211.55.6:2888:3888server.3=10.211.55.7:2888:3888# the maximum number of client connections.# increase this if you need to handle more clients#maxClientCnxns=60## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDirautopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge featureautopurge.purgeInterval=1

        其中:

# 这三个是集群中的三个节点的ip地址及端口号,2888用于连接leader的端口,用于服务器间互连# 3888是进行leader选举时用到的端口# 注意数字1,2,3分别要与$ZOOKEEPER_HOME/data/myid中的数字相对应(其中data目录和myid文件需要自己建立,比如10.211.55.2对应的mac系统的ip地址,由于它是server.1的值,所以在mac系统下,$ZOOKEEPER_HOME/data/myid内的值为1,以此类推)server.1=10.211.55.2:2888:3888server.2=10.211.55.6:2888:3888server.3=10.211.55.7:2888:3888

        6. 进入到$ZOOKEEPER_HOME目录下,创建两个文件夹:

mkdir datamkdir logs

        进入data目录下,创建myid文件,并在里面写入1,保存退出。

        7. 进入到/usr/hadoop/hadoop-2.6.2目录下,该目录下有文件夹zookeeper,执行命令:

# 将在Mac上配置好的zookeeper复制到node1和node2上。# wk51920是登陆操作系统的用户名,node1和node2分别是两个ubuntu系统的hostname# 后面的路径是存放在各自节点下的路径scp -r zookeeper wk51920@node1:/usr/hadoop/hadoop-2.6.2/scp -r zookeeper wk51920@node2:/usr/hadoop/hadoop-2.6.2/

        8. 打开node1、node2系统,修改各自的/etc/profile文件,配置环境变量,内容同mac。在各自系统的$ZOOKEEPER_HOME下创建datalogs文件夹,并在node1的data文件夹下创建文件myid,在内写入2。同样在node2的data文件夹下建立文件myid,并在其中写入3,主要是与server.x相对应。

启动ZooKeeper

        在各自系统的控制台输入:

zkServer.sh start

        如果想要在控制台看到启动信息,可以输入:

zkServer.sh start-foreground

        注意:刚开始可能有异常信息,那是因为只启动了部分节点,无法达到集群对节点数的要求,当所有节点均启动后,异常会恢复。

        在终端输入:

zkServer.sh status

        如果显示如下类似信息,则证明已正常启动:
这里写图片描述
        或者:
这里写图片描述
        表明启动成功!

注意事项

        如果在执行

zkServer.sh start

        提示如下信息:
这里写图片描述
        但是执行

zkServer.sh status

        时,却提示:
这里写图片描述
        并且查看日志,或者在控制台显示的日志信息一直提示异常:xxxxx : connection refused,主要提示无法连接3888或2888时,请确保所有系统的防火墙已关闭,而且,所有系统中配置文件zoo.cfgserver.x=xxxxx:2888:3888使用的是具体的ip值,而不是hostname。
        之前我的配置使用的是hostname,就一直报这个错误,原来出问题的配置书写方式如下:

server.1=master:2888:3888server.2=node1:2888:3888server.3=node2:2888:3888

        只要将其中的各个hostname改成实际的ip值即可。

0 0