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 ...
随机推荐
- Ubuntu 提权漏洞(CVE-2019-7304)复现
漏洞描述: Ubuntu 版本: Ubuntu 18.10 Ubuntu 18.04 LTS Ubuntu 16.04 LTS Ubuntu 14.04 LTS 2.28 < snapd < ...
- 0_Simple__simpleTemplates + 0_Simple__simpleTemplates_nvrtc
使用 C++ 的模板 ▶ 源代码:静态使用 // sharedmem.cuh #ifndef _SHAREDMEM_H_ #define _SHAREDMEM_H_ // SharedMemory 的 ...
- hive 使用笔记(partition; HDFS乱码;日期函数)
6. insert 语句 1) 因为目标表有partition, 所以刚开始我使用的语句是 insert overwrite table sa_r_item_sales_day_week_month ...
- 3. 修改myeclipse工作区间默认编码和jsp的默认编码
1.windows - preferences - General - Workspace 2.windows - preferences - MyEclipse - Files and Editor ...
- Ping ip能ping通,ping计算机名ping不通,网络共享不能访问
名称 协议 端口 NetBIOS Name Service UDP 137 NetBIOS Datagram Service UDP 138 NetBIOS Session Service TCP 1 ...
- SAP订单状态最详细的解释
order status description explanation CRTD 建立 生产订单创建时的状态,表明订单处于刚刚创建时点,不允许做后续发料,确认等操作. PREL 部分释放(部分下达) ...
- ios 获得webview user-agent
UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectZero]; NSString *myUserAgent = [webView s ...
- Linux系统之更改默认块大小
查看操作系统块大小:#tune2fs -l /dev/sda1 |grep 'Block size' ( tune2fs -l /dev/sda1可以查看更多相关文件 ...
- Fb 第三方接口
1.Facebook ID? User ID / https://www.piliapp.com/facebook/id/?url=https%3A%2F%2Fwww.facebook.com%2Fz ...
- Servlet Filter 过滤器 对指定页面不拦截
package niit.dxs.controller; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; i ...