理论教育 深入了解Spark的运行流程

深入了解Spark的运行流程

时间:2023-06-14 理论教育 版权反馈
【摘要】:Spark 工作流程主要有以下几步:1.通过spark-submit 提交Spark 应用。Driver进程首先要启动SparkContext,向集群管理器注册并申请运行Spark 作业需要使用的资源。申请到了作业执行所需的资源之后,SparkContext就会开始调度和执行应用。Executor 向SparkContext 申请Task,Task Scheduler 将Task 发放给Executor 运行同时SparkContext 将应用程序代码发放给Executor。Spark 是根据shuffle 类算子来进行Stage 的划分。

深入了解Spark的运行流程

Spark 的运行模式多种多样,灵活多变,部署在单机上时,既可以用本地模式运行Local(一般用于本地调试),也可以用伪分布模式运行Standalone,而当以分布式集群的方式部署时可以采用Mesoses 和Yarn。

Spark 工作流程主要有以下几步:

1.通过spark-submit 提交Spark 应用。

2.为该应用启动对应的Driver 进程,调用用户定义的main()方法。根据运行模式的不同,Driver 进程可能在本地启动,也可能在集群中某个工作节点上启动。Driver进程首先要启动SparkContext,向集群管理器(可以是Standalone、Mesos 或YARN)注册并申请运行Spark 作业需要使用的资源(Executor 进程)。

3. 集群管理器根据应用设置的资源参数在各个工作节点上启动一定数量的Executor 进程,为每个Executor 进程都分配一定数量的内存和CPU core,Executor 通过心跳包向资源管理器汇报运行情况。(www.daowen.com)

4. Executor 执行应用中的操作。申请到了作业执行所需的资源之后,SparkContext就会开始调度和执行应用。SparkContext 会根据应用中所定义的对RDD 的转化操作和行动操作构建成DAG 图,将DAG 图分解成Stage,每个Stage 执行一部分计算逻辑,并为每个Stage 创建一批Task,然后将这些Task 发送给Task Scheduler。Executor 向SparkContext 申请Task,Task Scheduler 将Task 发放给Executor 运行同时SparkContext 将应用程序代码发放给Executor。

Spark 是根据shuffle 类算子来进行Stage 的划分。如果应用的代码中执行了某个shuffle 类算子(比如reduceByKey、join 等),那么就会在该算子处划分出一个Stage界限来。可以大致理解为,shuffle 算子执行之前的代码会被划分为一个Stage,shuffle算子执行以及之后的代码会被划分为下一个Stage。因此一个Stage 刚开始执行的时候,它的每个Task 可能都会从上一个Stage 的Task 所在的节点,去通过网络传输拉取需要自己处理的所有key,然后对拉取到的所有相同的key 使用应用编写的算子函数执行聚合操作(比如reduceByKey())。

6.任务在执行器程序中进行计算并保存结果。一个Stage 的所有Task 都执行完毕之后,会在各个节点本地的磁盘文件中写入计算中间结果,然后Driver 就会调度运行下一个stage。下一个Stage 的Task 的输入数据就是上一个Stage 输出的中间结果,如此循环往复,直到将所有Stage 执行完毕。

7.如果驱动器程序的main()方法退出,或者调用了SparkContext.stop(),驱动器程序会终止执行器进程,并且通过集群管理器释放资源。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈