zookeeper-1.操作与应用场景-《每日五分钟搞定大数据》

Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容。像配置管理、任务分发、组服务、分布式消息队列、分布式通知/协调等,这些应用实际上都是基于这项基础服务由用户自己摸索出来的。

1.Zookeeper在大数据系统中的常见应用

zookeeper作为分布式协调系统在大数据领域非常常用,它是一个很好的中心化管理工具。下面举几个常见的应用场景。

1.1.HDFS/YARN

  • HA(分布式锁的应用):Master挂掉之后迅速切换到slave节点。

    1.2.hbase

  • HA :同上。
  • 配置管理 :client需要读写hbase的数据首先都是连到ZK读取root表,获得meta表所在的region,最后找到数据所在位置。
  • 任务发布:regionserver挂了一台,master需要重新分配region,会把任务放在zookeeper等regionserver来获取

    1.3.kafka

  • 配置管理:broker会在zookeeper注册并保持相关的元数据(topic,partition信息等)更新
  • 任务分配:给topic分配partitions和replication

2.Zookeeper有哪些操作特性

2.1.数据结构

ZooKeeper命名空间中的Znode,兼具文件和目录两种特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。 每个Znode由3部分组成:

  1. stat状态信息:描述该Znode的版本, 权限等信息
  2. data:与该Znode关联的数据(配置文件信息、状态信息、汇集位置),数据大小至多1M
  3. children:该Znode下的子节点

ZooKeeper中的每个节点存储的数据要被原子性的操作。也就是说读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据。另外,每一个节点都拥有自己的ACL(访问控制列表),这个列表规定了用户的权限,即限定了特定用户对目标节点可以执行的操作。

2.2.watch机制

ZooKeeper可以为所有的读操作设置watch,包括:exists()、getChildren()及getData()。当节点状态发生改变时(Znode的增、删、改)将会触发watch所对应的操作。当watch被触发时,ZooKeeper将会向客户端发送且仅发送一条通知,因为watch只能被触发一次,这样可以减少网络流量。

  1. 数据watch(data watches):getData和exists负责设置数据watch
  2. 孩子watch(child watches):getChildren负责设置孩子watch

    2.3.节点类型

    ZooKeeper中的节点有两种,分别为临时节点和永久节点(还可再分为有序无序)。节点的类型在创建时即被确定,并且不能改变。

  3. 临时节点:该节点的生命周期依赖于创建它们的会话。一旦会话(Session)结束,临时节点将被自动删除,当然可以也可以手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。另外,ZooKeeper的临时节点不允许拥有子节点。(分布式队列)
  4. 永久节点:该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作的时候,他们才能被删除。

3.这些应用是如何通过这些特性实现的

3.1.HA:

两种方式:

  1. 创建两个或多个有序临时节点,永远把最小值当做master
  2. 创建临时节点的为master,多个slave会watch这个节点

3.2.配置管理:

存储集群元数据提供给client使用,体现在比如需要对HBase和Kafka操作时,都会直接连到zookeeper,zookeeper记录了数据存储的位置,存活的节点等元数据信息。

3.3.任务发布:

Master要监视/works和/tasks两个永久节点,以便能感知到由哪些slave当前可用,当前有新任务需要分配。

分配过程:在/assign下创建当前可用的workA,找到需要分配的taskA,创建/assign/workA/taskA

zookeeper还有很多类似的应用大多都是基于上面的特性。总的来说,zk只是一个提供了一些特性的系统,用户根据这些特性自己定义了它的用法。熟悉了zk的操作以及应用场景,下一篇说下zk的架构设计与角色分工。

公众号:大叔据 。

评论不能及时回复可直接加公众号提问或交流,知无不答,谢谢 。

原文地址:https://www.cnblogs.com/uncleData/p/9650265.html

时间: 2024-09-29 16:39:47

zookeeper-1.操作与应用场景-《每日五分钟搞定大数据》的相关文章

zookeeper-非常重要的zab协议-《每日五分钟搞定大数据》

上篇文章paxos与一致性说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Broadcast即zookeeper"原子""广播"协议.它规定了两种模式:崩溃恢复和消息广播 恢复模式 什么时候进入? 当整个服务框架在启动过程中 当Leader服务器出现网络中断崩溃退出与重启等异常情况 当有新的服务器加入到集群中且集群处于正常状态(广播模式),新服会与leader进行

一篇文章搞懂DataSet、DataFrame、RDD-《每日五分钟搞定大数据》

1. 三者共性: 1.RDD.DataFrame.Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利 2.三者都有惰性机制,执行trainform操作时不会立即执行,遇到Action才会执行 3.三者都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出 4.三者都有partition的概念,如 var predata=data.repartition(24).mapPartitions{       PartLine => {     

HDFS-异常大全-《每日五分钟搞定大数据》

点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>dfs.hosts.exclude</name> <value>/data/hadoop/excludes</value> 在/data/hadoop/excludes文件添加要退役的节点ip(可同时退役多个,一个一行) 2.配置完后刷新节点 # $HADOOP_HOME/b

redis- info调优入门-《每日五分钟搞定大数据》

本文根据redis的info命令查看redis的内存使用情况以及state状态,来观察redis的运行情况以及需要作出的相应优化. info 1.memory used_memory:13409011624 #used_memory=实际缓存占用的内存+Redis自身运行所占用的内存(如元数据.lua).                        #这个值是由Redis使用内存分配器分配的内存,不包括内存碎片浪费的内存. used_memory_rss:13740019719 #从操作系统上

redis- 使用info轻松调优-《每日五分钟搞定大数据》

本文根据redis的info命令查看redis的内存使用情况以及state状态,来观察redis的运行情况以及需要作出的相应优化. info 1.memory used_memory:13409011624 #used_memory=实际缓存占用的内存+Redis自身运行所占用的内存(如元数据.lua).                        #这个值是由Redis使用内存分配器分配的内存,不包括内存碎片浪费的内存. used_memory_rss:13740019719 #从操作系统上

YARN-异常大全-《每日五分钟搞定大数据》

#问题描述:NodeManager1 cpu负载飙高,进程还在但是不再向ResourceManager发送心跳,不断重复下文2的动作.心跳停止一段时间后会重连上RM但是cpu仍然很高,再过一段时间心跳再停,一直循环. #节点管理器的日志解析1.localizing:容器开始从HDFS下载资源,HDFS文件的状态从INIT变成下载. 2018年8月25日16:15:38592信息org.apache.hadoop .yarn.server.nodemanager.containermanager.

五分钟搞定 Linux 文档全部知识,就看这篇文章

写在前面 我们都知道Linux是一个支持多用户.多任务的系统,这也是它最优秀的特性,即可能同时有很多人都在系统上进行工作,所以千万不要强制关机,同时,为了保护每个人的隐私和工作环境,针对某一个文档(文件.目录),Linux系统定义了三种身份,分别是拥有者(owner).群组(group).其他人(others),每一种身份又对应三种权限,分别是可读(readable).可写(writable).可执行(excutable). 文档属性 使用命令ls -al --full-time,或者此命令的简

运维日常:五分钟搞定PHP的redis问题

一.前言 1.需求 2.解决LNMP环境中的PHP缺少redis扩展包,导致访问页面报错500,处理问题,安装PHP扩展功能redis. 下面记录整个过程,如果不想看,而只想在最短的时间内搞定这个问题,请直接翻到最后,使用脚本. 二.安装 1.下载扩展包 [[email protected] source]# git clone https://github.com/nicolasff/phpredis Cloning into 'phpredis'... remote: Enumerating

品牌营销进化三大方向:场景爆破、移动互联与大数据整合

一个品牌在媒体众多.消费者被高度分散的时代,应该如何做,才能让消费者对你印象深刻,并且不断累积品牌资产?如何通过广告和营销引发消费行动?在扑面而来的移动互联网时代,品牌的传播模式正在遭受一场前所未有的革命. 这场需要重新定义传播模式的革命,根本原因,在于今天消费者生活形态的几个变化. 第一个变化,来自于消费者随时随地可以享用的移动互联网,注意力被分散,移动终端链接其他终端的需求加强. 第二个变化,消费者快速穿梭于各个场所和空间,生活半径逐步扩大和分散,单一媒体已经很难覆盖你想要的消费者. 第三个