ITPub博客

首页 > 大数据 > Hadoop > linux ZooKeeper集群安装

linux ZooKeeper集群安装

原创 Hadoop 作者:百联达 时间:2014-03-06 14:14:47 0 删除 编辑
一:环境准备

服务器:hadoop-master,hadoop-slave01,hadoop-slave02
zookeeper版本:zookeeper-3.4.5.tar.gz

二:安装
tar -zxvf zookeeper-3.4.5.tar.gz -C /usr/local

chown -R hadoop:hadoop /usr/local/zookeeper-3.4.5.tar.gz

三:参数配置

在conf文件目录下面
cp zoo_sample.cfg  zoo.cfg

编辑zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5

dataDir=/hadoop/zookeeper

clientPort=2181

server.1=hadoop-master:28888:38888

server.2=hadoop-slave01:28888:38888

server.3=hadoop-slave02:28888:38888

tickTime发送心跳时间间隔,单位毫秒

initlimitsysnclimit,两者都是以ticktime的总数进行度量(上面的时间为10*2000=20s)initLimit参数设定了允许所有跟随者与领导者进行连接并同步的时间,如果在设定的时间内内,半数以上的跟随者未能完成同步,领导者便会宣布放弃领导地位,然后进行另外一次领导 者选举。如果这种情况经常发生,通过查看日志中的记录发现,则表明设定的值太小。

syscLimit参数设定了允许一个跟随者与领导者进行同步的时间。如果在设定的时间内,一个跟随者未能完成同步,它将会自己重启,所有关联到这个跟随者的客户端将连接到另外一个跟随者。

datadir保存的zk中持久化的数据,zk中存在两种数据,一种用完即消失,一种需要持久存在,zk的日志也保存在这

创建zookeeper数据目录
mkdir -p /data/hadoop/zookeeper(三台服务上都创建)

echo "1" > /data/hadoop/zookeeper/myid  (hadoop-master
echo "2" > /data/hadoop/zookeeper/myid  (hadoop-slave01
echo "3" > /data/hadoop/zookeeper/myid  (hadoop-slave02

四:启动

在对应的节点上启动服务
/bin/zkServer.sh start
三个节点启动完之后,查看
jps

10060 QuorumPeerMain
9030 NameNode
9228 SecondaryNameNode
13755 Jps
9317 JobTracker

五:测试案例

public class ZooKeeperTest implements Watcher{
 
 private static final int SEESSION_TIMEOUT=10000;
 private static final String CONNECTION_STRING="10.0.57.142:2181";
 private static final String ZK_PATH="/configTest";
 private ZooKeeper zk=null;
 
 private CountDownLatch countDownLatch=new CountDownLatch(1);
 
 
 /**
  * @description 创建zookeeper连接
  * @param
  * @return
  * @throws
  */
 public void createConnection(String connectString,int sessionTimeout)
 {
  this.releaseConnection();
  try {
   zk = new ZooKeeper(connectString, sessionTimeout, this);
   countDownLatch.await();
  } catch (InterruptedException e) {
   System.out.println("连接创建失败,发生InterruptedException");
   e.printStackTrace();
  }
  catch (IOException e) {
   System.out.println("连接创建失败,发生IOException");
   e.printStackTrace();
  }
  
 }
 
 /**
  * @description 释放zookeeper连接
  * @param
  * @return
  * @throws
  */
 public void releaseConnection()
 {
  if(null != zk)
  {
   try {
    this.zk.close();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
 }
 
 
 /**
  * @description 创建节点
  * @param
  * @return
  * @throws
  */
 public boolean createPath(String path,String data)
 {
  try {
      if(null == this.zk.exists(path, true))
     {
   System.out.println("节点创建成功,Path:"+this.zk.create(path, data.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT));
     }
  
  } catch (KeeperException e) {
   System.out.println("节点创建失败 ,发生KeeperException");
   e.printStackTrace();
  }
  catch (InterruptedException e) {
   System.out.println("节点创建失败 ,发生InterruptedException");
   e.printStackTrace();
  }
  
  return true;
 }
 
 
 /**
  * @description 读取节点数据内容
  * @param
  * @return
  * @throws
  */
 public String readData(String path)
 {
  try {
   System.out.println("获取数据成功,path:"+path);
   return new String(this.zk.getData(path, true, null));
  } catch (KeeperException e) {
   System.out.println("读取数据失败 ,发生KeeperException");
   e.printStackTrace();
   return "";
  }
  catch (InterruptedException e) {
   System.out.println("读取数据失败 ,发生InterruptedException");
   e.printStackTrace();
   return "";
  }
  
 }
 
 
 
 /**
  * @description 更新节点数据内容
  * @param
  * @return
  * @throws
  */
 public boolean wirteData(String path,String data)
 {
  try {
    System.out.println( "更新数据成功,path:" + path + ", stat: " +                                                    
      this.zk.setData( path, data.getBytes(), -1 ) );
  }catch (KeeperException e) {
   System.out.println("更新数据失败 ,发生KeeperException");
   e.printStackTrace();
  }
  catch (InterruptedException e) {
   System.out.println("更新数据失败 ,发生InterruptedException");
   e.printStackTrace();
  }
  
  return true;
  
 }
 
 /**
  * @description 刪除指定節點
  * @param
  * @return
  * @throws
  */
 public void deleteNode(String path){
  
  try {
    this.zk.delete(path, -1);
    System.out.println( "刪除節點 成功,path:" + path);
  }catch (KeeperException e) {
   System.out.println("刪除節點 失败 ,发生KeeperException");
   e.printStackTrace();
  }
  catch (InterruptedException e) {
   System.out.println("刪除節點 失败 ,发生InterruptedException");
   e.printStackTrace();
  }
 }
 
 

 /* (non-Javadoc)
  * @see org.apache.zookeeper.Watcher#process(org.apache.zookeeper.WatchedEvent)
  */
 @Override
 public void process(WatchedEvent event) {
  System.out.println("收到事件通知:"+event.toString()+"\n");
  if(KeeperState.SyncConnected==event.getState())
  {
   countDownLatch.countDown();
  }
 }
 
 
 
 public static void main(String[] args) throws Exception
 {
  ZooKeeperTest zkTest = new ZooKeeperTest();
  zkTest.createConnection(CONNECTION_STRING, SEESSION_TIMEOUT);
//  if(zkTest.createPath(ZK_PATH, "節點初始內容"))
//  {
//   System.out.println("数据内容:"+zkTest.readData(ZK_PATH));
//   zkTest.wirteData(ZK_PATH, "节点更新内容");
//   System.out.println("数据内容:"+zkTest.readData(ZK_PATH));
//   zkTest.deleteNode(ZK_PATH);
//  }
  zkTest.createPath(ZK_PATH, "節點初始內容");
  zkTest.createPath("/configTest/a", "節點初始內容");
  zkTest.createPath("/configTest/b", "節點初始內容");
  
  System.out.println(zkTest.zk.getChildren(ZK_PATH, true));
  
  zkTest.releaseConnection();
 }

}


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28624388/viewspace-1102255/,如需转载,请注明出处,否则将追究法律责任。

下一篇: Linux Hbase安装
请登录后发表评论 登录
全部评论
10年以上互联网经验,先后从事过制造业,证券业,物业行业和物流行业信息系统和互联网产品的研发,6年系统架构经验。最近关注Kubernetes微服务架构和Istio微服务治理框架。

注册时间:2013-02-05

  • 博文量
    320
  • 访问量
    1053016