常见错误日志如下:
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
1. 原因:
是因为ZooKeeper建立连接时采用异步操作,连接操作后并不能保证ZK连接已成功。如果在ZK连接成功前的这个小时间窗口去访问ZK,就会碰到如上错误。
2. 解决思路
我们在新建ZK连接后要等一段时间,保证连接成功后再访问ZK。
3. 网上比较赞同的解决方案:
主要利用两个Java类:
(1)java.util.concurrent.CountDownLatch:
一个同步辅助类,类似倒数计数,直到计数器为0时才能对资源“解锁”。未解锁前等待该资源的进程只能被阻塞。
主要方法:
public CountDownLatch(int count); /* 构造函数,参数指定计数次数 */
public void countDown(); /* 当前线程调用此函数,则计数减一 */
public void await() throws InterruptedException; /* 此函数会一直阻塞当前线程,直到计时器的值为0为止 */
(2)org.apache.zookeeper.Watcher
ZooKeeper有一个很有用的功能,就是集群上每一个变化都可以通知到自定义的Watchcer。
因为你这样就只能监听一次连接。数据接收完也就断开了。你试试把服务器端做成一个线程,不听的监听连接。
import java.net.*;
import java.io.*;
public class server1 implements runnable
{
public static void main(string args[])
{
}
public void run()
{
while(true)
{
try
{
serversocket sc=new serversocket(80);
socket s=sc.accept();
datainputstream di=new datainputstream(s.getinputstream());
system.out.println(di.readint());
}
catch(exception e){e.printstacktrace();}
}
}
}
Hadoop|
Apache Pig|
Apache Kafka|
Apache Storm|
Impala|
Zookeeper|
SAS|
TensorFlow|
人工智能基础|
Apache Kylin|
Openstack|
Flink|
MapReduce|
大数据|
云计算|
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....