运行时 Driver 能获得 Executor 的具体运行资源,这样 Driver 与 Executor 之间进行通信,通过网络的方式,Driver 把划分
好的 Task 传送给 Executor,Task 就是我们的 Spark 程序的业务逻辑代码。
Executor 接收任务,进行反序列化,得到数据的输入和输出,在分布式集群的相同数据分片上,数据的业务逻辑一样,只是
数据不一样罢了,然后由 Executor 的线程池负责执行。
编程的 Spark 程序,打包提交到 Driver 端,这样就构成了一个 Driver,
Driver 内部的调度流程,根据算子逻辑的依赖关系,DAGScheduler 来划分成不同的 Stage,每个 Stage 中的计算逻辑是一
样的,只是数据分片不一样。TaskScheduler 向 Executor 发送任务,Executor 反序列化数据之后,也就得到数据的输入和
输出,也就是任务的业务逻辑,Executor 运行的就是我们的业务逻辑代码。
我们整个 Spark 应用程序,可以分成:Driver 和 Executor 两部分。
Driver 由框架直接生成;
Executor 执行的才是我们的业务逻辑代码。
执行的时候,框架控制我们代码的执行。Executor 需要执行的结果汇报给框架也就是 Driver。
3、数据的管理
在 Spark 应用具体执行过程中,会涉及到数据的读取和存储。
在 Executor 中关于数据的管理正是 Spark 的精髓之一。
默认情况下,数据要写到磁盘上。
DAGScheduler 划分了多个 Stage,下一个 Stage 会向 Driver 请求上一个 Stage 的运行结果。这就是 Shu(e 的过程,依
赖于上一个 Stage 全部的结果。前面 Stage 的输出是后面 Stage 的输入。
3.1 图
评论0
最新资源