Spark——Spark执行流程
Posted Java学习基地Java毕设定制
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spark——Spark执行流程相关的知识,希望对你有一定的参考价值。
Spark的基本运行流程
一、说明
Spark 应用程序启动在自己的 JVM 进程中,即 Driver 进程。启动后 SparkContext 初始化执行配置和输入数据。SparkContext 启动 DAGScheduler 构造执行的 DAG 图,切分成最小的执行单位:task;
Worker 收到任务后,启动 Executor 进程开始执行任务。Executor 先检查自己是否有 Driver 的执行代码,如果没有,从 Driver 下载执行代码,通过 Java 反射加载后开始执行。
二、图解
三、Spark运行架构特点
每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行tasks。这种Application隔离机制有其优势的,无论是从调度角度看(每个Driver调度它自己的任务),还是从运行角度看(来自不同Application的Task运行在不同的JVM中)。当然,这也意味着Spark Application不能跨应用程序共享数据,除非将数据写入到外部存储系统。
Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了。
提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换;如果想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。
Task采用了数据本地性和推测执行的优化机制。
四:Driver 的两种方式
client向ResouceManager申请启动ApplicationMaster,同时在SparkContext初始化中创建DAGScheduler和TaskScheduler
ResouceManager收到请求后,在一台NodeManager中启动第一个Container运行ApplicationMaster
Dirver中的SparkContext初始化完成后与ApplicationMaster建立通讯,ApplicationMaster向ResourceManager申请Application的资源
一旦ApplicationMaster申请到资源,便与之对应的NodeManager通讯,启动Executor,并把Executor信息反向注册给Dirver
Dirver分发task,并监控Executor的运行状态,负责重试失败的task
运行完成后,Client的SparkContext向ResourceManager申请注销并关闭自己
(2)cluster
yarn-cluster模式中,当用户向yarn提交应用程序后,yarn将分为两阶段运行该应用程序:
第一个阶段是把Spark的Dirver作为一个ApplicationMaster在yarn中启动;
第二个阶段是ApplicationMaster向ResourceManager申请资源,并启动Executor来运行task,同时监控task整个运行流程并重试失败的task;
Yarn-client和Yarn-cluster的区别:
yarn-cluster模式下,Dirver运行在ApplicationMaster中,负责申请资源并监控task运行状态和重试失败的task,当用户提交了作业之后就可以关掉client,作业会继续在yarn中运行;
yarn-client模式下,Dirver运行在本地客户端,client不能离开。
以上是关于Spark——Spark执行流程的主要内容,如果未能解决你的问题,请参考以下文章