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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 大数据的学习总是伴随很多问题,服务端总会抛出一些异常,我们需要做到的就是学会去解决这些问题,以后再出现也能更加从容面对。

一、前言

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

二、出现的问题

image-20221002144352842.png

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

三、解决问题

我们大数据编程基础老师说,这是因为实验中给出的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;*/importjava.util.Date;
importorg.apache.zookeeper.ZooKeeper;
publicclassWriteMsgextendsThread {
@Overridepublicvoidrun() {
try {
ZooKeeperzk=newZooKeeper("10.30.108.18:2181", 500000, null);
Stringcontent=Long.toString(newDate().getTime());
// 修改节点/testZk下的数据,第三个参数为版本,如果是-1,那会无视被修改的数据版本,直接改掉zk.setData("/testZk", content.getBytes(), -1);
// 关闭sessionzk.close();
          } catch (Exceptione) {
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;*/importorg.apache.zookeeper.WatchedEvent;
importorg.apache.zookeeper.Watcher;
importorg.apache.zookeeper.Watcher.Event.EventType;
importorg.apache.zookeeper.ZooKeeper;
publicclassReadMsg {
publicstaticvoidmain(String[] args) throwsException {
finalZooKeeperzk=newZooKeeper("10.30.108.18:2181", 500000, null);
//定义watch Watcherwacher=newWatcher() {
publicvoidprocess(WatchedEventevent) {
//监听到数据变化取出数据if(EventType.NodeDataChanged==event.getType()){
byte[] bb;
try {
bb=zk.getData("/testZk", null, null);
System.out.println("/testZk的数据: "+newString(bb));
         } catch (Exceptione) {
e.printStackTrace();
         }
       }
     }
   };
//设置watch zk.exists("/testZk", wacher);
//更新/testZk目录信息,触发watchwhile(true)
   {
Thread.sleep(2000);
newWriteMsg().start();
//watch一次生效就会删除需重新设置 zk.exists("/testZk", wacher);
   }
  }
}

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

image-20221025141949070.png

image-20221025142004464.png

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

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

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

image-20221025142513348.png

image-20221025142556904.png

image-20221025142608714.png

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

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

java -jar /root/ZooKeeperTest.jar

image-20221025142922982.png

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

四、补充一点

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

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

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

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

五、最后我想说

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

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

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
3月前
|
Linux Shell 调度
操作系统实验一:进程和线程(1)
实验内容 一、进程的创建 编写一段源程序,使用系统调用fork()创建子进程,当此程序运行时,在系统中有父进程和子进程在并发执行。观察屏幕上的显示结果,并分析原因(源代码:forkpid.c)。
149 0
|
3月前
|
存储 网络协议 Java
深入理解Linux网络——内核与用户进程协作之同步阻塞方案(BIO)
在上一部分中讲述了网络包是如何从网卡送到协议栈的(详见深入理解Linux网络——内核是如何接收到网络包的),接下来内核还有一项重要的工作,就是在协议栈接收处理完输入包后要通知到用户进程,如何用户进程接收到并处理这些数据。
|
17天前
|
安全 开发者 Python
跨越编程孤岛,构建互联大陆:深入探索Python进程间通信的奥秘,解锁高效协作新纪元!
【8月更文挑战第3天】在编程领域,Python 因其简洁强大而广受欢迎。但随着项目规模扩大,单进程难以应对复杂需求,此时多进程间的协同就显得尤为重要。各进程像孤岛般独立运行,虽提升了稳定性和并发能力,但也带来了沟通障碍。为解决这一问题,Python 提供了多种进程间通信(IPC)方式,如管道、队列和套接字等,它们能有效促进数据交换和任务协作,使各进程像大陆般紧密相连。通过这些机制,我们能轻松搭建起高效的多进程应用系统,实现更加复杂的业务逻辑。
18 2
|
17天前
|
Python
Python IPC深度探索:解锁跨进程通信的无限可能,以管道与队列为翼,让你的应用跨越边界,无缝协作,震撼登场
【8月更文挑战第3天】Python IPC大揭秘:解锁进程间通信新姿势,让你的应用无界连接
13 0
|
1月前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
|
3月前
|
Linux API
【操作系统】实验七 显示进程列表
【操作系统】实验七 显示进程列表
45 1
|
3月前
|
调度 数据库
操作系统实验一:进程和线程(2)
七、共享资源的互斥访问 创建两个线程来实现对一个数的递加 pthread_example.c 1、运行
62 0
|
3月前
|
存储 网络协议 NoSQL
深入理解Linux网络——内核与用户进程协作之多路复用方案(epoll)
在上一部分的阻塞模式中(详见深入理解Linux内核网络——内核与用户进程协作之同步阻塞方案(BIO)),用户进程为了等待一个socket就得被阻塞掉,如果想要同时为多个用户提供服务要么就得创建对应数量的进程处理,要么就使用非阻塞的方式。进程不说创建,单论上下文切换就需要很大的耗时,而如果非阻塞的模式,就得轮询遍历,会导致CPU空转,并且每次轮询都需要进行一次系统调用,所以Linux提供了多路复用的机制来实现一个进程同时高效地处理多个连接。
|
9月前
|
Ubuntu Unix Linux
进程章节总结性实验
进程章节总结性实验
24 0