ZooKeeper

package com.shujia.ZooKeeper;

import org.apache.zookeeper.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Demo01ZKAPI {
    ZooKeeper zk;
    //建立连接
    @Before
    public void init() throws IOException {
        zk = new ZooKeeper("master:2181,node1:2181,node2:2181", 500000, null);
    }

    @Test
    //创建一个ZNode
    public void createZNode() throws InterruptedException, KeeperException {
        /**
         * CreateMode:
         * PERSISTENT 永久保存
         * EPHEMERAL 在连接断开的时候会自动将创建的ZNode删除
         */
        zk.create("/test",
                "10".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT
        );
    }

    @Test
    //创建一个ZNode
    public void createEPHEMERALZNode() throws InterruptedException, KeeperException {
        /**
         * CreateMode:
         * PERSISTENT 永久保存
         * EPHEMERAL 在连接断开的时候会自动将创建的ZNode删除
         */
        zk.create("/test1",
                "20".getBytes(),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.EPHEMERAL
        );
            while(true){
            //避免zk连接自动关闭
        }
    }

    //获取指定的ZNode上的值
    @Test
    public void getData() throws InterruptedException, KeeperException {
        byte[] data = zk.getData("/test1", null, null);
        System.out.println(new String(data));
    }

    //修改指定ZNode的值
    @Test
    public void setData() throws InterruptedException, KeeperException {
        zk.setData("/test","11".getBytes(),-1);
    }

    //删除指定ZNode
    @Test
    public void DeleteZNode() throws InterruptedException, KeeperException {
        zk.delete("/test",-1);
    }

    //观察者
    @Test
    public void setWatcher() throws InterruptedException, KeeperException {
        //判断指定的ZNode是否存在,并且可以指定一个Watcher
       zk.exists("/test", Event -> {
           System.out.println(Event.getPath());
           System.out.println(Event.getState());
           System.out.println(Event.getWrapper());
           System.out.println(Event.getType());
           System.out.println("捕捉到ZNode的变化,触发了事件");
       });
       while(true){
           //避免ZK连接自动断开
       }
    }

    @After
    //关闭连接
    public void close() throws InterruptedException {
        zk.close();
    }

}

        ZK    NN    DN    RM    NM    JN    ZKFC
master    1    1        1        1    1
node1    1    1    1    1    1    1    1
node2    1        1        1    1


1、防火墙
    service firewalld stop
2、时间同步
    yum install ntp
    ntpdate -u s2c.time.edu.cn
    
    或者
    date -s 20180503

3、免密钥   (远程执行命令)
    在两个主节点生成密钥文件
    ssh-keygen -t rsa
    ssh-copy-id ip

    master-->master,node1,node2
    node1-->master,node1,node2

4、修改hadoop配置文件
先停止HDFS集群:stop-dfs.sh
再修改
    core-site.xml
    hdfs-site.xml


    同步到其它节点
        cd /usr/local/soft/hadoop-2.7.6/etc/hadoop
        scp ./* node1:`pwd`
        scp ./* node2:`pwd`

5、删除hadoop数据存储目录下的文件  每个节点都需要删除
     rm -rf /usr/local/soft/hadoop-2.7.6/tmp

6、启动zookeeper  三台都需要启动
    zkServer.sh start
    zkServer.sh status

7、启动JN   存储hdfs元数据
     三台JN上执行 启动命令: 
     /usr/local/soft/hadoop-2.7.6/sbin/hadoop-daemon.sh start journalnode

 8、格式化 在一台NN上执行,这里选择master
      hdfs namenode -format
      启动当前的NN
      hadoop-daemon.sh start namenode


9、执行同步 没有格式化的NN上执行  在另外一个namenode上面执行 这里选择node1
    /usr/local/soft/hadoop-2.7.6/bin/hdfs namenode -bootstrapStandby


10、格式化ZK   在master上面执行
    !!一定要先 把zk集群正常 启动起来
      /usr/local/soft/hadoop-2.7.6/bin/hdfs zkfc -formatZK

11、启动hdfs集群,在master上执行
    start-dfs.sh

[root@master data]# hadoop-daemon
hadoop-daemon.sh   hadoop-daemons.sh  
[root@master data]# hadoop-daemon.sh start namenode
starting namenode, logging to /usr/local/soft/hadoop-2.7.6/logs/hadoop-root-namenode-master.out


 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值