spark机制note
来源:互联网 发布:亚马逊 阿里云 offer 编辑:程序博客网 时间:2024/05/23 23:00
抄录自:data progressing with spark
spark主要模块
- 调度与任务分配
spark按照应用,作业,stage,task几个层次分别进行调度,采用了经典的FIFO和FAIR等调度算法. - IO
在IO中将数据以块为单位进行管理, 需要处理的块可以 本机内存, 磁盘或者集群的其他机器中. - 通信控制
通信对于命令和状态的传递极为重要, 通过AKKA进行通信. - 容错
听过lineage checkpoint 进行容错性保证. - shuffle模块
shuffle机制进行了创新和优化.
执行机制
Rdd的action算子会触发job提交, 提交到spark的job生成rdd DAG, 有DAGscheduler转化为stageDAG, 每个stage中产生相应的task集合, taskscheduler将任务分发到executor执行. 每个人物对应相应的一个数据块, 使用用户的函数处理数据块.使用用户定义的函数处理数据块.
rdd
弹性分布式数据集, RDD作为数据结构,本质上是一个只读的分区记录集合。一个RDD可以包含多个分区,每个分区就是一个dataset片段。RDD可以相互依赖。如果RDD的每个分区最多只能被一个Child RDD的一个分区使用,则称之为narrow dependency;若多个Child RDD分区都可以依赖,则称之为wide dependency。不同的操作依据其特性,可能会产生不同的依赖。例如map操作会产生narrow dependency,而join操作则产生wide dependency。
spark应用
application是用户提交的应用程序, 执行模式有local, standalone, yarn, mesos.
组件
- application
- driverporgram
- rddgraph
- job
- stage
- task
应用提交方式
Driver进程是应用的主控进程, 负责应用的解析,切分stage并调度task到executor执行, 包含DAGScheduler等重要对象.
两种方式:
1. Driver进程运行在客户端, 对应用进行监控
./bin/run-exampleorg.apache.spark.examples.SparkTC spark://UserHostIP:port
- 用户启动客户端, 之后客户端运行用户程序, 启动Driver进程. 在Driver中启动或实例化DAGscheduler等组件.客户端的Driver想Master注册.
- worker想master注册, master命令worker启动executor. worker通过创建executor-runner线程, 在此线程内部启动executorbackend进程.
- executorbackend进程启动后, 向客户端Driver进程内的schedulerbackend注册,这样driver进程就能就能找到计算资源.driver的DAGscheduler解析应用中的RDDDAG并生成相应的stage,每个stage包含的taskset通过taskscheduler分配给executor,在executor内部启动线程池并行化执行task.
2. 主节点制定某个Worker节点启动Driver,负责整个应用的监控
如果Driver在Worker启动执行需要通过org.apache.spark.deploy.Client类执行应用,命令如下。
./bin/spark-class org.apache.spark.deploy.Client launch spark://UserHostIP:portfile://your_jar org.apache.spark.examples.SparkTC spark://UserHostIP:port
spark调度与任务分配模块
调度配置
spark有多种运行模式: local standalone yarn mesos.
standalone
spark.cores.max决定一个应用可以在整个集群申请的CPU core数。 注意,这个参数不是控制单节点可用多少核
yarn
当Spark运行在YARN平台上时,用户可以在YARN的客户端通过配置--num-executors选项控制为这个应用分配多少个Executor,然后通过配置--executor-memory及--executorcores来控制应用被分到的每个Executor的内存大小和Executor所占用的CPU核数。 这样便可以限制用户提交的应用不会过多的占用资源,让不同用户能够共享整个集群资源,提升YARN吞吐量。
Spark应用程序内Job的调度
户可以通过配置
spark.scheduler.mode方式来让应用以FAIR模式调度
Stage和TaskSetManager调度方式
1.Stage的生成
Stage的调度是由DAGScheduler完成的。 由RDD的有向无环图DAG切分出了Stage的有向无环图DAG。 Stage的DAG通过最后执行的Stage为根进行广度优先遍历,遍历到最开始执行的Stage执行,如果提交的Stage仍有未完成的父母Stage,则Stage需要等待其父Stage执行完才能执行。 同时DAGScheduler中还维持了几个重要的Key-Value集合结构,用来记录Stage的状态,这样能够避免过早执行和重复提交Stage。 waitingStages中记录仍有未执行
的父母Stage,防止过早执行。 runningStages中保存正在执行的Stage,防止重复执行。failedStages中保存执行失败的Stage,需要重新执行,这里的设计是出于容错的考虑。
2.TaskSetManager的调度
结合上面介绍的Job的调度和Stage的调度方式,可以知道,每个Stage对应的一个TaskSetManager通过Stage回溯到最源头缺失的Stage提交到调度池pool中,
在调度池中,这些TaskSetMananger又会根据Job ID排序,先提交的Job的TaskSetManager优先调度,然后一个Job内的TaskSetManager ID小的先调度,并且如果有未执行完的父母Stage的TaskSetManager,则是不会提交到调度池中。
Task调度
- 在DAGScheduler中提交任务时,分配任务执行节点。
- 1)如果是调用过cache()方法的RDD,数据已经缓存在内存,则读取内存缓存中分区
的数据。
2)如果直接能获取到执行地点,则返回执行地点作为任务的执行地点,通常DAG中最源头的RDD或者每个Stage中最开始的RDD会有执行地点的信息。 例如,HadoopRDD从HDFS读出的分区就是最好的执行地点。 这里涉及Hadoop分区的数据本地性问题,感兴趣的读者可以查阅Hadoop的资料了解。
3)如果不是上面两种情况,将遍历RDD获取第一个窄依赖的父亲RDD对应分区的执行地点。
- spark机制note
- spark note
- 【Spark】Spark容错机制
- 【Spark】Spark应用执行机制
- 【Spark】Spark的Shuffle机制
- 【Spark】Spark应用执行机制
- Spark -12:spark checkpoint机制
- Spark的Shuffle机制
- Spark之IO机制
- Spark容错机制
- Spark容错机制
- Spark容错机制
- Spark应用执行机制
- Spark容错机制
- Spark的Shuffle机制
- Spark Shuffle机制
- Spark工作机制
- Spark容错机制
- POJ 1236 Network of Schools(强联通分量)
- VK Cup 2015 - Finals, online mirror D. Restructuring Company 并查集 stl应用
- UI设计:如何设计移动应用的导航
- Highways(POJ_2485)
- 校园二手交易系统应用带服务端
- spark机制note
- linux初学(十七)之linux管道及重定向
- JDBC连接与增删查改的封装
- HDU 1232 畅通工程 __ 基础并查集
- C#自定义log机制
- 使用jatoolsPrinter实现套打
- C程序片段并发性测试以及前趋图的自动生成
- nyoj55懒省事的小明
- 240多个jQuery插件