Spark-运行时架构
Spark运行时架构
在分布式环境下,Spark集群采用的时主/从结构。在一个Spark集群中,有一个节点负责中央协调,调度各个分布式工作节点。这个中央协调节点被称为驱动器(Driver),与之对应的工作节点被称为执行器节点(executor).驱动器节点可以和大量的执行器节点进行通信,它们也都作为独立的Java进程运行。驱动器节点和执行器节点一起被称为一个Spark应用(application)
Spark应用通过一个叫做集群管理器(Cluster Manager)的外部服务在集群中的机器上启动。Spark自带的集群管理器被称为独立集群管理器。Spark也能运行在Hadoop YARN和Apache Mesos这两大开源集群机器上。
驱动器节点
Spark驱动器是执行程序中的main()方法的进程。它执行用户编写的用来创建SparkContext、创建RDD,以及进行RDD的转化操作和行动操作的代码。其实,当你启动Spark shell时,你就启动了一个Spark驱动器程序(Spark shell总是会预先加载一个叫做sc的SparkContext对象)。驱动器程序一旦终止,Spark应用也就结束了。
驱动器程序在Spark应用中有两个职责
1.把用户程序转为任务
2.为执行器节点调度任务
把用户程序转为任务
Spark驱动器程序负责把用户程序转为多个物理执行的单元,这些单元也被称为任务(task)。从上层来看,所有的Spark程序都遵循同样的结构:程序从输入数据创建一系列RDD,再使用转化操作派生出新的RDD,最后使用行动操作手机或存储结果RDD中的数据。Spark程序其实是隐式的创建出了一个由操作组成的逻辑上的有向无环图(Directed Acyclic Graph,简称DAG)。当驱动器程序运行时,它会把这个逻辑图转为物理执行计划。
Spark会对逻辑执行计划作一些优化,比如将连续的映射转为流水线化执行,将多个操作合并到一个步骤中等。这样Spark就把逻辑计划转为一系列步骤(stage).而每个步骤又由多个任务组成。这些任务会被打包并送到集群中。任务是Spark中最小的工作单元,用户程序通常要启动成百上千的独立任务。
为执行器节点调度任务
有了物理计划后,Spark驱动器程序必须在各执行器进程间协调人物的调度。执行器进程启动后,会向驱动器进程注册自己,因此,驱动器进程始终对应用中所有的执行器节点有完整的记录。每个执行器节点代表一个能够处理任务和存储RDD数据的进程。
Spark驱动器程序会根据当前的执行器节点集合,尝试把所有任务基于数据所在位置分配给合适的执行器进程。当任务执行时,执行器进程会把缓存数据存储起来,而驱动器进程同样会跟踪这些缓存数据的位置,并且利用这些位置信息来调度以后的任务,以尽量减少数据的网络传输。
驱动器程序会将一些Spark应用的运行时的信息通过网页界面呈现出来,默认在端口4040上。
执行器节点
Spark执行器节点是一种工作进程,负责在Spark作业中运行任务,任务间相互独立。Spark应用启动时,执行器节点就被同时启动,并且始终伴随着整个Spark应用的生命周期而存在。如果有执行器节点发生了异常或崩溃,Spark应用也可以继续执行。执行器有两大作用:
第一,它们负责运行组成Spark应用的任务,并将结果返回给驱动器进程;
第二,他们通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在执行器进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
集群管理器
Spark依赖于集群管理器来启动执行器节点,而在某些特殊情况下,也依赖集群管理器来启动驱动器节点。集群管理器是Spark中的可插拔式组件。这样,除了Spark自带的独立集群管理器,Spark也可以运行在其他外部集群管理器上,比如YARN和Mesos
Spark-运行时架构的更多相关文章
- [翻译] WCF运行时架构
原文地址 http://www.cnblogs.com/idior/articles/971252.html 介绍 WCF具有非常易用的编程模型,服务开发者在掌握ABC的概念后可以很容易的使用WCF去 ...
- Fabric架构:抽象的逻辑架构与实际的运行时架构
Fabric从1.X开始,在扩展性及安全性上面有了大大的提升,且新增了诸多的新特性: 多通道:支持多通道,提高隔离安全性. 可拔插的组件:支持共识组件.权限管理组件等可拔插功能. 账本数据可被存储为多 ...
- Flink 运行时架构
参考链接:https://blog.csdn.net/dajiangtai007/article/details/88575553 1.Flink 运行时架构 Flink 运行时架构主要包含几个部分: ...
- spark运行时加载配置文件(hive,hdfs)
文章为转载,如有版权问题,请联系,谢谢! 转自:https://blog.csdn.net/piduzi/article/details/81636253 适合场景:在运行时才确定用哪个数据源 imp ...
- Spark运行时的内核架构以及架构思考
一: Spark内核架构 1,Drive是运行程序的时候有main方法,并且会创建SparkContext对象,是程序运行调度的中心,向Master注册程序,然后Master分配资源. 应用程序: A ...
- spark运行时出现Neither spark.yarn.jars nor spark.yarn.archive is set错误的解决办法(图文详解)
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- Spark学习笔记5:Spark集群架构
Spark的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展计算能力.Spark可以在各种各样的集群管理器(Hadoop YARN , Apache Mesos , 还有Spark自带的独立 ...
- ILBC 运行时 (ILBC Runtime) 架构
本文是 VMBC / D# 项目 的 系列文章, 有关 VMBC / D# , 见 <我发起并创立了一个 VMBC 的 子项目 D#>(以下简称 <D#>) https:// ...
- Spark on Yarn运行时加载的jar包
spark on yarn运行时会加载的jar包有如下: spark-submit中指定的--jars $SPARK_HOME/jars下的jar包 yarn提供的jar包 spark-submit通 ...
- Spark 运行架构核心总结
摘要: 1.基本术语 2.运行架构 2.1基本架构 2.2运行流程 2.3相关的UML类图 2.4调度模块: 2.4.1作业调度简介 2.4.2任务调度简介 3.运行模式 3.1 standalo ...
随机推荐
- TP数据查询
[数据查询] select()是数据模型的一个指定方法,可以获得数据表的数据信息 返回一个二维数组信息,当前数据表的全部数据信息 $obj = D(); 创建对象 $obj -> select ...
- PDP2
1. 程序入口 配置文件config.xml中: 2. index.html中显示,引入的cordova.js 就说明了 cordova apps 3. 看 main.ts
- 【BZOJ5047】空间传送装置 最短路
[BZOJ5047]空间传送装置 Description 太空中一共有n座星球,它们之间可以通过空间传送装置进行转移.空间传送装置分为m种,第i种装置可以用4个参数a_i,b_i,c_i,d_i来描述 ...
- Xamarin.Forms学习之位图(一)
在开始我的分享之前呢,让我先问下我的问题: 1.最近更新了Xamarin 4.1.1.3,我想问下版本更新信息在哪里看? 2.更新后我新建的项目没有UWP项目了(虽然没有用过,但是我想确认是4.1.1 ...
- 判断SQL数据库中函数、存储过程等是否存在的方法
下面为您介绍sql下用了判断各种资源是否存在的代码,需要的朋友可以参考下,希望对您学习sql的函数及数据库能够有所帮助.库是否存在if exists(select * from master..sys ...
- 六百字读懂 Git(转)
add by zhj:还是原文 六百字读懂 Git 看着更舒服一些,显示更好 原文:六百字读懂 Git 英文原文:Git in 600 words 译注:来自 Hacker School 的 Mary ...
- Python电影投票系统
电影投票:程序先给出几个目前正在上映的电影列表. 由用户给每个电影投票.最终将该用户投票信息公布出来 lst = ['北京遇上西雅图', '解救吴先生', '美国往事', '西西里的美丽传说']结果: ...
- 在cli命令行上显示当前数据库,以及查询表的行头信息
在$HIVE_HOME/conf/hive-site.xml文件下加入以下配置文件 <property> <name>hive.cli.print.header</nam ...
- (4.7)怎么捕获和记录SQL Server中发生的死锁?
转自:https://blog.csdn.net/c_enhui/article/details/19498327 怎么捕获和记录SQL Server中发生的死锁? 关键词:死锁记录,死锁捕获 sql ...
- boost之数学与数字
1.random随机数产生,需要种子,下面以时间为种子示例: #include <iostream> #include <string> #include <vector ...