- 浏览: 289757 次
- 性别:
- 来自: 广州
-
文章分类
- 全部博客 (247)
- free talking (11)
- java (18)
- search (16)
- hbase (34)
- open-sources (0)
- architect (1)
- zookeeper (16)
- vm (1)
- hadoop (34)
- nutch (33)
- lucene (5)
- ubuntu/shell (8)
- ant (0)
- mapreduce (5)
- hdfs (2)
- hadoop sources reading (13)
- AI (0)
- distributed tech (1)
- others (1)
- maths (6)
- english (1)
- art & entertainment (1)
- nosql (1)
- algorithms (8)
- hadoop-2.5 (16)
- hbase-0.94.2 source (28)
- zookeeper-3.4.3 source reading (1)
- solr (1)
- TODO (3)
- JVM optimization (1)
- architecture (0)
- hbase-guideline (1)
- data mining (3)
- hive (1)
- mahout (0)
- spark (28)
- scala (3)
- python (0)
- machine learning (1)
最新评论
-
jpsb:
...
为什么需要分布式? -
leibnitz:
hi guy, this is used as develo ...
compile hadoop-2.5.x on OS X(macbook) -
string2020:
撸主真土豪,在苹果里面玩大数据.
compile hadoop-2.5.x on OS X(macbook) -
youngliu_liu:
怎样运行这个脚本啊??大牛,我刚进入搜索引擎行业,希望你能不吝 ...
nutch 数据增量更新 -
leibnitz:
also, there is a similar bug ...
2。hbase CRUD--Lease in hbase
这几天尝试进行leader/follower的测试,当然目前还没去看源码实现.但觉得还是相当的.
以下是对网上一段代码的修改,因为原来的测不出来什么东西.
note:
运行时只有两个节点时(leader&follower),当leader down后,the other one 一般很少自动切换到ld;但三个以上是没有问题的,何解?不知道是不是所谓的'ensemble'模式下'大部分机器正常动作才提供supply services这个原因呢...
/**
* LeaderElection
* 通用实现方案:(MY)
* 假如这个最小编号的 Server 死去,**由于是 EPHEMERAL 节点,死去的 Server 对应的节点也被删除**,
* 所以当前的节点列表中又出现一个最小编号的节点,我们就选择这个节点为当前 Master。
* 这样就实现了动态选择 Master,避免了传统意义上单 Master 容易出现单点故障的问题。(可以参考本项目Locks.java)
* NOTE:这里的实现是简化的
*
* 本测试需要先单独启动TestMainServer(也可以打开TestMainServer.start()再启clients RAW),
* 然后再启动其它若干个,
* 再手工删除master node:/GroupMembers/leader,
* 观察其它节目是否可以顺利过渡到新的leader-followers状态.
*/
public class LeaderElection extends TestMainClient {
public static final Logger logger = Logger.getLogger(LeaderElection.class);
public LeaderElection(String connectString, String root) {
super(connectString);
// try {
// connectedSignal.await(); //MY test result:no effect
// } catch (InterruptedException e1) {
// e1.printStackTrace();
// }
this.root = root;
if (zk != null) {
try {
Stat s = zk.exists(root, false);
if (s == null) {
zk.create(root, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
} catch (KeeperException e) {
logger.error(e);
} catch (InterruptedException e) {
logger.error(e);
}
}
}
void findLeader() throws InterruptedException, UnknownHostException, KeeperException {
byte[] leader = null;
try {
leader = zk.getData(root + "/leader", true, null);
} catch (KeeperException e) {
if (e instanceof KeeperException.NoNodeException) { //this exception is acceptable
logger.error(e);
e.printStackTrace();
} else {
throw e;
}
}
//已经存在master,只能作为follower
if (leader != null) {
System.out.println("10");
following();
//MY
synchronized(mutex){
mutex.wait();
}
System.out.println("14");
findLeader(); //继续竟争master
} else {
System.out.println("11");
String newLeader = null;
byte[] localhost = InetAddress.getLocalHost().getAddress();
try {
newLeader = zk.create(root + "/leader", localhost, ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL); //NOTE: 必须为临时节点,server死亡后可以由其它节点实时选举leader
zk.exists(root + "/leader", true); //set a watch for the COMING leader!
} catch (KeeperException e) {
//并发运行时可能出现此情况,this exception is acceptable
if (e instanceof KeeperException.NodeExistsException) {
logger.error(e);
e.printStackTrace();
} else {
throw e;
}
}
if (newLeader != null) {
leading();
//other things to process...
//for example
//MY 驻留
System.out.println("1");
synchronized(mutex){
try {
System.out.println("2");
mutex.wait();
System.out.println("3");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//完成任务后放弃leader权限,但继续竟选leader
//模拟死亡
System.out.println("4");
System.exit(1); //EXIT
System.out.println("5");
} else {
System.out.println("12");
synchronized(mutex){
mutex.wait();
}
System.out.println("13");
//MY
findLeader();////继续竟争master
}
}
}
@Override
public void process(WatchedEvent event) {
System.out.println("9");
if(event.getState() == KeeperState.SyncConnected){
//MY
//connectedSignal.countDown();
}
if (event.getPath().equals(root + "/leader") ) {
if(event.getType() == Event.EventType.NodeCreated){
System.out.println("得到通知-leader NodeCreated");
//RAW
// super.process(event);
// following();
}
//MY 删除master时通知其它followers竟争选择新master
if(event.getType() == Event.EventType.NodeDeleted){
System.out.println("6");
synchronized(mutex){
//System.out.println("7");
mutex.notify(); //如果每个应用中只存在一个waiter则可以使用这方法,否则使用notifyAll()
}
System.out.println("8");
//MY
//模拟:如果是本server宕机了,删除master node(如果没删除),让其它nodes选举一个继任master
// try {
// byte[] localhost = InetAddress.getLocalHost().getAddress();
// byte[] leader = zk.getData(root + "/leader", true, null);
// if(new String(localhost).equals(new String(leader))){
// zk.delete(root + "/leader", -1);
// //退出本应用.所以本应用最好使用TestMainServer先运行提供服务,
// //而不是利用一个启动LeaderElection驻留来提供服务
// }else{
// //do nothing,其它node继续寻求继任master
// }
// } catch (UnknownHostException e) {
// e.printStackTrace();
// } catch (KeeperException e) {
// e.printStackTrace();
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
}
}
}
void leading() {
System.out.println("成为领导者");
}
void following() {
System.out.println("成为组成员");
}
public static void main(String[] args) {
// TestMainServer.start(); //if enable this clause,the flag EXIT must be commented
String connectString = "localhost:" + TestMainServer.CLIENT_PORT;
LeaderElection le = new LeaderElection(connectString, "/GroupMembers");
try {
le.findLeader();
} catch (Exception e) {
logger.error(e);
e.printStackTrace();
}
}
}
tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
Zookeeper 还支持另外一种伪集群的方式,也就是可以在一台物理机上运行多个 Zookeeper 实例(hbase也
集群模式配置(比单机模式多添加的项)
initLimit=5
syncLimit=2
server.1=192.168.211.1:2888:3888
server.2=192.168.211.2:2888:3888
* initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
* syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒
* server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
利用zkCli.sh -server <host>:<port>可以连接指定的zk Servers;
不同的host或port建立的nodes,是存放不同的.
zk.setData()方法后,watch恢复false默认
是否产生event只决定于最后一次的设置true/false
发表评论
-
zookeeper-network partition
2016-02-29 17:36 1876env: hbase,94.26 zookeeper, ... -
zookeeper-negotiated session timeout
2015-09-23 15:09 6303in zookeeper ,during certai ... -
zookeeper-3.5--1.summary-paxos
2015-03-19 18:04 505====以下部分内容转自p ... -
zookeeper-3.5--3.event notification machanism
2015-02-13 17:01 0todo ref: zookeeper-3.5- ... -
zookeeper-3.5--2.create/set/get/delete ops--standalone
2015-02-13 16:56 0todo ref: zookeeper-3 ... -
zookeeper-3.5--1.summary
2015-02-15 17:41 670here will talk about the sk ... -
zookeeper-3.5--study flow
2014-12-31 17:13 1069yes,i have studied zooke ... -
hbase -regions assignment(in creating table)
2014-07-22 17:45 782as iwinit dug in source codes ... -
zookeeper-flush WAL file slowly
2014-05-16 14:51 14922014-05-15 09:08:01,803 [myid ... -
zookeeper 丢失事件/miss event
2013-05-31 14:26 8961今天在统计页面上发现有个节点丢失了,经过仔细分析后,发现同 ... -
zookeeper 使用中的几点思考
2012-07-15 16:48 769todo -
zookeeper 事件触发流程
2012-07-03 02:54 0todo -
zookeeper shell starting flow
2012-05-29 01:54 806todo -
zookeeper 核心算法之 zab & paxos比较
2011-05-25 23:46 7641一。概念 zab:zookeeper automic bro ... -
search cluster with zookeeper
2011-05-25 20:38 744search architecture -
zookeeper features(summary)
2011-05-22 11:32 1087**refer to zookeeper 3.2.2** z ... -
zookeeper cluster install note
2011-02-27 02:50 1304here is a handy steps to intall ... -
zookeeper学习笔记一
2011-02-01 23:17 1049源自google的chubby论文,yahoo的实现,注就了我 ...
相关推荐
内容概要:本文详细介绍了基于MATLAB GUI界面和卷积神经网络(CNN)的模糊车牌识别系统。该系统旨在解决现实中车牌因模糊不清导致识别困难的问题。文中阐述了整个流程的关键步骤,包括图像的模糊还原、灰度化、阈值化、边缘检测、孔洞填充、形态学操作、滤波操作、车牌定位、字符分割以及最终的字符识别。通过使用维纳滤波或最小二乘法约束滤波进行模糊还原,再利用CNN的强大特征提取能力完成字符分类。此外,还特别强调了MATLAB GUI界面的设计,使得用户能直观便捷地操作整个系统。 适合人群:对图像处理和深度学习感兴趣的科研人员、高校学生及从事相关领域的工程师。 使用场景及目标:适用于交通管理、智能停车场等领域,用于提升车牌识别的准确性和效率,特别是在面对模糊车牌时的表现。 其他说明:文中提供了部分关键代码片段作为参考,并对实验结果进行了详细的分析,展示了系统在不同环境下的表现情况及其潜在的应用前景。
嵌入式八股文面试题库资料知识宝典-计算机专业试题.zip
嵌入式八股文面试题库资料知识宝典-C and C++ normal interview_3.zip
内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。
少儿编程scratch项目源代码文件案例素材-剑客冲刺.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 转瞬即逝.zip
内容概要:本文详细介绍了基于PID控制器的四象限直流电机速度驱动控制系统仿真模型及其永磁直流电机(PMDC)转速控制模型。首先阐述了PID控制器的工作原理,即通过对系统误差的比例、积分和微分运算来调整电机的驱动信号,从而实现转速的精确控制。接着讨论了如何利用PID控制器使有刷PMDC电机在四个象限中精确跟踪参考速度,并展示了仿真模型在应对快速负载扰动时的有效性和稳定性。最后,提供了Simulink仿真模型和详细的Word模型说明文档,帮助读者理解和调整PID控制器参数,以达到最佳控制效果。 适合人群:从事电力电子与电机控制领域的研究人员和技术人员,尤其是对四象限直流电机速度驱动控制系统感兴趣的读者。 使用场景及目标:适用于需要深入了解和掌握四象限直流电机速度驱动控制系统设计与实现的研究人员和技术人员。目标是在实际项目中能够运用PID控制器实现电机转速的精确控制,并提高系统的稳定性和抗干扰能力。 其他说明:文中引用了多篇相关领域的权威文献,确保了理论依据的可靠性和实用性。此外,提供的Simulink模型和Word文档有助于读者更好地理解和实践所介绍的内容。
嵌入式八股文面试题库资料知识宝典-2013年海康威视校园招聘嵌入式开发笔试题.zip
少儿编程scratch项目源代码文件案例素材-驾驶通关.zip
小区开放对周边道路通行能力影响的研究.pdf
内容概要:本文探讨了冷链物流车辆路径优化问题,特别是如何通过NSGA-2遗传算法和软硬时间窗策略来实现高效、环保和高客户满意度的路径规划。文中介绍了冷链物流的特点及其重要性,提出了软时间窗概念,允许一定的配送时间弹性,同时考虑碳排放成本,以达到绿色物流的目的。此外,还讨论了如何将客户满意度作为路径优化的重要评价标准之一。最后,通过一段简化的Python代码展示了遗传算法的应用。 适合人群:从事物流管理、冷链物流运营的专业人士,以及对遗传算法和路径优化感兴趣的科研人员和技术开发者。 使用场景及目标:适用于冷链物流企业,旨在优化配送路线,降低运营成本,减少碳排放,提升客户满意度。目标是帮助企业实现绿色、高效的物流配送系统。 其他说明:文中提供的代码仅为示意,实际应用需根据具体情况调整参数设置和模型构建。
少儿编程scratch项目源代码文件案例素材-恐怖矿井.zip
内容概要:本文详细介绍了基于STM32F030的无刷电机控制方案,重点在于高压FOC(磁场定向控制)技术和滑膜无感FOC的应用。该方案实现了过载、过欠压、堵转等多种保护机制,并提供了完整的源码、原理图和PCB设计。文中展示了关键代码片段,如滑膜观测器和电流环处理,以及保护机制的具体实现方法。此外,还提到了方案的移植要点和实际测试效果,确保系统的稳定性和高效性。 适合人群:嵌入式系统开发者、电机控制系统工程师、硬件工程师。 使用场景及目标:适用于需要高性能无刷电机控制的应用场景,如工业自动化设备、无人机、电动工具等。目标是提供一种成熟的、经过验证的无刷电机控制方案,帮助开发者快速实现并优化电机控制性能。 其他说明:提供的资料包括详细的原理图、PCB设计文件、源码及测试视频,方便开发者进行学习和应用。
基于有限体积法Godunov格式的管道泄漏检测模型研究.pdf
嵌入式八股文面试题库资料知识宝典-CC++笔试题-深圳有为(2019.2.28)1.zip
少儿编程scratch项目源代码文件案例素材-几何冲刺 V1.5.zip
Android系统开发_Linux内核配置_USB-HID设备模拟_通过root权限将Android设备转换为全功能USB键盘的项目实现_该项目需要内核支持configFS文件系统
C# WPF - LiveCharts Project
少儿编程scratch项目源代码文件案例素材-恐怖叉子 动画.zip
嵌入式八股文面试题库资料知识宝典-嵌⼊式⼯程师⾯试⾼频问题.zip