Spark之一:Spark任务运行的基本流程

Spark任务运行的基本流程

Spark之一:Spark任务运行的基本流程_第1张图片

  1. 客户端spark-submit指定任务提交给Master,Driver就会向Master注册Application(附带相关需要的资源)客户端提交任务spark-submit --master spark://主机名:7077 --class xxxx.WC xx.jar input output (没有指定资源使用的是默认资源[core.memory]);spark-submit执行脚本在client模式下,脚本通过反射调用WordCount程序的业务逻辑 。
  2. Master接收到Application之后,开始为Application分配资源(分配资源策略:打算分配, 尽可能把任务分配到多个节点上)
  3. 遍历当前的Worker(Worker也会向Master注册时会附带上资源)列表,找出空闲的Worker,并分配任务
  4. 分配完任务之后,Master向Worker发送指令,启动executor;每个Worker接收到指令,就会按照Master指定的资源启动executor,Worker资源粗粒度的资源分配(先将资源占用)
  5. executor会向driver去注册:executor通知driver资源已经准备就绪,随时可以分配任务
    Driver大致工作(没有读数据、切分、压平)
    代码先解析后执行
    解析业务逻辑代码,当出发action的时候,才真正的开始执行任务

    切分Stage
    创建task
    提交task
    (task是spark中任务运行的最小单位)
    把task从drvier端发送到executor中去,当Task在executor中开始执行的时候,才是真正开始执行我们的业务逻辑的时候。
    Task在driver端需要序列化
    Task在executor端需要反序列化

Drvier 不管运行在哪,功能是一样都都是解析逻辑代码
客户端 客户端不能挂掉(客户端需要一直和集群保持通信)
集群 客户端仅仅时提交任务,提交成功之后可以退出。

你可能感兴趣的:(spark,spark作业流程,spark提交任务,spark工作原理)