Yarn组件、SparkOnYarn

Yarn是主从架构
Yarn的四大组件:ResourceManager、ApplicationMaster、NodeManager、Container
ResourceManager:运行在Master上的一个进程,负责集群的资源调度
NodeManager:运行在Slaver上的一个进程,负责向Master上报子节点的运行、资源状况。
ApplicationMaster:运行在Slaver上,是Yarn暴露给我们的客户端,需要将我们的程序封装到ApplicationMaster中,才可以与ResourceManager进行沟通。
Container:运行在Slaver上,是集群资源分配的单位

这里写图片描述
如上图所示:从我们的客户端Client开始,Client向ResourceManager索要资源时,首先会在集群中找一个Container为Client封装好的东西起一个ApplicationMaster,之后就与Client无关了,ApplicationMaster将Client注册到ResourceManager,并与之沟通,请求资源。ApplicationMaster收到来自ResourceManager的资源列表后,就会通知相应的NodeManager启动资源,而NodeManager便会为之启动Container,随后ApplicationMaster就会将Task发送至这些Container运行,运行结束后,结果又会送回至ApplicationMaster

如下为SparkOnYarn的例子:
这里写图片描述
1:Spark客户端提交请求,向ResourceManager申请资源
2、3:ResourceManager在集群中的某个NodeManager中找一个Container,将Spark程序封装为APPMaster并启动
4:针对Spark来说,APPMaster里启动的其实就是Driver里的DAGScheduler和TaskScheduler(图中的YarnClusterScheduler)
5、6、7:APPMaster向ResourceManager申请资源(Container),得到资源列表后,通知NodeManager启动Container,(图中第6步有些问题,应该是APPMaster通知NodeManager启动Container的不是ResourceManager)
8、9:Spark的TaskScheduler最终将从HDFS中读取的数据转化为Tasks,并分配给Worker上的Executor,来执行。而这里的Executor是放在Container中执行的,所以就有一个问题:如果Container的资源大小小于Executor所需该怎么办?这时Executor就无法放在Container中执行了,但是此时任务不会失败,而是会进入重试等待的状态,当有机器的Container大小满足时该Executor的需求时,Yarn便会分配给该Executor
last:Executor中的计算结果最终再送回至TaskScheduler中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值