Spark 快速理解

转载自:http://blog.csdn.net/colorant/article/details/8255958
算法


==是什么 ==数据库

 

目标Scope(解决什么问题)编程

 

在大规模的特定数据集上的迭代运算或重复查询检索缓存

 

官方定义架构

aMapReduce-like cluster computing framework designed for low-latency iterativejobs and interactive use from an interpreter框架

 

我的理解分布式

 

首先,MapReduce-like是说架构上和多数分布式计算框架相似,Spark有分配任务的主节点(Driver)和执行计算的工做节点(Worker函数

 


 

其次,Low-latency基本上应该是源于Worker进程较长的生命周期,能够在一个Job过程当中长驻内存执行Task,减小额外的开销oop

 

而后对interative重复迭代类查询运算的高效支持,是Spark的出发点了。最后它提供了一个基于ScalaShell方便交互式的解释执行任务性能

 

==如何实现 ==

 

核心思路,架构

 

RDDSpark的核心概念是RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的所有或部分能够缓存在内存中,在屡次计算间重用。

 

Lineage:利用内存加快数据加载在众多的其它的In-Memory类数据库或Cache类系统中也有实现,Spark的主要区别在于它处理分布式运算环境下的数据容错性(节点实效/数据丢失)问题时采用的方案。为了保证RDD中数据的鲁棒性,RDD数据集经过所谓的血统关系(Lineage)记住了它是如何从其它RDD中演变过来的。相比其它系统的细颗粒度的内存数据更新级别的备份或者LOG机制,RDDLineage记录的是粗颗粒度的特定数据变换(Transformation)操做(filter, map, join etc.)行为。当这个RDD的部分分区数据丢失时,它能够经过Lineage获取足够的信息来从新运算和恢复丢失的数据分区。这种粗颗粒的数据模型,限制了Spark的运用场合,但同时相比细颗粒度的数据模型,也带来了性能的提高。

 

总之,Spark的核心思路就是将数据集缓存在内存中加快读取速度,同时用lineage关联的RDD以较小的性能代价保证数据的鲁棒性。

 

适用领域

 

正如其目标scopeSpark适用于须要屡次操做特定数据集的应用场合。须要反复操做的次数越多,所需读取的数据量越大,受益越大,数据量小可是计算密集度较大的场合,受益就相对较小。

 

细节

 

使用内存缓存数据集快在哪里?主要是几个方面:首先是磁盘IO,其次数据的序列化和反序列化的开销也节省了,最后相对其它内存数据库系统,粗颗粒度的内存管理机制减少了数据容错的代价(如典型的数据备份复制机制)

 

==相关项目 ==

 

上下游项目

 

  • Discretized Streams (Spark streaming)

 

构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分红小的时间片段(几秒),以相似batch批量处理的方式来处理这小部分数据。我的理解构建在Spark上的缘由大概是由于Spark的低延迟执行引擎(100ms+)勉强能够用于实时处理,而Spark的核心理念数据重用和流式数据处理自己并无直接的交集,相反我的感受流式数据的无穷连续性的特性必定程度上和数据重用是冲突的。相比基于Record的其它处理框架(如Storm),RDD数据集更容易作高效的容错处理。此外小批量处理的方式使得它能够同时兼容批量和实时数据处理的逻辑和算法。方便了一些须要历史数据和实时数据联合分析的特定应用场合。

 

  • Shark ( Hive on Spark)

 

Shark基本上就是在Spark的框架基础上提供和Hive同样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了HiveAPI来实现query Parsing Logic Plan generation,最后的PhysicalPlan   execution阶段用Spark代替Hadoop MapReduce。经过配置Shark参数,Shark能够自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark经过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一块儿,最大化RDD的重复使用。

 

相似项目

 

Twister :http://www.iterativemapreduce.org大概的意思也是经过Cache数据,实现迭代的MapReduce过程当中的数据重用,不过它的模型貌似相对简单些,大体是经过拓展MapReduce API,分发管理缓存数据,而后经过本身的Daemon进程管理和分配MapReduce TaskCache对应的节点上,容错性和计算模型方面没有SharkRDD来得精巧和通用。

 

Haloop:Twister相似,修改扩展了MapReduce框架,增长了循环逻辑和Data Caching

 

==相关文献 ==

 

http://spark-project.org/项目首页

http://shark.cs.berkeley.edu/ shark项目主页

 

Paper论文

http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf

 

==其它 ==

 

主要实现和编程接口基于Scala

相关文章
相关标签/搜索