Spark_3 Spark Core运行架构

Spark运行架构:

Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:

  1. 是利用多线程来执行具体的任务(Hadoop MapReduce采用的是进程模型),减少任务的启动开销;
  2. 是Executor中有一个BlockManager存储模块,会将内存和磁盘共同作为存储设备,当需要多轮迭代计算时,可以将中间结果存储到这个存储模块里,下次需要时,就可以直接读该存储模块里的数据,而不需要读写到HDFS等文件系统里,因而有效减少了IO开销;或者在交互式查询场景下,预先将表缓存到该存储系统上,从而可以提高读写IO性能。

各部分介绍

  1. Application = a driver program + executors on the cluster
    应用程序:他包含一个driver和多个executor

  2. Application jar = a jar containing the user’s Spark application.

  3. driver program = The process running the main() function of the application and create SparkContext()
    驱动是运行应用程序的main()并创建SparkContext的进程;如果驱动器程序终
    止,那么 Spark 应用也就结束了。主要负责:
    1)把用户程序转为任务
    2)跟踪 Executor 的运行状况
    3)为执行器节点调度任务
    4) UI 展示应用运行状况

  4. cluster manager is an external service for acquiring resources on the cluster
    集群管理器 通过cluster manager 去standalone/Mesos/Yarn/K8S/…上申请资源

  5. Deploy Mode 主要区别在于,Driver 程序的运行节点
    client:Diver run local Driver ;
    程序运行在客户端, 适用于交互、调试,希望立即看到 app 的输出
    cluster:Driver run Cluster;
    Driver 程序运行在由ResourceManager启动的APPMaster,适用于生产环境

  6. Executor 相当于 container 容器
    A process launched for an application on a worker node,
    that runs tasks and keeps data in memory or disk storage across them.
    Each application has its own executors.
    一个 Executor 可以运行一个Application的多个task;
    Spark Executor 是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。
    Spark 应用启动时, Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周期而存在。如果有 Executor 节点发生了故障或崩溃, Spark 应用也可以继续执行,会将出错节点上的任务调度到其他 Executor 节点上继续运行。主要负责:
    1)负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
    2)通过自身的块管理器( Block Manager)为用户程序中要求缓存的 RDD 提供内存式存储。 RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

  7. Task
    A unit of work that will be sent to one executor
    1. Task 是最小的工作单元,跑在 Executor 上;
    2. 一个partition 就是一个 Task

  8. job
    1. 在Spark上,只要运行一个action 就是一个job
    2. job是一个并行的计算,包含多个task

  9. Stage
    1. shuffle会产生stage
    2. job stages tasks task是最小的运行单元
    3. stage相关是有依赖关系的,如果有依赖关系,stage执行是有先后顺序
    4. stage名字是以最后一个算子命名的

Spark 运行注意点

  1. Each application gets its own executor processes,
    it means that data cannot be shared across different Spark applications
  2. Spark is agnostic to the underlying cluster manager.
    Spark是不关注底层是运行在哪里的,只要获取了对应的excutor processes,
    他们之间就可以通信。这种模式使得一个Cluster Manager 可以对应多个Application
  3. The driver program must listen for and accept incoming connections from its executors
    Driver Program 必须和 Executor 网络是通的。一般是将他们放在一个内网里
  4. driver should be run close to the worker nodes
    Driver要尽可能地靠近workernodes
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章