首页 > 代码库 > 什么是Spark?

什么是Spark?

什么是Spark

Spark是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加高速。Spark很小巧玲珑,由加州伯克利大学AMP实验室的Matei为主的小团队所开发。

使用的语言是Scala,项目的core部分的代码仅仅有63个Scala文件。很短小精悍。
Spark 是一种与 Hadoop 相似的开源集群计算环境,可是两者之间还存在一些不同之处。这些实用的不同之处使 Spark 在某些工作负载方面表现得更加优越。换句话说,Spark 启用了内存分布数据集,除了可以提供交互式查询外,它还可以优化迭代工作负载。


Spark 是在 Scala 语言中实现的。它将 Scala 用作其应用程序框架。与 Hadoop 不同。Spark 和 Scala 可以紧密集成,当中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。


虽然创建 Spark 是为了支持分布式数据集上的迭代作业,可是实际上它是对 Hadoop 的补充,能够在 Hadoop 文件系统中并行执行。

通过名为Mesos的第三方集群框架能够支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
Spark 集群计算架构
尽管 Spark 与 Hadoop 有相似之处。但它提供了具有实用差异的一个新的集群计算框架。首先。Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比方机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短訪问延迟。
Spark 还引进了名为弹性分布式数据集(RDD) 的抽象。RDD 是分布在一组节点中的仅仅读对象集合。这些集合是弹性的,假设数据集一部分丢失,则能够对它们进行重建。重建部分数据集的过程依赖于容错机制。该机制能够维护 "血统"(即同意基于数据衍生过程重建部分数据集的信息)。

RDD 被表示为一个 Scala 对象,而且能够从文件里创建它;一个并行化的切片(遍布于节点之间);还有一个 RDD 的转换形式。而且终于会彻底改变现有 RDD 的持久性,比方请求缓存在内存中。


Spark 中的应用程序称为驱动程序,这些驱动程序可实如今单一节点上运行的操作或在一组节点上并行运行的操作。

与 Hadoop 类似,Spark 支持单节点集群或多节点集群。对于多节点操作。Spark 依赖于 Mesos 集群管理器。Mesos 为分布式应用程序的资源共享和隔离提供了一个有效平台。

该设置充许 Spark 与 Hadoop 共存于节点的一个共享池中。

Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架。Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的长处。但不同于MapReduce的是Job中间输出和结果能够保存在内存中。从而不再须要读写HDFS。因此Spark能更好地适用于数据挖掘与机器学习等须要迭代的map reduce的算法。其架构例如以下图所看到的:

技术分享

  Spark与Hadoop的对照

Spark的中间数据放到内存中,对于迭代运算效率更高。

Spark更适合于迭代运算比較多的ML和DM运算。

由于在Spark里面。有RDD的抽象概念。

Spark比Hadoop更通用

Spark提供的数据集操作类型有非常多种。不像Hadoop仅仅提供了Map和Reduce两种操作。

比方map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。

同一时候还提供Count, collect, reduce, lookup, save等多种actions操作。

这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。

各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。

用户能够命名,物化,控制中间结果的存储、分区等。能够说编程模型比Hadoop更灵活。

只是因为RDD的特性,Spark不适用那种异步细粒度更新状态的应用,比如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量改动的应用模型不适合。

容错性

在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data。一个是logging the updates。用户能够控制採用哪种方式来实现容错。

可用性

Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。

Spark与Hadoop的结合

Spark能够直接对HDFS进行数据的读写,相同支持Spark on YARN。Spark能够与MapReduce执行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,差点儿与Hive全然兼容。

Spark的适用场景

Spark是基于内存的迭代计算框架,适用于须要多次操作特定数据集的应用场合。须要重复操作的次数越多,所需读取的数据量越大。受益越大,数据量小可是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)

因为RDD的特性。Spark不适用那种异步细粒度更新状态的应用,比如web服务的存储或者是增量的web爬虫和索引。

就是对于那种增量改动的应用模型不适合。

总的来说Spark的适用面比較广泛且比較通用。

执行模式

本地模式

Standalone模式

Mesoes模式

yarn模式

Spark生态系统

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的反复使用。

Spark streaming: 构建在Spark上处理Stream数据的框架,主要的原理是将Stream数据分成小的时间片断(几秒)。以类似batch批量处理的方式来处理这小部分数据。

Spark Streaming构建在Spark上。一方面是由于Spark的低延迟运行引擎(100ms+)能够用于实时计算,还有一方面相比基于Record的其他处理框架(如Storm)。RDD数据集更easy做高效的容错处理。此外小批量处理的方式使得它能够同一时候兼容批量和实时数据处理的逻辑和算法。方便了一些须要历史数据和实时数据联合分析的特定应用场合。

Bagel: Pregel on Spark,能够用Spark进行图计算,这是个很实用的小项目。

Bagel自带了一个样例,实现了Google的PageRank算法。

Hadoop。HBase。Storm,Spark究竟是什么?

Hadoop=HDFS+Hive+Pig+...

HDFS: 存储系统
MapReduce:计算系统
Hive:提供给SQL开发者(通过HiveQL)的MapReduce,基于Hadoop的数据仓库框架
Pig:基于Hadoop的语言开发的
HBase:NoSQL数据库
Flume:一个收集处理Hadoop数据的框架
Oozie:一个让用户以多种语言(如MapReduce,Pig和Hive)定义一系列作业的工作流处理系统
Ambari:一个基于web的部署/管理/监控Hadoop集群的工具集
Avro:同意编码Hadoop文件的schema的一种数据序列化系统
Mahout:一个数据挖掘库,它包括了最流行的一些数据挖据算法,而且以MapReduce模型来实现他们
Sqoop:一个从非Hadoop数据存储(如关系数据库和数据仓库)进来的移动数据到Hadoop中的连接工具
HCatalog:一个中心化的元数据管理以及Apache Hadoop共享服务,它同意在Hadoop集群中的全部数据的统一视图,并同意不同的工具,包含Pig和Hive。处理不论什么数据元素
,而无需知道身体在集群中的数据存储。

BigTop:为了创造一个更正式的程序或框架Hadoop的子项目及相关组件的目标提高Hadoop的平台,作为一个总体的包装和互操作性測试。

Apache  Storm:一个分布式实时计算系统,Storm是一个任务并行连续计算引擎。 Storm本身并不典型在Hadoop集群上执行,它使用Apache ZooKeeper的和自己的主/从工作进程,协调拓扑,主机和工作者状态,保证信息的语义。

不管怎样, Storm必然还是能够从HDFS文件消费或者从文件写入到HDFS。

Apache Spark:一种高速。通用引擎用于大规模数据处理。Spark是一个数据并行通用批量处理引擎。工作流中在一个类似的和怀旧风格的MapReduce中定义,可是。比传统Hadoop MapReduce的更能干。

Apache Spark有其流API项目,该项目通过短间隔批次同意连续处理。Apache Spark本身并不须要Hadoop操作。

可是。它的数据并行模式,须要稳定的数据优化使用共享文件系统。该稳定源的范围能够从S3,NFS或更典型地,HDFS。运行Spark应用程序并不须要Hadoop YARN。Spark有自己独立的主/server进程。然而,这是共同的执行使用YARN容器Spark的应用程序。

此外,Spark还能够在Mesos集群上运行。


以上借鉴的文章:http://www.d1net.com/bigdata/news/316561.html

                            http://www.d1net.com/bigdata/news/316561.html

什么是Spark?