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 201805033、免密钥 (远程执行命令)
在两个主节点生成密钥文件
ssh-keygen -t rsa
ssh-copy-id ipmaster-->master,node1,node2
node1-->master,node1,node24、修改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/tmp6、启动zookeeper 三台都需要启动
zkServer.sh start
zkServer.sh status7、启动JN 存储hdfs元数据
三台JN上执行 启动命令:
/usr/local/soft/hadoop-2.7.6/sbin/hadoop-daemon.sh start journalnode8、格式化 在一台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 -formatZK11、启动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