美文网首页
spark入门之集群角色

spark入门之集群角色

作者: 万事万物 | 来源:发表于2021-07-08 07:59 被阅读0次

    Master和Worker集群资源管理

    Master和Worker

    Master和Worker是Spark的守护进程、集群资源管理者,即Spark在特定模式下正常运行所必须的进程。


    • Master 类似于Yarn中的ReourceManager

    • Worker 类似于Yarn中的NodeManager

    Master和Worker 只有 Standalone模式中采用,所以Master和Worker是运行在集群模式中的。

    Master 和 Worker 启动时机
    随着集群的启动而启动,随着集群的停止而消失。

    Driver和Executor任务的管理者

    Driver和Executor

    Driver和Executor是临时程序,当有具体任务提交到Spark集群才会开启的程序。

    Driver 作用:

    • 负责任务调用,类似于 ApplicationMaster。
    • 负责将用户写的程序转换为一个job。
      如执行一个worldCount程序。
    scala>sc.textFile("/opt/module/spark-local/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
    
    res0: Array[(String, Int)] = Array((hadoop,6), (oozie,3), (spark,3), (hive,3), (atguigu,3), (hbase,6))
    
    • 跟踪所有的Executo任务状态;
      是否闲置,是否接收到任务,是否完成,完成进度如何等。如果执行失败,会在其他服务器上重写执行一次(容错处理)。
    • 负责所有执行节点的调度任务;
    • 在job执行过程中,可以打开一个web界面,这就是UI展示。
    • Driver 是一个线程。

    Executor作用:

    • 负责执行spark具体的job任务。
    • Executor 是一个进程,他们把一个个任务交给 task(线程) 去执行。
    • Executor 中会有一些资源 如 内核数、内存等,task 会共享这些资源。

    生命周期:

    • Driver类似于一个 ApplicationMaster;当有任务执行时会生成一个Driver,任务接收后,会申请注销自己。
    • Executor 同样如此,随着单个任务完成之后,而消失。

    作用:
    Master和Worker:只有Standalone模式中才有。
    Driver和Executor:Standalone模式YARN模式 都有。

    Standalone模式

    Standalone模式是Spark自带的资源调动引擎,构建一个由Master + Slave构成的Spark集群,Spark运行在集群中。

    这个要和Hadoop中的Standalone区别开来。这里的Standalone是指只用Spark来搭建一个集群,不需要借助Hadoop的Yarn和Mesos等其他框架。

    运行流程

    Spark有standalone-clientstandalone-cluster两种模式,主要区别在于:Driver程序的运行节点

    该模式是由 --deploy-mode 所指定。

    --deploy-mode client \
    

    or

    --deploy-mode cluster \
    

    若指定,默认为client模式。

    standalone client与cluster模式的区别: Driver所在的位置不一样

    • Client模式: Driver在client端【spark-submit所在】,Driver就在SparkSubmit进程中,client模式不能关闭client,client关闭Driver会消失,不能进行任务分配从而导致任务失败

    • cluster模式: Driver可能在任意一个Worker中,可以关闭client,因为Driver与client不在一块,client关闭不影响Driver


    standalone-cluster模式:

    standalone cluster模式.png

    1.提交程序

    scala>sc.textFile("/opt/module/spark-local/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
    
    1. 创建SparkSubmit进程
      在提交程序的服务器上创建一个SparkSubmit进程,在SparkSubmit进程中也会有一个客户端Client,此时在客户端中并不会启动Driver
    2. 请求启动Driver
      ClientMaster 提交请求,找一个Worker启动Driver
    3. 启动Driver
      Master 根据任务的资源配置找到一个Worker启动Driver
    4. 申请计算资源
      Driver计算任务时需要资源(如:需要多少个executor,每个executor需要多少内存),此时会向 Master申请资源。
    5. 筛选资源充足的Worker
      Master 并没有资源,但是它知道哪些Worker能满足Driver的条件。
    6. 启动对应的Executor
      在资源充足的Worker中启动ExecutorExecutor启动好之后表示资源已经准备好了。
    7. 反向注册,申请计算任务。
      于是Executor会向Driver发送反向请求, 告诉它,我准备好了,你把任务给我吧。
    8. 提交TaskExecutor中执行。
      Driver会将Task提交到Executor中进行执行。
    9. 注销、释放资源
      等待所有的Task执行完毕后,整个任务就执行完毕了,DriverMaster 提交申请注销自己。

    standalone-client模式:

    standalone client模式
    1. 程序运行时会创建一个SparkContext进程
    2. 该进程中会维护一个Client端,Driver便会在Client端中被创建。
    3. Client回向Master注册任务,申请资源.
    4. Master接收到请求之后,会根据spark-submit提交的资源参数筛选出合适的Worker
    5. 此时Worker会运行一个Executor
    6. Executor准备好之后,反向注册到Driver,申请任务。
    7. 此时Driver便会把Job交给Executor进行运行。
    8. Driver等待所有的task运行完毕之后,此时便开始注销自己,释放资源。

    yarn-client模式

    spark on yarn client模式
    1. 程序运行时会创建一个SparkContext进程
    2. 该进程中会维护一个Client端,Driver便会在Client端中被创建。
    3. DriverResuoreManager注册任务,申请运行ApplicationMaster
    4. ResuoreManager收到请求之后,会找到一个NodeManager启动一个ApplicationMaster
    5. ApplicationMasterResuoreManager申请资源。
    6. ResuoreManager将会筛选出合适的NodeManager列表给ApplicationMaster
    7. ApplicationMaster会根据列表找到对应NodeManager,运行Executor,同时监听Executor的运行状态
    8. Executor会反向注册到Driver中,申请运行任务。
    9. Driver会将Job交给Executor进行运行。
    10. 等待所有的Task运行完毕之后,ApplicationMasterResuoreManager提交申请注销自己,释放资源。

    yarn-cluster模式

    spark on yarn cluster模式

    yarn-client模式 与 yarn-cluster模式 唯一的区别在于Dirver的运行位置不同。
    在yarn-cluster模式中,Dirver将会运行在ApplicationMaster运行的服务器上。

    1. 程序启动时会创建一个SparkContext进程,该进程同样维护一个Client端。
    2. ClientResuortManager注册任务,神奇运行ApplicationMaster
    3. ResuortManager会找到一台NodeManager运行ApplicationMaster
    4. ApplicationMaster会启动一个Driver进程。
    5. 创建完成之后ApplicationMasterResuortManager申请资源。
    6. ResuortManager筛选合适的NodeManager列表给ApplicationMaster
    7. ApplicationMaster根据列表找到对应的NodeManager运行Executor进程
    8. Executor反向注册到Driver中,申请任务
    9. DriverJob交给Executor运行
    10. 等到Driver中所有的Task任务运行完毕之后,ApplicationMasterResuortManager申请注销自己,释放资源。

    相关文章

      网友评论

          本文标题:spark入门之集群角色

          本文链接:https://www.haomeiwen.com/subject/sofqultx.html