Big Data Application

Spark快速入门(6) 高级话题:调度和执行

2019-04-02  本文已影响0人  MeazZa

从本节开始,我们将从理论转向实践,介绍在Spark运行程序时内部做了哪些事情。这一节将重点关注在cluster模式下,Spark的调度和执行相关的内容。

SparkContext

当我们创建一个Spark应用时,最先要创建的是SparkContext对象。SparkContext对象告诉Spark如何连接到集群上。在Spark shell中,SparkContext会提前为我们创建好。SparkContext存在driver的程序中,并协调集群上所有运行程序的线程的集合。

SparkContext通过和cluster manager的通信进行executors的分配。这里cluster manager是指一个能够给获取集群资源使用情况的外部服务,比如YARN,Mesos等。

当任务在executors上执行时,SparkContext会直接与之通信,直到任务执行完成。

SparkContext的作用

Jobs, Stages, Tasks

这里介绍Spark中三个非常重要的术语:job,stage和task。

例如以下的代码和对应的计算关系图,整体为一个job,job有两个stage,每个stage有多个tasks,每个tasks计算一个分区的数据。

Z = X.map(lambda x: (x % 10, x / 10)
     .reduceByKey(lambda x, y: x + y)
     .collect()
Job Stages Tasks

所有这些机制都存在于SparkContext对象中,它负责生成作业,运行调度程序,和跟踪执行程序等。

stage和task的区别

在重点强调一下stage和task这两个概念的区别:

其他功能

再来看一下SparkContext还完成了哪些其他功能:

小结

  1. SparkContext是Spark应用的核心,它允许应用连接到Spark集群,并分配资源和executors等。
  2. 当调用action算子时,SparkContext产生一个job,并通过job scheduler生成该job的stages。多个连续的窄依赖可以划分在同一个stage中。每个stage生成多个tasks,task分配到executors上执行。
  3. Driver会和executors通信,获取任务信息和executors存活状态。
上一篇下一篇

猜你喜欢

热点阅读