浅谈Spark(1) - Overview
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。 举个例子,当有一个应用,需要在很大的图(graph)上进行Machine Learning的算法时,Spark会把整个图的数据存储在它的弹性分布式数据集(Resilient Distributed Dataset,RDD),如下图。Spark Client会存储需要运行的程序的各种数据, 并且把它map到对于集群(Cluster)的Spark-specific的指令上,而这个集群包括了许多的Workers。之后,Cluster Manager会把这些指令转变为任务,并在各个worker节点(node)上执行。每个集群需要让应用程序调度使其达到最大的利用率和性能的提升。

图 1
对于Spark来说,它最为重要的一部分就是它的弹性分布式数据集(RDD)。RDD是一个在大数据集上支持在内存间低容错运算的分布式存储抽象。程序员通过把能够在workers上复制并运行的闭包(函数)传递给workers,在RDD上调用各种指令。这部分会在博主之后的文章里作详细介绍。
程序员通过编写驱动(driver)程序来连接workers的集群,driver定义了一个或多个RDD,并且在RDD上调用各种actions。与此同时,driver会追踪每个RDD的“血统”(lineage),该“血统”以有向无环图(Directed Acyclic Graph,DAG)的形式,记录了整个RDD形成的过程。而之所以能够追踪到每一个RDD的“血统”,是因为workers的进程在整个应用程序运行的过程中一直保持存在,并且通过指令能够在RAM内存里存储所有的RDD分区(partition)。
图2是Spark的结构体系,SparkContext对象能够连接到不同类型的Cluster Manager,Cluster Manager负责对所有的应用和任务进行调配。Cluster Manager能够让各个Spark程序相互隔离,每个程序拥有自己的driver,并且运行在由Cluster Manager调配的相互隔离的executor上。目前,Spark能够支持由Java, Scala或Python所编写的应用程序。

图 2
对于每一个在Spark上运行的程序,可以把它们看成是在相互隔离的集群上独立运行的进程集。Driver作为其中一个进程在应用程序中运行main()函数并且建造SparkContext。SparkContext协调Spark上的各个应用程序并且反过来连接负责在集群(cluster)上给所有应用程序分配资源的Cluster Manager。与此同时,SparkContext还包含了一些隐式转换(implicit conversions)和用于不同Spark特性的参数。
目前整个Spark系统支持三种Cluster Manager:
- Standalone
- Apache Mesos
- Hadoop YARN
一旦SparkContext连接上Cluster Manager,Spark便会在Worker Node上获取Executor, 并通过Executor进行计算和数据的存储。接着,Java/Scala/Python代码会被发送到Executor上运行并成为各种各样的tasks。因为每一个应用程序都拥有各自的Executor进程,这些进程能够在各个线程上执行各种tasks,所以Executor在应用程序的整个生命周期里都一直保持存在。
Spark采取上述方式的好处在于,应用程序之间能做到相互隔离,每个应用程序的driver在调度的决策上能够保持独立,不受其他应用程序的影响。不同应用程序里Executor的相互隔离,就像是每一个程序都运行在一个分离的JVM上。当然,这样做的话,如果要对应用程序之间进行数据分享,那就会变得十分困难。
正如上述所提到,Driver作为进程在应用程序中运行main()函数,它主要充当两个角色:
- 把user program转化为task:从宏观上看,Spark程序隐式地建造了一个指令的有向无环图(DAG),而Driver把这个转化为实际的物理层面上的运行计划。在这期间,各种各样的优化一直发生,把命令执行图转变成一些列状态,每个状态都包含了各种各样的任务。
- 在Executor上调配task:一旦这个物理层面上的执行计划建立起来后,driver能够调配Executor上的每一个task,从而在所有的Executor上起到了一个宏观调控的作用。
Executors作为worker进程一旦被建立起来,直到整个应用程序结束它们才会停止运行。总的来说就是Driver调配Executors,Executor运行各个task并返回结果。每个Executor还包含一个BlockManager,它以内存存储的形式来给RDD提供缓存。
当然,Spark的核心依然是RDD的执行和存储。本人将在下一篇文章作更为详细的讲解。
浅谈Spark(1) - Overview的更多相关文章
- 浅谈Spark应用程序的性能调优
浅谈Spark应用程序的性能调优 :http://geek.csdn.net/news/detail/51819 下面列出的这些API会导致Shuffle操作,是数据倾斜可能发生的关键点所在 1. g ...
- 浅谈Spark Kryo serialization
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3833985.html 最近在使用spark开发过程中发现当数据量很大时,如果cache数据将消耗很多的内 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 浅谈压缩感知(二十):OMP与压缩感知
主要内容: OMP在稀疏分解与压缩感知中的异同 压缩感知通过OMP重构信号的唯一性 一.OMP在稀疏分解与压缩感知中的异同 .稀疏分解要解决的问题是在冗余字典(超完备字典)A中选出k列,用这k列的线性 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
随机推荐
- PowerDesigner建立与数据库的连接,以便生成数据库和从数据库生成到PD中。
第一步,打开PD15,找到[Database],如图所示: 第二步,点击新建按钮,创建一个新的ODBC连接. 第三步,这里选择系统数据源,并选择Oracle 第四步,这里需要注意,服务器需要写的是Or ...
- 压缩工具类 - ZipUtils.java
压缩工具类,提供压缩文件.解压文件的方法. 源码如下:(点击下载 - ZipUtils.java .FolderUtils.java.ant-1.7.0.jar.commons-io-2.4.jar. ...
- Oracle Order Management DropShip Flow for R12
Oracle Order Management DropShip Flow for R12 Email ThisBlogThis!Share to TwitterShare to FacebookSh ...
- Qt之等待提示框(QMovie)
简述 关于gif的使用在实际项目中我用的并不多,因为我感觉瑕疵挺多的,很多时候锯齿比较严重,当然与图存在很大的关系. 关于生成gif的方法可以提供一个网站preloaders,基本是可以满足需求的. ...
- 将js对象转为json对象属性加上引号
工具地址 http://js2json.mengxiangchaoren.com
- POJ3592 Instantaneous Transference tarjan +spfa
链接:http://poj.org/problem?id=3592 题意:题目大意:给定一个矩阵,西南角为出发点,每个单位都有一订价值的金矿(#默示岩石,不成达,*默示时佛门,可以达到指定单位),队# ...
- POJ 3211 Washing Clothes【01背包】
题意:给出n种颜色,m件衣服,再分别给出m件衣服的颜色,和洗所需要的时间,dearboy和他的妹子一起洗衣服,且同种颜色的衣服不能同时洗,也不能两个人同时洗一件衣服,问洗完这m件衣服至少需要的时间 先 ...
- 一招解决OpenERP8.0安装旧版模块报错
有喜欢尝鲜的网友开始玩8.0了,可是版本还没发布,社区的很多特别好的模块还没有升级到8,所以经常碰到模块无法安装的问题. No module name osv 网友提出将模块的 from osv im ...
- linux下编译软件通用方法(memcached为例)
1)到软件的官网或其他网站下载软件的源码包 2)解压源码包,并切换到源码目录中 3)使用./configure --help查询配置帮助,里面可能会有安装指南(Installation directo ...
- php最新出现的函数
1. 数据过滤函数 filter_var: filter_var — Filters a variable with a specified filter 过滤的类型有: Validate filt ...