Zookeeper作用:

   
      Apache ZooKeeper是一种高可用性服务,用于维护少量协调数据,通知客户端该数据的更改以及监视客户端的故障。自动HDFS故障转移的实现依赖于ZooKeeper来实现以下功能:
              a.故障检测:集群中的每个NameNode计算机都在ZooKeeper中维护一个持久会话。如果计算机崩溃,ZooKeeper会话将过期,通知另一个NameNode应该触发故障转移。
            b.active活跃节点的选举:ZooKeeper提供了一种简单的机制,可以将节点专门选为活动节点。如果当前活动的NameNode崩溃,则另一个节点可能在ZooKeeper中采用特殊的独占锁,指示它应该成为下一个活动的。

 注意:

               搭建HA的 时候,在该模式下,即使活动节点发生故障,系统也不会自动触发从活动状态到备用NameNode的故障转移,
              本文是关于如何配置和部署故障转义。

  现在开始安装zookeeper:

      1.下载zookeeper-3.4.6版本,根据自己需求;
      2.解压至~/soft/ 下
              tar -zxvf  zookeeper-3.4.6.tar.gz  ~/soft/
      3.创建软链接:ln -s zookpeer-3.4.6   zookeeper 
      4.添加zookeeper的环境变量:(并生效)
                ~/.bash_profile
              修改:  ~$>  gedit .bash_profile       (gedit 相当于vi/vim) 
              添加:  
                           #---zookeeper install
                          export ZOOKEEPER_HOME=/home/hyxy/soft/zookeeper
                          export PATH=$ZOOKEEPER_HOME/bin:$PATH
              生效: source  .bash_profile  //使之生效
              测试是否好使:cd $ZOOKEEPER_HOME

此时,要启动一个zookeeper,需要一个配置文件:zoo.cfg ,如下       
       5.  进入安装目录下:复制得zoo.cfg
                           zookeeper$> cd  conf 
                            conf$> cp zoo_sample.cfg   zoo.cfg
       6. 修改上述的zoo.cfg ,只需要修改dataDir日志信息即可
                  tickTime=2000         //滚动的毫秒数
                  initLimit=10          
                  syncLimit=5
                  dataDir=home/hyxy/tmp/zookeeper     //存储zookeeper的日志信息
                  clientPort=2181                   //监听客户端连接 端口 
现在,你也创建配置文件,您可以启动Zookeeper:
         7.开启zookeeper   Server
            [hyxy@master conf]$ zkServer.sh  start     //就会开启zookeeper Server 的守护进程
            [hyxy@master conf]$ jps
            13331  Jps
            13316  ZookeeperMain                  //zookeeper Server 的服务器
         8.客户端去连接它:
               conf$> zkCli.sh           //开启客户端的时候,要是zkServer.sh服务端没开启,会报:
                                                 //      java.net.ConnectException: 拒绝连接
           也可以连接  mster:2181 :   $>  zkCli.sh -server  master:2181   命令即可
         
            连接上zooKeeper之后,    最后一行显示:
                                  [zk: localhost:2181(CONNECTED) 0] 
               说明客户端已经连接到localhost:2181端口
                                  [zk: localhost:2181(CONNECTED) 0]   help

    
              help 之后就会出现与zookeeper相关的一些命令,如下                      

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
	stat path [watch]
	set path data [version]
	ls path [watch]
	delquota [-n|-b] path
	ls2 path [watch]
	setAcl path acl
	setquota -n|-b val path
	history 
	redo cmdno
	printwatches on|off
	delete path [version]
	sync path
	listquota path
	rmr path
	get path [watch]
	create [-s] [-e] path data acl
	addauth scheme auth
	quit 
	getAcl path
	close 
	connect host:port
[zk: localhost:2181(CONNECTED) 1]

        9.  客户端连接之后 jps:
                [hyxy@master ~]$ jps
                13316 QuorumPeerMain        //就会开启zookeeper  client的守护进程
        10.退出zookeeper
                ~$>quit
               ~$>jps
                  [hyxy@master ~]$ jps
                 13587 Jps
                 13316 QuorumPeerMain
                 13349 ZookeeperMain      //此时,已经没有zookeeper  client 的进程了,退出了的话
         11.关机Zookeeper Server
                    ~ $>zkServer.sh stop 
                    ~ $>jps
                    13587 jps
                    13316 QuorumPeerMain      //此时,已经没有zookeeper Server的守护进程
注意:
zookeeper相当于一棵树,存储的数据在叶子节点上,要获得叶子节点数据,需要
 即:get /zeekeeper

[zk: localhost:2181(CONNECTED) 6] get /zookeeper

cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 7]

总结:
              每次执行zkServer.sh start 命令的时候都会在当前目录下创建zookeeper.out,
         如果程序报错,可以看看zookeeper.out,以便纠错,每次报错都会覆盖之前的错误,
        删不删都可以,建议删除比较好。