RDD模型

Spark是Berkeley大学AMP(stands for Algorithms, Machines, and People)实验室开发的一个项目。它是一个基于RDD(Resilient Distributed Datasets)模型,能够支持计算MapReduce模式的作业,主要用于迭代计算和交互式数据计算等中间结果可重用的分布式计算框架。Spark 将数据缓存在内存中从而减少数据的访问延迟。

1. RDD

RDD,即可伸缩的分布式数据集合,管理数据缓存和数据重用,采用分析日志方式支持数据容错,提供了粗粒度的事务处理接口(map,filter,join)。RDD 对数据记录进行分区存储,本身是只读的。RDD 的数据来源:1) 稳定的存储介质;2) 其它的RDD存储的数据。RDD对程序员开发了两种操作:数据存储和分区。RDD本身不做物理储存,通过保存足够的信息去实际的储存中计算出RDD,可以将RDD视为松散的虚拟内存[1]

2. RDD v.s. DSM

RDD相比于DSM(共享内存)有如下的不同

AspectRDDSDSM
ReadsCoarse- or fine-grainedFine-grained
WritesCoarese-grainedFine-grained
ConsistencyTrivial (immutable)Up to app / runtime
Fault recoveryFrine-grained and low-overhead using lineageRequires checkpoints and program rollback
Straggler mitigationPossible using backup tasksDifficult
Work placementAutomatic based on data localityUp to app
Behavior if not enough RAMSimilar to existing data flow systemsPoor perfermance 

3. 共享变量[2]

当Spark并发运行一个函数时,它是以多个的task,在不同的结点上运行,它传递每一个变量的一个拷贝,到每一个独立task使用到的函数中,因此这些变量并非共享的。然而有时候,我们需要在任务中能够被共享的变量,或者在任务与驱动程序之间共享。Spark支持两种类型的共享变量:

     广播变量:      可以在内存的所有结点中被访问,用于缓存变量(只读)

     累加器:         只能用来做加法的变量,例如计数和求和

4. Spark编程模型

Spark 使用 Scala 语言编写,分布式事务管理使用Mesos,并支持HDFS文件系统,是一个轻量级的框架。其0.5版有1,4000行代码。

spark code开发者编写 Driver 控制集群中的 worker。一个Driver定义了一个或多个RDD,并能够记录RDD之间的进化关系。worker是一个长进行,将存储了RDD分区存储在内存中执行操作。RDD数据集上定义了两种操作[3]:action 和 transformation。action,即在数据集上执行计算,并向driver返回一个值;transformation,即从已有数据集创建新的数据集。

转载于:https://www.cnblogs.com/valder/archive/2012/08/27/2658090.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值