Spark提交作业运行过程
来源:互联网 发布:celery python廖雪 编辑:程序博客网 时间:2024/05/17 01:14
背景
最近在学习Spark源码方面的知识,在这里大概了解了Spark整体的运行过程,从初始化到最终的底层运行。今天在这里进行详细的记录一下。一边以后的回顾和学习。
Spark程序运行整体流程
当SparkContext初始化完之后,我们通常会使用它来读取外部的数据,使之形成RDD。然后我们会经过一些列的RDD操作之后,到最后一个Action操作。从而触发了Job的提交。在Spark中RDD操作分为两种:转换和Action操作。因为RDD是lazy模式操作。只有Action会触发Job的提交。在RDD的Action操作API的底层,其实是调用SparkContext的runJob方法,来进行Job的提交。如果你好奇的话,可以去看看源码。然后SparkContext的runJob方法中,调用的是DAGScheduler中的runJob方法。DAGSchduler中runJob方法内部调用它的内部方法submitJob方法。该方法会发送一个JobSubmit消息到内部的Actor中。内部Actor在接受到JobSubmit消息后,就会创建一个finalStage类。然后调用submitStage方法。该方法会首先进行stage的划分,在划分stage的时候,会为每个stage创建一个id号,值越大的stage,会先进行执行。。然后当一个stage没有父stage的时候,开始执行。执行完了之后,开始执行子stage。以此循环向下执行。
1. SparkConf
我们在写Spark程序的时候,一般会先定义一个SparkConf,该类是Spark的配置类,里面会配置Spark程序执行运行时的参数,它其实内部就是一个ConcurrentHashMap.通过键值对的方式,来保存相应的参数。它必须设置程序运行的名称。如果你没有进行配置AppName的话,会提示出相应的异常信息。
2.SparkContext
SparkContext相当于整个Spark 程序最重要的类了。它就相当于Spark程序的引擎和入口。在它进行初始化的时候,其内部会初始化其他的一些类。比如创建启动DAGScheduler和TaskScheduler,SchdulerBackend等等。
3.DAGScheduler
该类最重要的功能就是划分stage,每个stage对应一个任务集,由TaskScheduler来进行任务集的提交。
4.TaskScheduer
当TaskScheduler进行任务集的提交的时候,会为每个TaskSet创建一个TaskSetManager。TaskSetManager负责任务集的执行。TaskScheduler会向SchedulerBackend申请资源,然后给TaskSetManager使用。
5.BlockManager
存储模块管理。在Driver段和每个Executor上都会有一个BlockManager,Dirver上的BlockManager主要负责所有Executor上的BlockManagerInfo统一管理。每个Executor上的BlockManager只会负责对应节点上的数据元信息。通过与Driver段的BlockManagerMasterActor通信,可以获取别的节点的数据元信息。
- Spark提交作业运行过程
- localhost方式提交作业到spark运行
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- Spark源码系列(一)spark-submit提交作业过程
- 提交第一个spark作业到集群运行
- Spark on Yarn客户端作业提交过程分析
- Spark源码系列(三)作业运行过程
- Spark源码系列(三)作业运行过程
- Spark源码系列(三)作业运行过程
- Hue中spark 实现提交运行源码过程
- Spark提交作业的流程以及作业是如何被触发在集群中运行的
- Spark作业运行原理
- spark wordcount 提交运行
- MapReduce作业提交过程
- spark job提交过程
- [uoj228]基础数据结构练习题 解题报告
- qt之QSqlQuery
- 作用域和作用域链
- 持续集成环境搭建
- 【20.95%】【UESTC 94】Bracket Squence
- Spark提交作业运行过程
- JSP运行原理和九大隐式对象
- Ext JS 与jQuery和Bootstrap 的区别
- bootstrap-datetimepicker的使用方法和兼容问题
- python padas 处理日期数据
- Python 判断字符是否在字符串中 分割
- Spring事务配置的五种方式
- JAVA学习笔记之(写入xml)
- Java排序算法之二分法插入排序