Spark 源码系列 - SparkContext启动 - 运行模式

结论

SparkContext启动,根据setMaster设置的Url匹配运行模式。

SparkContext

// 根据设置的master字符串的内容进行匹配
master match {
      // local模式
      case "local" => ...
      ...
      // local[n] 和 local[*] 模式 n为thread数量
      case LOCAL_N_REGEX(threads)
      ...
      // local[N, maxRetries]
      case LOCAL_N_FAILURES_REGEX(threads, maxFailures)
      ...
      // spark:// Spark standalone 集群模式
      case SPARK_REGEX(sparkUrl)
      ...
      // Yarn Mesos K8s 集群模式
      case masterUrl =>
        ...
        try {
          // YarnClusterScheduler
          val scheduler = cm.createTaskScheduler(sc, masterUrl)
          // YarnClusterSchedulerBackend
          val backend = cm.createSchedulerBackend(sc, masterUrl, scheduler)

第三方集群模式

https://spark.apache.org/docs/latest/cluster-overview.html#cluster-manager-types

集群方案 master
Yarn --master yarn
k8s --master k8s://https://<k8s-apiserver-host>:<k8s-apiserver-port>
Mesos --master mesos://host:5050

SparkContext 中的 三大对象

  • DAGScheduler:为每个job计算一个Stage的DAG(有向无环图)。追踪RDD和Stage的输出是否物化(写磁盘或内存),并且执行一个最优的调度机制来执行。将stage作为tasksets提交到底层的TaskScheduler并在集群上运行。
  • TaskScheduler:根据ClusterManager的不同有不同的实现(standalone、Yarn、k8s、Mesos),接收DAGScheduler发过来的任务集,并以任务的形式分发到集群worker节点的Executor中去运行,任务失败TaskScheduler负责重试。如果TaskScheduler发现某个任务一直没运行完,可能会启动同样的任务去运行一个任务,结果选取早运行完的那个任务的(预测执行)。 cm.createTaskScheduler
  • SchedulerBackend:根据ClusterManager的不同会有不同的实现(standalone、Yarn、k8s、Mesos),实际负责Master的注册和Tasks发送到Executor等操作。 createSchedulerBackend

参考

https://zhuanlan.zhihu.com/p/69889714

posted @ 2022-05-03 18:20  608088  阅读(82)  评论(0)    收藏  举报