一、前言
这个实验我在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;*/importjava.util.Date; importorg.apache.zookeeper.ZooKeeper; publicclassWriteMsgextendsThread { publicvoidrun() { 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程序中的这两个地方:
前面是节点状态为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文件夹,这个不能忘记,不然会后面会出现报错或者找不到文件路径。
还有一些小问题那就是,注意单词拼写是否正确,以及单词大小写是否正常,我上午就在一个单词大小写上面出错了,找了一会才找到,所以需要格外的注意。
还有什么找不到主类什么的记得先在本地指定主类等等,如果还有什么问题欢迎前来评论。
五、最后我想说
大概想说的内容就这些了,弄大数据方面的总会出现各种小问题,我们需要学会去解决这些问题就能从中学到很多知识,最后如果还有什么问题欢迎前来评论或者私信我,我尽全力帮你们解决。
如果我的博客帮你解决了问题,还请大家送我点赞收藏转发三连,谢谢支持!