Spark 运行架构和解析《二》

来源:互联网 发布:网络刷信誉兼职可信吗 编辑:程序博客网 时间:2024/06/06 10:56

1.实例解析

val lines = ssc.textFile(args( 1 )) // 输入

val w ords = lines.flatMap(x =>x.split( " " ))

w ords.cache() // 缓存

val w ordCounts = w ords.map(x => (x, 1) )

val red = w ordCounts.reduce B yKey( (a,b)=>{ a + b } , 8)

red.saveAsTextFile( “/root/Desktop/out ”, 8 ) 

这是一个简单的Spark例子,其运行流程如下图:



2.Spark 在不同集群中的运行架构

(1)standalone


SparkContext连接到Master,向Master注册并申请资源(CPU Core 和Memory)
Master根据SparkContext的资源申请要求和worker心跳周期内报告的信息决定在哪个worker上分配资源,然后在该worker上获取资源,然后启动StandaloneExecutorBackend。
StandaloneExecutorBackend向SparkContext注册
SparkContext将Applicaiton代码发送给StandaloneExecutorBackend;并且SparkContext解析Applicaiton代码,构建DAG图,并提交给DAG Scheduler分解成Stage(当碰到Action操作时,就会催生Job;每个Job中含有1个或多个Stage,Stage一般在获取外部数据和shu f f le之前产生),然后以Stage(或者称为TaskSet)提交给Task Scheduler,Task Scheduler负责将Task分配到相应的worker,最后提交给StandaloneExecutorBackend执行;
StandaloneExecutorBackend会建立executor 线程池,开始执行Task,并向SparkContext报告,直至Task完成。
所有Task完成后,SparkContext向Master注销,释放资源。


2YARN

Spark on YARN有两种运行的模式:cluster mode,client mode

client mode:



cluster mode:


用户通过bin/spark-submit( Spark1.0.0 应用程序部署工具spark-submit)或 bin/spark-class 向YARN提交Application
RM为Application分配第一个container,并在指定节点的container上启动SparkContext。
SparkContext向RM申请资源以运行Executor
RM分配Container给SparkContext,SparkContext和相关的NM通讯,在获得的Container上启动StandaloneExecutorBackend,StandaloneExecutorBackend启动后,开始向SparkContext注册并申请Task
SparkContext分配Task给StandaloneExecutorBackend执行
StandaloneExecutorBackend执行Task并向SparkContext汇报运行状况
Task运行完毕,SparkContext归还资源给NM,并注销退出。


0 0
原创粉丝点击