首页 > 大数据 > Hadoop > linux ZooKeeper集群安装
clientPort=2181
server.1=hadoop-master:28888:38888
server.2=hadoop-slave01:28888:38888
server.3=hadoop-slave02:28888:38888
tickTime发送心跳时间间隔,单位毫秒
initlimit和sysnclimit,两者都是以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博客 ” ,链接:https://blog.itpub.net/28624388/viewspace-1102255/ ,如需转载,请注明出处,否则将追究法律责任。