解决ZooKeeper实验进程协作中的一些问题

解决ZooKeeper实验进程协作中的一些问题

一、前言

这个实验我在9月30号的时候就已经做过了,本次博客主要来解决其中的一些问题,因为刚好今天我们的大数据编程期中考试就是做这个实验。

二、出现的问题

在这里插入图片描述

这是在之前实验中遇见的问题,能正常抛出数据但同时也会抛出异常,当时并不知道是什么原因,今天经过了一次讨论解决掉了。

三、解决问题

我们大数据编程基础老师说,这是因为实验中给出的java程序头文件缺失,我们需要在两个java文件开始添加一些头文件,具体如下:

WriteMsg.java

/*import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;*/
import java.util.Date;

import org.apache.zookeeper.ZooKeeper;

public class WriteMsg extends Thread {
	@Override
	public void run() {
	     try {
	         ZooKeeper zk = new ZooKeeper("10.30.108.18:2181", 500000, null);
	         String content = Long.toString(new Date().getTime());
	         // 修改节点/testZk下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉
	         zk.setData("/testZk", content.getBytes(), -1);
	         // 关闭session
	         zk.close();
	      } catch (Exception e) {
	      e.printStackTrace();
	    }
	  }
	}

ReadMsg.java

/*import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.zookeeper.KeeperException;*/
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.ZooKeeper;

public class ReadMsg {
   public static void main(String[] args) throws Exception {
   final ZooKeeper zk = new ZooKeeper("10.30.108.18:2181", 500000, null);
   //定义watch 
   Watcher wacher = new Watcher() {
      public void process(WatchedEvent event) {
      //监听到数据变化取出数据
      if(EventType.NodeDataChanged == event.getType()){
         byte[] bb;
         try {
            bb = zk.getData("/testZk", null, null);
            System.out.println("/testZk的数据: "+new String(bb));
         } catch (Exception e) {
         e.printStackTrace();
         }
       }
     }
   };
   //设置watch 
   zk.exists("/testZk", wacher);
   //更新/testZk目录信息,触发watch
   while(true)
   {
      Thread.sleep(2000);
      new WriteMsg().start();
      //watch一次生效就会删除需重新设置 
      zk.exists("/testZk", wacher);
   }
  }
}

其中我们需要主要的是两个java程序中的这两个地方:

在这里插入图片描述

在这里插入图片描述

前面是节点状态为leader的主机号,这里划重点!一定要是节点状态为leader,我们有三台虚拟机,两个节点是follower状态,一个是leader状态,这个在前面的zookeeper部署中有提到,后面我们打包上传到虚拟机也要上传到节点状态为leader的虚拟机中编译运行。

可以通过如下命令去看看自己三台虚拟机哪一台的状态是leader。

cd /usr/cstor/zookeeper/bin
./zkServer.sh status

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看出我的slave1虚拟机的节点状态是leader,所以我们就要在salve1上进行编译运行jar包。

和之前一样修改好java程序之后我们上传到slave1虚拟机上,然后输入如下命令运行:

 java -jar /root/ZooKeeperTest.jar

在这里插入图片描述

可以看到我们成功运行了,问题解决!

四、补充一点

这个是主要问题,还有一些其他的问题比较好解决,我在这里就直接说一下。

例如,在进行编译运行之前,我们也需要在节点状态为leader的虚拟机上进入客户端创建/testZk文件夹,这个不能忘记,不然会后面会出现报错或者找不到文件路径。

还有一些小问题那就是,注意单词拼写是否正确,以及单词大小写是否正常,我上午就在一个单词大小写上面出错了,找了一会才找到,所以需要格外的注意。

还有什么找不到主类什么的记得先在本地指定主类等等,如果还有什么问题欢迎前来评论。

五、最后我想说

大概想说的内容就这些了,弄大数据方面的总会出现各种小问题,我们需要学会去解决这些问题就能从中学到很多知识,最后如果还有什么问题欢迎前来评论或者私信我,我尽全力帮你们解决。

如果我的博客帮你解决了问题,还请大家送我点赞收藏转发三连,谢谢支持!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-北天-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值