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
浙公网安备 33010602011771号