YARN,ZOOKEERPER--学习笔记

1,YARN组件

1.1YARN简介

YARN表示分布式资源调度,简单地说,就是:以分布式技术完成资源的合理分配,让MapReduce能高效完成计算任务。
YARN是Hadoop核心组件之一,用于提供分布式资源调度服务。
而在Hadoop 1.x时,这个过程主要是通过MapReduce中的TaskTracker、JobTracker通信来完成。

这种架构方案主要缺点是:
1)服务器集群资源调度管理和MapReduce执行过程耦合在一起;
2)如果想在当前集群中运行其他计算任务,比如Spark、Storm,则无法统一使用集群中的资源。

在早期Hadoop时,大数据技术就只有Hadoop一家,这个缺点并不明显。
但随着大数据技术的发展,各种新的计算框架不断出现,我们不可能为每一种计算框架部署一个服务器集群,而且就算能部署新集群,数据还是在原来集群的HDFS上,这严重阻碍了大数据技术的发展。
由此,在Hadoop 2.x引来了最主要变化:将Yarn从MapReduce中分离出来,成为一个独立的资源调度框架。
可别小瞧了这个做法,单独分离出YARN带来的优势尤其明显:

1)解耦了MapReduce框架,专注于计算;
(2)分工更加明确、精细化;[专业的事由专业的人去做]3)正因为有了分离YARN,后期诞生了一个个优秀的专注于计算引擎的大数据框架,比如Spark、Flink等。

Yarn是"Yet Another Resource Negotiator"的缩写,字面意思就是:另一种资源调度器。主要区别于当时已有的另一些资源调度器产品,比如Mesos等。通常情况下,YARN是与MapReduce交互配合使用,并给MapReduce合理分配资
源。
比如,MapReduce程序向YARN申请资源,YARN合理分配资源。
当成功分配好资源后,MapReduce即可完成计算任务,而空闲资源也可供其它程序使用。
Hadoop架构有三大核心组件,分别是:HDFS、MapReduce、YARN。

1.2YARN架构组成

在了解YARN架构之前,先来了解一下三个名词:
(1)资源
服务器硬件资源,如CPU、内存、硬盘、网络等
(2)资源调度
管控硬件资源,提升服务器的利用率
(3)分布式资源调度
管控整个分布式服务器集群的全部资源,并整合进行统一调度
YARN架构是由四个模块组成,分别是:
a)ResourceManager(资源管理器):用于接收用户的计算请求任务,并负责集群
的资源分配;
b)NodeManager(节点管理器):单个服务器的资源调度者,负责调度单个服务
器资源并提供给程序使用;
c)ApplicationMaster(任务管理器):单个任务运行的管理者;
d)Client Application:客户端提交的应用程序。
会发现,ResourceManager与NodeManager是Yarn资源调度的核心模块。
YARN分布式资源调度,也遵循中心化模式(主从模式),有两个核心角色:

1)主(Master)角色:ResourceManager
(2)从(Slave) 角色:NodeManager 

1.3YARN提交MR的流程

了解YARN的基本执行流程?

1)我们向Yarn提交应用程序,包括ApplicationMaster、我们的MapReduce程序,以及MapReduce程序启动命令;
2)ResourceManager进程和NodeManager进程通信,根据集群资源,为用户程序分配第一个容器,并将ApplicationMaster分发到这个容器上面,并在容器里面启ApplicationMaster;
3)ApplicationMaster启动后,立即向ResourceManager进程注册,并为自己的应用程序申请容器资源;
4)ApplicationMaster申请到需要的容器后,立即和相应的NodeManager进程通信,将用户MapReduce程序分发到NodeManager进程所在服务器,并在容器中运行,运行的就是Map或者Reduce任务;
5)Map或者Reduce任务在运行时,和ApplicationMaster通信,汇报自己的运行状态。
如果运行结束,ApplicationMaster向ResourceManager进程注销并释放所有的容器资源。到这里,MapReduce程序已执行完成!

1.4 YARN的三大调度器

1,先进先出调度器
FIFO Scheduler表示先进先出调度器。
先进先出调度器指的是:把应用按提交的顺序排成一个队列,在进行资源分配时,先给队列中【队头】的应用进行分配资源,待【队头】的应用需求满足后,再给下一个
应用分配,以此类推。

1)优点
能够保证每一个任务都能拿到充足的资源, 对于大任务的运行非常有好处。
(2)缺点
如果先有大任务后有小任务, 会导致后续小任务无资源可用, 长期处于等待状态。

一般地,在普通数据量提交计算时,几乎不会涉及调度器的设定,但海量数据处理时,要多考虑下调度器的设定。
2,公平调度器
Fair Scheduler表示公平调度器。
Fair Scheduler不需要保留集群的资源,因为它会动态在所有正在运行的作业之间平衡资源。
Fair Scheduler 当一个大job提交时,只有这一个job在运行,此时它获得了所有集群资源;当后面有小任务提交后,公平调度器会分配一半资源给这个小任务,让这两个
任务公平的共享集群资源。通常情况下,各分享50%资源!
公平调度器执行效果:
(1)优点
能够保证每个任务都有资源可用, 不会有大量的任务等待在资源分配中。
(2)缺点
如果大任务非常的多, 就会导致每个任务获取资源都非常的有限, 也会导致执行时间会拉长。
相比较而言,公平调度器相对来说,分配资源时较为公平公正。
3,容量调度器
Capacity Scheduler表示容量调度器。
Capacity Scheduler为每个组织分配专门的队列和一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了。
在每个队列内部,资源的调度是采用的是先进先出(FIFO)策略。

1)优点
可以保证多个任务都可以使用一定的资源, 提升资源的利用率。
(2)缺点
如果遇到非常大的任务, 此任务不管运行在哪个队列中, 都无法使用到集群中所有的资源, 导致大任务执行效率比较低, 当任务比较繁忙时, 依然会出现等待状态。

(1)调度器的使用,是通过/export/server/hadoop-3.3.0/etc/hadoop/yarnsite.xml配置文件中的。

yarn.resourcemanager.scheduler.class参数进行配置的,默认采用
Capacity Scheduler调度器。
1)在这个配置中,在root队列下面定义了两个子队列prod和dev,分别占40%60%的容量;
(2)prod由于没有设置maximum-capacity属性,它有可能会占用集群全部资源;
(3)dev的maximum-capacity属性被设置成了75%,所以即使prod队列完全空闲
dev也不会占用全部集群资源,也就是说,prod队列仍有25%的可用资源用来应急。

2, ZooKeeper概述

2.1ZooKeeper简介

Zookeeper(动物管理员)是一个分布式协调服务的开源框架,简要地说,就是管理大数据生态圈的各类"动物"。
ZooKeeper本质上是一个分布式的小文件存储系统。
采用树形层次结构,ZooKeeper树中的每个节点被称为Znode,且树中的每个节点可以拥有子节点。
Zookeeper具有如下特性:

1)全局数据一致:集群中每个服务器保存一份相同的数据副本,Client客户端无论连接哪个服务器,展示的数据都是一致的;[最重要]
2)可靠性:如果消息被其中一台服务器接收,那么将被所有的服务器接受;
3)顺序性:包括全局有序和偏序两种。
全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;
偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
4)数据更新原子性:一次数据更新要么成功(半数以上节点成功),要么失败,不存在中间状态;
5)实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

2.2集群角色

Zookeeper表示分布式协调服务。
使用Zookeeper时至少需要两个Hadoop服务,一主一备,主服务对外提供业务功能,备用等待主服务不可用时,启用备用服务器对外提供业务功能。
在Zookeeper中,可供服务的角色有三类,分别是:

1)leader:管理者,负责管理follower,处理所有的事务请求(数据的保存,修改,删除);
(2)follower:追随者,负责选举(选举leader)和数据的同步及获取;
(3)observer:观察者,负责数据的同步及获取(需要在配置文件中指定才能生效)

(1)leader管理者

leader管理者是Zookeeper集群工作的核心。负责管理follower,处理所有的事务请求(包括数据的保存,修改,删除)。

(2)follower追随者

follower追随者负责处理客户端非事务(读操作)请求,并转发事务请求给leader管理者。
同时,follower还会参与集群Leader选举投票。

(3)observer观察者
而针对访问量比较大的Zookeeper集群,还可新增observer观察者角色

负责数据的同步及获取(需要在配置文件中指定才能生效)。

Zookeeper的集群常见角色有三个,分别是:leader、follower、observer。

2.3 ZooKeeper服务

1,配置环境变量
(1)未配置环境变量 按Shell脚本方式完成执行。此时,需要依次执行命令:
leader管理者是Zookeeper集群工作的核心。负责管理follower,处理所有的事务
请求(包括数据的保存,修改,删除)。
follower追随者负责处理客户端非事务(读操作)请求,并转发事务请求给leader管理者。
同时,follower还会参与集群Leader选举投票。
负责数据的同步及获取(需要在配置文件中指定才能生效)。
(1)未配置环境变量
按Shell脚本方式完成执行
(2)先配置环境变量,再直接执行
cd /export/server/zookeeper/bin 1./zkServer.sh status 1
(2)先配置环境变量,再直接执行
此时,需要来配置zookeeper环境变量,注意:三台虚拟机都要进行配置。

echo 'export ZOOKEEPER_HOME=/export/server/zookeeper' >>
/etc/profile
echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> /etc/profile
source /etc/profile

此时,可以在虚拟机的任意位置执行命令:

zkServer.sh status

我们会发现,配置环境变量的好处是能让命令在不同路径下,都能成功执行。

2.4启动ZooKeeper

对于ZooKeeper的服务,需要在虚拟机中启动后才能使用。启动ZooKeeper命令:

zkServer.sh start

对于ZooKeeper的服务,还可以查看状态与关闭服务,命令:

# 查看状态
zkServer.sh status
# 如果想关闭可以使用stop
zkServer.sh stop

一般地,当仅在一台服务器上启动了ZooKeeper服务,可能无法查看到它所对应的服务角色。
此时,可以多开启一台虚拟机的ZooKeeper服务,再查看角色信息。
当要启动Zookeeper服务时,可以执行zkServer.sh start;命令
在查看服务时,记住三个关键字:start启动、status状态、stop停止。

3,使用ZooKeeper

3.1,客户端连接

当已经成功开启了Zookeeper服务后,则可以使用客户端来连接服务并执行相应操作了。
连接Zookeeper服务时,有两种方式:

# 方式1:连接其他节点
[root@node1 ~]# zkCli.sh -server IP地址
# 方式2:直接连接本地
[root@node1 ~]# zkCli.sh

请添加图片描述
采用zkCli.sh直接连接本地的zkServer,并完成常见命令的使用。
(1)当要远程连接不同服务器的Zookeeper服务时,使用zkCli.sh -server IP地址命令;
(2)注意,当想要快速查看zookeeper客户端的操作命令,可以直接执行help命令。

3.2数据模型

ZooKeeper的数据模型称为Znode,一般有两种体现:
(1)目录:可以存储数据,也可以当做目录使用
(2)文件:可以存储数据,也可以当做目录使用
ZooKeeper的数据模型也有一些不同之处:

1)Znode兼具文件和目录两种特点:Znode没有文件和目录之分,Znode既能像文件一样存储数据,也能像目录作为路径标识的一部分;
(2)Znode具有原子性操作: 读操作将获取与节点相关的所有数据,写操作也将替换掉节点的所有数据;
(3)Znode存储数据大小有限制: 每个Znode的数据大小至多1M,但是在常规使用中,应该远小于此值;
(4)Znode通过路径引用: 路径必须是绝对的,因此他们必须由斜杠字符来开头。除此以外,他们必须是唯一的,也就是说每一个路径只有一个表示,因此这些路径不能改变。
并且,会发现:默认有/zookeeper节点用以保存关键的管理信息。

在zookeeper中的节点是目录或文件都能存储数据,这个描
述正确
(2)通常地,zookeeper数据模型分为目录、文件,但本质上区别不大。

3.3节点类型

create [-e] 节点路径名 数据值
创建数据节点。
当添加-e后,表示临时节点;当创建多层节点时,要保证
已创建最后子节点前的所有节点。
Znode节点类型有两类,分别为:

1)永久节点
该节点的生命周期不依赖于会话,并且只有在客户端显示执行删除操作时,他们才能被删除;
注意: 永久节点可以拥有子节点。
(2)临时节点
该节点的生命周期依赖于创建它们的会话。一旦会话结束,临时节点将被自动删除,也可手动删除;
注意: 临时节点不允许拥有子节点。

当然了,可以通过创建节点是否添加-e选项或ls2能查看到节点类型:

# 添加了-e表示临时节点,否则为永久节点
create [-e] 节点路径名 数据值
# 查看ephemeralOwner字段为0x0时,为永久节点; 结果值较长的为临时节点
ls2 节点路径名
cZxid:Znode创建的事务id。
ctime:Znode创建时的时间戳。
mZxid:Znode被修改的事务id,即每次对当前znode的修改都会更新mZxid。
mtime:Znode最新一次更新发生时的时间戳。
pZxid:Znode的子节点列表变更的事务ID,添加子节点或删除子节点就会影响子节点列表。
cversion:子节点进行变更的版本号。添加子节点或删除子节点就会影响子节点版本号。
dataVersion:数据版本号,每次对节点进行set操作,dataVersion的值都会增
加1(即使设置的是相同的数据),可有效避免了数据更新时出现的先后顺序问题。
aclVersion:权限变化列表版本 access control list Version。
ephemeralOwner:字面翻译临时节点拥有者,持久节点值为0x0,非持久节点不为0(会话ID)。
dataLength:Znode数据长度。
numChildren:当前Znode子节点数量(不包括子子节点)。

当在使用create关键字创建节点时,添加-e表示创建临时节点
(2)当在查看节点详细信息时,可以通ephemeralOwner字段值来区分临时或永久节点

3.4Watch监听机制

通常地,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态发生变化时,会通知所有订
阅者,使他们能够做出相应的处理。
ZooKeeper允许客户端向服务端注册一个Watcher监听,当服务端的一些事件触发了这个Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。
watch监听机制过程有:
(1)客户端向服务端注册Watcher;
(2)服务端事件发生触发Watcher;
(3)客户端回调Watcher得到触发事件情况
仅需到某客户端中设定监听机制格式为
get /节点名 watch
Watch监听机制有如下特点:

a)先注册再触发: Zookeeper中的watch机制,必须客户端先去服务端注册监听,这样事件发送才会触发监听,并通知给客户端;
b)一次性触发: 事件发生触发监听后,一个watcher event就会被发送到设置监听的客户端,这种效果是一次性的,后续再次发生同样的事件,不会再次触发;
c)异步发送: watcher的通知事件从服务端发送到客户端是异步的;(同时进行)
d)通知内容: 通知状态(keeperState),事件类型(EventType)和节点路径(path)。

3.5选举机制

(1)数据发布/订阅
数据发布/订阅系统,就是发布者将数据发布到ZooKeeper的一个节点上,提供订阅者进行数据订阅,从而实现动态更新数据的目的,实现配置信息的集中式管理和数据的动态更新。监听机制就是[数据发布/订阅]快速实现。
(2)提供集群选举
在分布式环境下,不管是主从架构集群,还是主备架构集群,要求在服务时,有且仅有一个正常的对外提供服务的主服务器,我们称之为Master。
当master出现故障之后,需要重新选举出新的Master,用以保证服务的连续可用性。
而Zookeeper则可以提供这样的功能服务,但一般会涉及到:znode唯一性、临时节点短暂性、监听机制等知识使用。
通常情况下,选举机制要求:过半原则。
所以,我们会发现搭建集群一般都是奇数,即只要某个node节点票数过半立刻成为leader。
当然了,选举机制下,也有两个特殊情况:
(1)集群第一次启动
启动follower每次投票后,他们会相互同步投票情况,如果票数相同,谁的myid大,谁就当选leader。
一旦确定了leader,后面来的默认就是follower,即使它的myid大,leader也不会改变(除非leader宕机了)。

# 进入数据目录
cd /export/server/zookeeper/zkdatas
# 查看myid值大小
cat myid

(2)leader宕机后,再次启动
每一个leader当老大时,都会产生新纪元epoch,且每次操作完节点数据都会更新事务id(高32位_低32位) ,而当leader宕机后,剩下的follower就会综合考虑几个因素
选出最新的leader。先比较最后一次更新数据事务id(高32位_低32位),谁的事务id最大,谁就当选leader。
如果更新数据的事务id都相同的情况下,就需要再次考虑myid,谁的myid大,谁就当选leader。

(1)通常情况下,不管选举时属于哪种情况,都有考虑myid值的大小
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/160125.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

逻辑漏洞(业务逻辑)dami CMS

逻辑漏洞(业务支付逻辑漏洞)dami CMS 0x01 业务逻辑简介 业务逻辑指的是一个系统或应用程序中的实际业务规则和流程。它描述了如何处理特定的业务需求、数据和操作。业务逻辑通常是根据特定行业或组织的需求而设计的。 在软件开发中,业务逻…

零编程基础Python的全面学习指南

文章目录 前言什么是编程?Python代码对应的机器码准备开始Windows变量类型整型字符串型布尔类型字符串连接和整数相加if 语句捕获用户输入导入MacWindows游戏时间!小结关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Pyt…

磐舟CI使用说明及案例

整体介绍 磐舟作为一个devops产品,它具备基础的CI流水线功能。同时磐舟的流水线是完全基于云原生架构设计的,在使用时会有一些注意事项。这里首先我们要了解磐舟整体的流水线打包逻辑。 文档结构说明 一般来说,磐舟推荐单个业务的标准git库…

反编译-ApkTool

ApkTool下载地址: Apktool | ApktoolA tool for reverse engineering Android apk fileshttps://apktool.org/ 1、使用 apktool 解包 执行 java -jar apktool_2.4.1.jar d demo.apk -o demo 命令 java -jar apktool_2.4.1.jar d demo.apk -o demo 其中 d 后面是…

Nevron Vision for .NET 2023.1 Crack

Nevron Vision for .NET 适用于桌面和 Web 应用程序的高级数据可视化 Nevron Vision for .NET提供最全面的组件,用于构建面向 Web 和桌面的企业级数据可视化应用程序。 该套件中的组件具有连贯的 2D 和 3D 数据可视化效果,对观众产生巨大的视觉冲击力。我…

基于window10的远程桌面报错:要求的函数不受支持 的问题解决方法

基于window10的远程桌面报错:要求的函数不受支持 的问题解决方法 设置方法: 一、WINR 在框内输入gpedit.msc 二、依次打开 计算机配置----管理模板-----系统—凭据分配—加密数据库修正–改为以启用—易受攻击 第一步: 第二步:…

并查集总结

并查集简介 并查集是一种可以动态维护若干个不重叠的结合,并支持合并与查询的数据结构 并查集是一种树状的数据结构,可以用于维护传递关系以及联通性。 并查集有两种操作: find:查询一个元素属于哪个集合merge:合并两个集合 模…

爆款文章有诀窍,内容创作者如何能持续产出优质内容

内容营销人有没有这么一种共鸣:10 万 那么多,为什么不能多我一个? 通常,我们把浏览量 / 阅读量高、转评赞数量高的内容看作爆款,而数据如果达到 10 万 则是超级爆款。因为,阅读量高意味着内容得到了大量的曝…

8年老鸟整理,自动化测试-准备测试数据详细...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 大部分类型的测试…

基于C#实现Bitmap算法

在所有具有性能优化的数据结构中,我想大家使用最多的就是 hash 表,是的,在具有定位查找上具有 O(1)的常量时间,多么的简洁优美,但是在特定的场合下: ①:对 10 亿个不重复的整数进行排序。 ②&am…

AI原生应用为百度带来新增量

我是卢松松,点点上面的头像,欢迎关注我哦! AI将彻底改变每一个行业!得益于AI和基础模型的驱动,百度在AI原生应用领域厚积薄发。 11月21日,百度Q3财报发布,数据显示:三季度营收达344.47亿元&…

Redis篇---第九篇

系列文章目录 文章目录 系列文章目录前言一、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?二、什么情况下可能会导致 Redis 阻塞?三、缓存和数据库谁先更新呢?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…

Axios简单使用与配置安装-Vue

安装Axios npm i axios main.js 导入 import Axios from axios Vue.prototype.$axios Axios简单发送请求 get getTest() {this.$axios({method: GET,url: https://apis.jxcxin.cn/api/title?urlhttps://apis.jxcxin.cn/}).then(res > {//请求成功回调console.log(res)}…

②⑩ 【MySQL Log】详解MySQL日志:错误日志、二进制日志、查询日志、慢查询日志

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ MySQL日志 ②⑩ MySQL日志:错误日志…

SpringBoot3.x最简集成SpringDoc-OpenApi

为什么使用SpringDoc 在SpringBoot低版本时一般使用Swagger扫描接口生成Json格式的在线文档,然后通过swagger-ui将Json格式的文档以页面形式展示文档。可惜遗憾的是swagger更新到3.0.0版本(springfox)后不更新了。 SpringBoot3.x以后需要的JDK版本最低为Java17&…

MQ和redis的内部原理一些总结

首先,先知道内部原理;其次,就是查官方文档实战了。 但是如果不熟悉内部原理,那么仅仅只是安装官方文档,并不能排除跟踪问题和故障、预防风险等策略; 以下总结图解:(mysql 8.0新增的…

YOLO目标检测——卫星遥感舰船检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:卫星遥感舰船检测数据集说明:卫星遥感舰船检测数据集,真实场景的高质量图片数据,数据场景丰富,含船一个类别标签说明:使用lableimg标注软件标注,标注框质量高,含voc(xm…

Redis的持久化

redis是一个内存数据库,是把数据存储在内存中的,而我们知道内存中的数据是不持久的,一旦服务器重启或者进程重启,内存的数据就丢失了.为了让数据达到持久化的效果,就必须把数据写到硬盘上. redis相对于mysql这样的关系型数据库最明显的优势就是快.所以为了保证速度快,数据还得…

动态跳过测试用例

动态跳过测试用例 说明 我们可以通过指定环境变量来动态判断是否执行指定的测试用例设置环境变量有很多种方法,例如命令行方式,格式:--env keyval1,key2val2 ,若需要指定多个环境变量则需要逗号来隔开,而不是空格 t…

Live800:企业提升客户互动体验,有哪些关键因素?

如今,随着信息时代的不断发展,企业已经不再是单向的商业机构,他们需要与客户进行及时的沟通与反馈,从而更好地提升客户互动体验,达到营销和用户体验的双赢局面。那么,企业如何提升客户互动体验呢&#xff1…