简介


Spark官网: http://spark.apache.org/


Spark的口号是:


快如闪电的集群计算


Spark POP sparkpop英语_数据


One stack rule them all---一栈式大数据技术栈




Spark POP sparkpop英语_数据_02



Spark简介


Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark生态圈有Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件逐渐形成大数据处理一站式解决平台。


Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型)。在Spark官网上介绍,它具有运行速度快、易用性好、通用性强和随处运行等特点。


我们以官网首页来介绍Spark的特性:


1:速度快:


Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。



Spark POP sparkpop英语_数据_03



2:易用性好:


Spark不仅支持Scala编写应用程序,而且支持Java和Python,R等语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作。


各个语言的支持情况:


Scala(很好--Spark的源码就是Scala写的),Java(很好),Python(不错),R(基本不用)


补充:其中企业中使用最多的是java和Scala,其比例在1:1,现在我们就对比下,scala和java



Spark POP sparkpop英语_hadoop_04



现在该知道为什么使用Scala作为Spark源码开发了。


3:通用性强:


Spark生态圈包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX等组件,这些组件分别处理Spark Core提供内存计算框架、SparkStreaming的实时处理应用、Spark SQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理,Spark生态圈形成一个无缝的提供一站式解决平台。


注意:


  • Local(只用于测试)
  • Standalone:独立模式资源管理框架
  • Spark on yarn:最有前景的模式,hadoop的资源管理框架也是yarn
  • Spark on Mesos:官方推荐,支持粗粒度和细粒度的资源管理框架
  • Amazon EC2:亚马逊云的方式


Spark POP sparkpop英语_大数据_05




Spark POP sparkpop英语_Spark POP_06



4:随处运行:


Spark具有很强的适应性,能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。



Spark POP sparkpop英语_hadoop_07



Spark的其他特性包括:


  • 支持比Map和Reduce更多的函数。
  • 优化任意操作算子图(operator graphs)。
  • 可以帮助优化整体数据处理流程的大数据查询的延迟计算。
  • 提供简明、一致的Scala,Java和Python API。
  • 提供交互式Scala和Python Shell。目前暂不支持Java。

Spark VS Hadoop


Hadoop有两个核心模块,分布式存储模块HDFS和分布式计算模块Mapreduce


spark本身并没有提供分布式文件系统,因此spark的分析大多依赖于Hadoop的分布式文件系统HDFS


Hadoop的Mapreduce与spark都可以进行数据计算,而相比于Mapreduce,spark的速度更快并且提供的功能更加丰富


Spark和Hadoop的关系图:



Spark POP sparkpop英语_Spark POP_08



Spark是在借鉴了MapReduce计算模型之上发展而来的,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷,具体如下:


1:Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。



Spark POP sparkpop英语_Spark POP_09



Spark POP sparkpop英语_大数据_10




2:Spark容错性高。Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即充许基于数据衍生过程)对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式:CheckPoint Data,和Logging The Updates,用户可以控制采用哪种方式来实现容错。


3:Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为:Transformations和Actions两大类。Transformations包括Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,同时还提供Count, Actions包括Collect、Reduce、Lookup和Save等操作。另外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。


Spark 发展历程


Spark POP sparkpop英语_Spark POP_11


目前Spark现状:


目前已经有30+公司100+开发者在提交代码


Hadoop最大的厂商Cloudera宣称加大Spark框架的投入来取代Mapreduce


Hortonworks


Hadoop厂商MapR投入Spark阵营


Apache Mahout放弃MapReduce,将使用Spark作为后续算子的计算平台


Spark的适用场景


目前大数据处理场景有以下几个类型:


1.  复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;


2.  基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间


3.  基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间


目前对以上三种场景需求都有比较成熟的处理框架:


第一种情况:可以用Hadoop的MapReduce来进行批量海量数据处理


第二种情况:可以Impala进行交互式查询,


第三中情况:可以用Storm分布式处理框架处理实时流式数据。


以上三者都是比较独立,各自一套维护成本比较高,而Spark的出现能够一站式平台满意以上需求。


通过以上分析,总结Spark场景有以下几个:


1:Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小


的web爬虫和索引。就是对于那种增量修改的应用模型不适合


3:数据量不是特别大,但是要求实时统计分析需求


所以Spark可以一站式的解决大数据所有的处理场景,不适合在小量的数据和异步细粒度更新状态的应用。


总结为图:



Spark POP sparkpop英语_Spark POP_12



Spark生态系统简介


Spark生态圈以Spark Core为核心,从HDFS、Amazon S3和HBase等持久层读取数据,以MESS、YARN和自身携带的Standalone为资源管理器调度Job完成Spark应用程序的计算。 这些应用程序可以来自于不同的组件,如Spark Shell/Spark Submit的批处理、Spark Streaming的实时处理应用、Spark SQL的即席查询、BlinkDB的权衡查询、MLlib/MLbase的机器学习、GraphX的图处理和SparkR的数学计算等等。


Spark生态系统图:



Spark POP sparkpop英语_数据_13



对比伯克利技术栈:


Spark POP sparkpop英语_Spark POP_14


1:Spark-core


Spark Core是Spark的核心:


(1):RDD--弹性分布式数据集:


在Spark中引入了RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”对它们进行重建,保证了数据的高容错性;


(2):DAG--有向无环图计算引擎


l提供了有向无环图(DAG)的分布式并行计算框架,并提供Cache机制来支持多次迭代计算或者数据共享,大大减少迭代计算之间读取数据局的开销,这对于需要进行多次迭代的数据挖掘和分析性能有很大提升


(3):数据本地化


移动计算而非移动数据,RDD Partition可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算


(4):线程池


使用多线程池模型来减少task启动开稍Akka,Netty采用容错的、高可伸缩性的akka作为通讯框架,Spark1.6之前的版本使用的是akka作为通讯模型,1.6之后使用的是具有零拷贝的netty作为通讯模型


2: SparkStreaming


Spark Streaming基于微批量方式的计算和处理,可以用于处理实时的流数据。它使用DStream,简单来说就是一个弹性分布式数据集(RDD)系列,处理实时数据。

3:Spark Sql

Spark SQL可以通过JDBC API将Spark数据集暴露出去,而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据(如JSON,Parquet以及数据库等)执行ETL,将其转化,然后暴露给特定的查询。

4:Spark MLlib

MLlib是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。

5:Spark GraphX

GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了支持图计算,GraphX暴露了一个基础操作符集合(如subgraph,joinVertices和aggregateMessages)和一个经过优化的Pregel API变体。此外,GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。

6: BlinkDB

BlinkDB是一个近似查询引擎,用于在海量数据上执行交互式SQL查询。BlinkDB可以通过牺牲数据精度来提升查询响应时间。通过在数据样本上执行查询并展示包含有意义的错误线注解的结果,操作大数据集合。

7: Tachyon

Tachyon是一个以内存为中心的分布式文件系统,能够提供内存级别速度的跨集群框架(如Spark和MapReduce)的可信文件共享。它将工作集文件缓存在内存中,从而避免到磁盘中加载需要经常读取的数据集。通过这一机制,不同的作业/查询和框架可以以内存级的速度访问缓存的文件。

此外,还有一些用于与其他产品集成的适配器,如Cassandra( Spark Cassandra 连接器)和R(SparkR)。Cassandra Connector可用于访问存储在Cassandra数据库中的数据并在这些数据上执行数据分析。

总结:

Spark是一个一栈式的大数据处理生态系统,以Spark Core为核心,从HDFS、Amazon S3和HBase等持久层读取数据,以Mesos、YARN和自身携带的Standalone为资源管理器调度Job完成Spark应用程序的计算。其核心的组件Spark Core,Spark Sql,SparkStreaming分别解决了大数据中的数据处理的批处理,即席查询,实时查询的业务场景,其MLlib/MLbase处理机器学习相关、GraphX处理图处理和SparkR处理数学计算。

Spark以其高级的DAG计算引擎和基于内存的迭代计算其弹性分布式数据集,简洁,高效,快速,

安全的处理海量的数据。

现在以思维导图的方式构建知识架构:

Spark POP sparkpop英语_spark_15