从Spark架构中透视Sparkjob

来源:互联网 发布:阿里云rds逻辑备份 编辑:程序博客网 时间:2024/05/27 20:30

Master接收客户端提交作业的请求,并为客户端分配具体的计算资源。

worker进程中主要负责当前节点上的机器的内存和cpu等资源的使用。
Spark是主从分布式的。

Spark-shell默认情况下没有任何Job。

Driver也是一种Executor进程。
Driver驱动整个集群去工作。
一个Worker可以有多个Executor。

在Spark中,无论程序中有多少作业。都是复用注册时使用的资源。

默认的资源分配方式:在每个Worker上为当前程序分配一个Executorbackend进行,且默认情况下回最大化使用Cores和Memory。

在一个Executor中一次性最多能够运行多少并发的Task取决于当前Executor能够使用的Cores的数量

88个任务具体分配给谁 主要取决于数据本地性
并行度也是被继承的
88二哥并行度就是88个分片

线程是否关系具体运行什么代码?
答:由于线程不关心具体Task中运行什么代码,所以Task和Thread是解耦和的,所以Thread是可以被复用的!

Driver所在的进程叫SparkSubmit

Spark内部结构图
当Spark集群启动的时候,首先启动Master进程,负责整个集群资源的管理和分配并接受的提交且作为作业分配计算资源,每个工作节点默认情况下都会启动一个Worker Process来管理当前节点的Memory、CPU等计算资源并且向Master汇报Worker还能够正常工作。当用户提交作业给master的时候,master会为程序分配ID并分配计算资源,默认情况下会为当前的应用程序在每个Worker Process下面分配一个 CoarsegrainedexecutorBackend进程,该进程默认情况下会最大化的使用当前节点上的内存和CPU

注意:workerProcess不管理资源,集群资源是master管理的和调配的;我们说WorkerProcess管理当前节点的内存和CPU等计算资源,实质上通过Master来管理每台机器上的计算资源的!!!

workerProcess会接受Master的指令会为当前要运行的应用程序分配CoarsegrainedexecutorBackend进程

CoarsegrainedexecutorBackend和Executor是一一对应的

这里写图片描述
前面所有的Stage中Task的类型都是ShuffleMapTask类型

Stage里面的内容一定是在Executor中执行的!
而且Stage必须是从前往后执行

Spark的一个应用程序中可以因为不同的Action产生众多的Job,每个Job至少有一个Stage
Stage0是Stage1的mapper
Stage1是Stage2的mapper
Stage1是Stage0的reducer
Stage2是Stage1的Reducer

Spark是一个更加精致和高效的mapReduce思想的具体实现。

原创粉丝点击