转自: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,减少额外的开销

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

==如何实现 ==

核心思路,架构

RDD:Spark的核心概念是RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。

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

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

适用领域

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

细节

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

==相关项目 ==

上下游项目

  • Discretized Streams (Spark streaming)

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

Discretized Streams, 离散化的流数据处理:  http://www.cnblogs.com/fxjwind/p/3333213.html

  • Shark ( Hive on Spark)

Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现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 Task到Cache对应的节点上,容错性和计算模型方面没有Shark的RDD来得精巧和通用。

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

Spark 快速理解的更多相关文章

  1. Spark机器学习 Day2 快速理解机器学习

    Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...

  2. Spark快速数据处理

    原书名:Fast Data Processing with Spark 原出版社:Packt Publishing 作者: (美)Holden Karau 丛书名:大数据技术丛书 出版社:机械工业出版 ...

  3. [转] Spark快速入门指南 – Spark安装与基础使用

    [From] https://blog.csdn.net/w405722907/article/details/77943331 Spark快速入门指南 – Spark安装与基础使用 2017年09月 ...

  4. Spark快速入门 - Spark 1.6.0

    Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...

  5. spark快速大数据分析学习笔记*初始化sparkcontext(一)

    初始化SparkContext 1// 在java中初始化spark import org.apache.spark.SparkConf; import org.apache.spark.api.ja ...

  6. 【转】快速理解Kafka分布式消息队列框架

     from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...

  7. 快速理解web语义化

    什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...

  8. Spark快速入门

    Spark 快速入门   本教程快速介绍了Spark的使用. 首先我们介绍了通过Spark 交互式shell调用API( Python或者scala代码),然后演示如何使用Java, Scala或者P ...

  9. 快速理解高性能HTTP服务端的负载均衡技术原理(转)

    1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...

随机推荐

  1. Android 中日期对话框的应用

    import java.util.Calendar; import android.widget.DatePicker; import android.app.DatePickerDialog; // ...

  2. Response.ContentType 详细列表-请求的内容类型详细记录

    Response.ContentType 详细列表-请求的内容类型详细记录 作者:王春天一.应用实例: Response.Clear(); Response.ContentType = "t ...

  3. Azure 怎么开通FTP

    1. 需要在Azure Portal设置端口:21, 1035, 1036, 1037,1038,1039,1040 2. 需要内网放开端口:21, 1035, 1036, 1037,1038,103 ...

  4. Hadoop2.5.2源码编译及导入Eclipse

    前言:由于官网提供的64位hadoop是没有编译的,所以当我们用到64位的hadoop时,需要在自己的64位linux系统上编译hadoop源码.另外,要想在eclipse里查看hadoop源码,修改 ...

  5. 利用vagrant打包系统--制作自己的box

    前置条件1.安装VirtualBox 2.安装Vagrant 3.在VirtualBox中安装操作系统,例如 CentOS 1)把在virtualBox中安装的系统打包成box 1.我们需要知道虚拟机 ...

  6. [svc]运维知识体系及职业

    知识点: 1,运维命令基础 100个命令 三剑客 正则 2,运维基础知识 linux启动 目录结构 常见配置路径 文件属性 链接知识 权限 用户管理 磁盘管理 网络基础(配置ip路由等) 3,基础核心 ...

  7. 57. 3Sum【medium】

    Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all un ...

  8. SQL中AND与OR的优先级

    突然发现,把基础给忘了,AND的优先级大于OR,试验如下: Oracle --Y ; --Y ) ; --No value ); 附,Oracle文档: http://docs.oracle.com/ ...

  9. 【转】 OpenGL使用libPng读取png图片

    觉得自己越来越无耻了呢?原文:http://laoyin.blog.51cto.com/4885213/895554 我复制到windows下也可以正常跑出来. #include<stdarg. ...

  10. ng-bind和{{}}插值法

    引言 今天调bug的时候遇到了一个问题,就是有的时候加载出来的数据没有数据的时候出现的是{{TeacherName}},一看这个不是我在页面上绑的值吗?怎么这样就显示出来了呢…… 针对这个问题,想起来 ...