热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

Spark运行时环境

Spark运行原理Spark运行原理构建应用程序运行时首先根据应用程序资源需求构建一个运行时环境,通过与资源管理器交互来完成,通常存在两种方式:粗粒度,应用程序在提交之后,正式运行

Spark运行原理

《Spark 运行时环境》 Spark运行原理

构建应用程序运行时

首先根据应用程序资源需求构建一个运行时环境,通过与资源管理器交互来完成,通常存在两种方式:
粗粒度,应用程序在提交之后,正式运行之前根据程序资源需求一次性获取资源,整个运行过程不再申请新的资源
细粒度,应用程序在提交之后,动态向集群申请资源,只要等资源满足一个任务的运行就开始执行,基于Hadoop的MR就是基于细粒度运行时构建

对于Spark on YARN,目前支持粗力度

应用程序转换成DAG

根据宽依赖和窄依赖拆分Stage,将应用程序转换成DAG

首先,从数据混洗的角度,窄依赖RDD可以通过相同键进行联合分区,整个操作可以在同一个节点上流水线式运行,不会造成网络间数据传输
其次,从失败恢复的角度,窄依赖的失败只需要重新计算丢失的RDD的父分区,并且可以在不同节点并行计算。宽依赖会设计多个父RDD分区的重新计算

首先将DAG划分成一个完整的Stage,从最后一个RDD往前回溯,不断判断RDD的依赖关系,如果是窄依赖则继续回溯,宽依赖则划分出一个新的Stage

调度执行DAG

DAGScheduler按照依赖关系调度执行每个Stage,优先选择不依赖任何阶段的Stage。执行Stage阶段启动一定数目的Task并行执行

Spark的优化机制(借鉴MapReduce)
数据本地性,对任务进行调度时,为算子选择节点,优先选择数据所在节点,其次选择数据所在机架节点,最后选择其他机架节点。
推测执行,检查到同类任务存在明显比较慢的任务时,尝试为慢任务启动备份任务,先完成的结果作为最终结果。
多线程执行具体的任务,减少多进程任务的启动开销
Executor上有一个BlockManager存储模块,当需要多轮迭代时,将中间过程的数据进行存储,后续需要时直接读取存储数据。


推荐阅读
author-avatar
吴款爷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有