Spark设计思想浅析

Spark is no rocket science!——博主

了解分布式计算的朋友,一定知道DAG这样一个概念。其实我接触DAG也是在学习MapReduce时了解到的。(具体可查阅《大数据日知录:架构与算法》这本书。推荐阅读。)

DAG,有向无环图。可以脑补一下DAG是个什么东西:有向、无环、图,如是而已,意思实在是再明白不过了。如果把DAG讲的复杂一点,还会涉及到DAG计算系统的三层结构等较深入的设计与实现细节。

还有一个概念大家也应该有所了解:批处理计算系统。批处理,批量处理。批量,有数据量巨大的意思。批处理计算系统,就是要在巨大的数据量上做计算。

Spark就是一个DAG的批处理计算系统。MapReduce算一个DAG的批处理计算框架。

有向无环图的计算过程,相邻的两个节点之间如何传输数据?在MapReduce框架中,使用的是先将计算结果保存到磁盘,然后通过网络传输到下一节点。把计算结果保存到磁盘有一个问题,那就是磁盘的读写速度,以固态硬盘为例,大约为500M/s,这个速度已经很快了;而DDR3内存的读写速度大致在8G/s左右。这差距在一个数量级。节点之间网络传输的速度可以提高到千兆甚至万兆,在硬件支持的情形下,大致也有1G/s的传输速度。可以说,磁盘的读写是最耗时的。

减少磁盘读写的比重是提高计算速率的一个重要方面。所以Berkeley实验室提出了RDD这样一个概念。一段文字:

  RDD具备像MapReduce等数据流模型的容错特性,并且允许开发人员在大型集群上执行基于内存的计算。现有的数据流系统对两种应用的处理并不高效:一是迭代式算法,这在图应用和机器学习领域很常见;二是交互式数据挖掘工具。这两种情况下,将数据保存在内存中能够极大地提高性能。为了有效地实现容错,RDD提供了一种高度受限的共享内存,即RDD是只读的,并且只能通过其他RDD上的批量操作来创建。尽管如此,RDD仍然足以表示很多类型的计算,包括MapReduce和专用的迭代编程模型(如Pregel)等。我们实现的RDD在迭代计算方面比Hadoop快20多倍,同时还可以在5-7秒内交互式地查询1TB数据集。——Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing译文

  

除了读写速率的提高引起的计算速率的提升,另外一方面,在MapReduce计算框架下,每个job只能有单一一个Reduce,每个job启动开销较大的问题也在更通用的DAG模型下得到了解决。为什么?DAG模型是Map/Reduce任务的抽象化。在Spark这个DAG批处理计算系统里,有更多的Transformation和action可以选择,也包括了Map和Reduce。

时间: 2024-10-12 13:15:40

Spark设计思想浅析的相关文章

Kakfa的设计思想

Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统.低延迟的实时系统.storm/Spark流式处理引擎,web/nginx日志.访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目. 1.前言 消息队列的性能好坏

从JAVA多线程理解到集群分布式和网络设计的浅析

对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些常用的,在后续文章中如果有必要再说明更加复杂的吧,本文主要说明多线程的一下几个内容: 1.在应用开发中什么时候选择多线程? 2.多线程应该注意些什么? 3.状态转换控制,如何解决死锁? 4.如何设计一个具有可扩展性的多线程处理器? 5.多线程联想:在多主机下的扩展-集群? 6.WEB应用的多线程以及

中文翻译为"具象状态传输"的RESTful的架构风格和设计思想

本文标签:  具象状态传输 RESTful架构 RESTful理解 REST   服务器 REST 定义了一组体系架构原则,您可以根据这些,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态.所以在事实上,REST 对 Web的影响非常大,由于其使用相当方便,已经普遍地取代了基于 SOAP 和 WSDL 的接口设计.在多年以后的今天,REST的主要框架已经开始雨后春笋般的出现. REST(Representational State Transfer ),有中文翻译为"具象状态传

作业01的设计思想、程序流程图、源代码、结果截图

一.设计思想: 1.读入类型为String的参数,并且进行显示: 2.然后进行强制类型转化,将String类型转化为int类型: 3.然后各个参数相加: 4.输出最后的结果: 二.流程图: 三.源代码: package demo; public class sum { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println

转:从《The C Programming Language》中学到的那些编程风格和设计思想

这儿有一篇写的很好的读后感:http://www.cnblogs.com/xkfz007/articles/2566424.html 读书不是目的,关键在于思考. 很早就在水木上看到有人推荐<The C Programming Language>这本书,一直都没看,开学一个月就专心拜读了一下,并认真做了课后习题.读来收获不少,主要有两点:一是加深了自己对一些基础知识的理 解和感悟:二是从中学到了一些不错的编程风格和设计思想,这些东西虽看起来不起眼但细细嚼来还是很值得学习的.下面就从四个方面做一

Linux/Unix设计思想

Mike Gancarz 1.Unix开发基于Multics分时操作系统 2.NIH(Not invented here,非我发明) 3.GPL:GUN公共授权协议,适用于软件的法律协议.开源 4.Unix哲学: 1)小即是美:易理解.维护.低消耗系统资源.易于其他工具结合 2)让每一个程序制作好一件事 3)尽快建立原型(prototyping):"第三个系统"概念 4)舍高效而取可移植性 5)使用纯文本文件来存储数据:二进制严格禁止 6)充分利用软件的杠杆效应:借用代码模块;将一切自

把握linux内核设计思想系列(未完待续......)

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 把握linux内核设计思想(一):系统调用 把握linux内核设计思想(二):硬中断及中断处理 把握linux内核设计思想(三):下半部机制之软中断 把握linux内核设计思想(四):下半部机制之tasklet 把握linux内核设计思想(五):下半部机制之工作队列及几种机制的选择 把握linux内核设计思想(六):内核时钟中断 把握linux内核设计思想(七):内核定时器和

kafka入门二:Kafka的设计思想、理念

本节主要从整体角度介绍Kafka的设计思想,其中的每个理念都可以深入研究,以后我可能会发专题文章做深入介绍,在这里只做较概括的描述以便大家更好的理解Kafka的独特之处.本节主要涉及到如下主要内容: Kafka设计基本思想 Kafka中的数据压缩 Kafka消息转运过程中的可靠性 Kafka集群镜像复制 Kafka 备份机制 一.kafka由来 由于对JMS日常管理的过度开支和传统JMS可扩展性方面的局限,LinkedIn(www.linkedin.com)开发了Kafka以满足他们对实时数据流

React的设计思想——理解JSX和Component

基于HTML的前端界面开发正变得越来越复杂,其本质问题基本都可以归结于如何将来自于服务器端或者用户输入的动态数据高效的反映到复杂的用户界面上.而来自Facebook的React框架正是完全面向此问题的一个解决方案.React带来了很多开创性的思路来构建前端界面,虽然选择React的最重要原因之一是性能,但是相关技术背后的设计思想更值得我们去思考. React项目经理Tom Occhino曾经阐述React诞生的初衷,他提到React最大的价值究竟是什么?是高性能虚拟DOM.服务器端Render.