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。
Spark设计思想浅析的更多相关文章
- CEPH浅析”系列之三——CEPH的设计思想
Ceph针对的目标应用场景 理解Ceph的设计思想,首先还是要了解Sage设计Ceph时所针对的目标应用场景,换言之,"做这东西的目的是啥?" 事实上,Ceph最初针对的目标应用场 ...
- Kakfa的设计思想
Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实 ...
- Alink漫谈(一) : 从KMeans算法实现不同看Alink设计思想
Alink漫谈(一) : 从KMeans算法实现不同看Alink设计思想 目录 Alink漫谈(一) : 从KMeans算法实现不同看Alink设计思想 0x00 摘要 0x01 Flink 是什么 ...
- 使用Unity3D的设计思想实现一个简单的C#赛车游戏场景
最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现.原本在C#中很方便地就可以完成的一个小场景,使用Unity3 ...
- spring事务管理器设计思想(二)
上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...
- 掌握 Cinder 的设计思想 - 每天5分钟玩转 OpenStack(46)
上一节介绍了 Cinder 的架构,这节讨论 Cinder 个组件如何协同工作及其设计思想. 从 volume 创建流程看 cinder-* 子服务如何协同工作 对于 Cinder 学习来说,Volu ...
- javascript继承机制的设计思想(ryf)
我一直很难理解Javascript语言的继承机制. 它没有"子类"和"父类"的概念,也没有"类"(class)和"实例" ...
- 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...
- 08-FPGA状态机设计实例——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:1.学习状态机的相关概念 2.理解一段式.两段式以及三段式状态机的区别以及优缺点 实验平台:芯航线FPGA核心板 实验原理: 状态机全称是有限状态机(fin ...
随机推荐
- 函数图 https://www.processon.com/mindmap/5b5077fae4b040415ae39c64
---恢复内容结束---
- css的样式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring MVC 学习笔记3 - 利用Default Annotation 模式获取请求,使Controller与View对应,并传值。
1. WEB-INF/web.xml 这里定义了获取请求后,执行的第一步.抓取请求. <servlet> <servlet-name>appServlet</servle ...
- uva-10098
所有的排列,但是要不重复 #include<stdio.h> #include<iostream> #include<sstream> #include<qu ...
- License分类 + 引入开源软件时License的注意事项
License分类 GPL: linux.openJDK,openJFX,mysql 融合感染,单独子模块不感染(自己的模块与引入模块的通信方式是socket) openJDK(GNU General ...
- filzilla
之前找了一套支援 SFTP (FTP over SSH) 的 FTP Server 就是為了解決 Port 不夠用的問題,直到最近才發現我們常用的 FileZilla Server 原來就有支援 FT ...
- 最近学习下,nohup和&的区别
nohup是永久执行 &是指在后台运行 运行 nohup --helpRun COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号” 就是指, ...
- centos的安装和下载
https://blog.csdn.net/risen16/article/details/50737948
- linux 下创建文本的方法
1. 打开终端,输入 vi 1.txt 输入:wq 文本创建成功 2. 打开终端,输入 vim 1.txt 输入:wq 文本创建成功 3. 打开终端 , 输入 touch 1.txt ...
- HTML 表格标签
<table border="1"> <tr> <td>row 1, cell 1</td> <td>row 1, ce ...