一、Zookeeper在Hadoop生态圈的位置
分布式环境下常见的问题
集群的管理问题,如何检测各个节点的生命状态
如何实现分布式锁
如何统一管理集群的配置文件
集群中某个节点的信息更新如何同步到整个集群的机器
集群内部的选举问题如何实现
抢占资源的时候,容易出现死锁和活锁,当处于活锁时每个线程都抢不到资源,会造成CPU的耗费,如何减少消耗
了解完分布式环境下所面临的问题后,其实我们接下来所要介绍的组件,就可以很轻松地来解决这些情况。我们继续来看一下什么是Zookeeper,Zookeeper的英文意思是动物管理员。Zookeeper在Hadoop生态圈里面,是处于一个分布式协调的服务,请看下面Hadoop生态圈的图:
Hadoop生态圈中包含了很多组件,一眼望去,几乎所有组件的头像都是动物,唯独这个Zookeeper,是一个人的形象。我们都知道,我们人是要比动物高级的,其实也可以说明一个问题,我们的Zookeeper其实在大数据环境中,是一个非常重要的角色,主要体现在可以协调我们的其他组件。
二、Zookeeper的概念及特点
Zookeeper的概念
什么是Zookeeper?其实可以用一句简单的话来总结:Zookeeper是一个长得像Linux系统,但是每个目录又是可以存放内容的小型数据库。Zookeeper的每个目录,其实是称为我们Zookeeper里面的节点。操作起Zookeeper,其实就像在操作Linux系统一样。每个节点,又可以存放内容,比如说,可以简单存一下HBase(分布式列式数据库,数据主要存放在HDFS上)与HDFS的路由信息等。
Zookeeper的特点
部署Zookeeper的时候是要单独部署、单独配置,但是多个Zookeeper也将会组成一个集群。整个集群对外展示的是一个完整统一的视图,比如我们去操作Zookeeper集群,只需要对其中一台操作即可,其会同步到整个集群。
Zookeeper集群往往是部署奇数台,这是由于其内部选举机制所限制的。
Zookeeper的相关名词解释
节点:即目录,目录里面可以存放内容,各种应用场景,与节点的特性密切相关。
节点的特性有两种维度,第一维度为是持久还是临时,另一维度为是否有序。组合成四种类型:
1、临时节点(EPHEMERAL):创建者超时连接或者失去连接时,节点会被删除
2、持久节点(PERSISTENT):节点创建后会被持久化,客户端与Zookeeper断开连接后,该节点依旧存在
3、临时有序节点(EPHEMERAL_SEQUENTIAL)与持久有序节点(PERSISTENT_SEQUENTIAL)
创建的节点名称后会自动添加序号,如节点名称为"node",自动添加为"node1",顺序添加为"node2",以此类似,序号不断添加。
watcher机制:我们都知道Zookeeper是一个分布式协调服务,那么是怎么协调的呢?其实Zookeeper自己本身有一个watcher机制,监控着我们的节点变化的,就像是我们人的眼睛,可以监控着你的大数据集群里面哪些动物(服务器)出问题了,出了问题又会怎么操作,这些都离不开Zookeeper的watcher机制。
三、Zookeeper的常用应用场景
1、配置文件的同步:当集群里面,往往很多台服务器都使用相同的配置,如果突然配置文件里面的配置有改变,那么需要去修改每一台服务器的配置,这个时候就非常地麻烦,如果有了Zookeeper,那么我们可以在Zookeeper里的一个节点上存放好配置文件,因为我们的Zookeeper拥有监控机制,所以,当一台服务器的节点发生变化的时候,会被Zookeeper监控到,然后将改变结果,同步到Zookeeper集群,即同步到其他服务器。
2、分布式锁实现:每个用户都去Zookeeper里面创建临时序列节点,创建的节点是有序的,而且是临时的。我们可以让最小的有序节点来获取分布式锁,当获得锁的用户执行完程序,则删除其对应的节点,然后其他节点就是最小节点了,此时执行其他节点,以此类型进行下去,达到分布式锁的作用…
3、各个组件的HA(High Availability:高可用性)的实现:比如说,我们前面的HDFS集群,master节点上有一个Namenode进程,其余slaves节点分别有一个Datanode进程,当Namenode进程挂掉之后,整一个集群就挂了,这在大数据场景里面是不允许的。此时就可以用上我们的Zookeeper,监控集群的状态,比如说部署两个Namenode,其中一个是活跃状态,一个是备用状态,当活跃的Namenode服务器挂掉后,Zookeeper会监控到情况,并自动地切换备用状态Namenode会活跃状态。
————————————————
版权声明:本文为CSDN博主「邵奈一」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shaock2018/article/details/97755346