什么是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?的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. Spark RDD 核心总结

    摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...

  3. spark处理大规模语料库统计词汇

    最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...

  4. Hive on Spark安装配置详解(都是坑啊)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...

  5. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  6. Spark踩坑记——初试

    [TOC] Spark简介 整体认识 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apach ...

  7. Spark读写Hbase的二种方式对比

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...

  8. (资源整理)带你入门Spark

    一.Spark简介: 以下是百度百科对Spark的介绍: Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方 ...

  9. Spark的StandAlone模式原理和安装、Spark-on-YARN的理解

    Spark是一个内存迭代式运算框架,通过RDD来描述数据从哪里来,数据用那个算子计算,计算完的数据保存到哪里,RDD之间的依赖关系.他只是一个运算框架,和storm一样只做运算,不做存储. Spark ...

  10. (一)Spark简介-Java&Python版Spark

    Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...

随机推荐

  1. A - Voting(queue)

    Problem description There are n employees in Alternative Cake Manufacturing (ACM). They are now voti ...

  2. IO流遍历文件夹下所有文件问题

    import java.io.File; /** * @author 王恒 * @datetime 2017年4月20日 下午2:24:32 * @description 递归调用 * */ publ ...

  3. 5.13Mysql数据库Database

    数据库的基本概念 1.什么是数据库: 用于存储和管理数据的仓库. 2.数据库的特点: 1.持久化存储数据的.其实数据库就是一个文件系统. 2.方便存储和管理数据 3.使用了统一的方式操作数据库---s ...

  4. Jquery 获取父页面下指定iframe里的指定元素

    var div1=$("#iframe1",window.parent.document).contents().find("#div1");

  5. font使用

    font连写属性 font-style  font-variant font-weight  font-size/line-height  font-family font-size与font-fam ...

  6. CSS3 3D变换实例 滚动的正方体

    笔记: 2D变换 transform 位移   translateX() translateY()  简写:translate(X值,Y值)  正值向右,负值向左 旋转 rotate()  rotat ...

  7. 出现“ORA-28000:the account is locked”的解决办法

    在Oracle 11g版本中,出于安全的考虑,所有Oracle的默认用户,包括SCOTT用户都被锁定.输入用户名和口令之后,会出现错误“ORA-28000:the account is locked” ...

  8. js date 转化为字符串函数

    getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6). getFullYear() 从 Date 对象 ...

  9. 数据库 'tempdb' 的事务日志已满。若要查明无法重用日志中的空间的原因

    最常的做法: --1.清空日志 DUMP TRANSACTION tempdb WITH NO_LOG --2.截断事务日志: BACKUP LOG tempdb WITH NO_LOG --3.收缩 ...

  10. QS之force(1)

    force This command allows you to apply stimulus interactively to VHDL signals(not variables), Verilo ...