Spark简介、生态系统

  • Post author:
  • Post category:其他



Spark是什么

Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架。Spark是一个用来实现快速而通用的集群计算平台。它一个主要特点是能够在内存中进行计算,并且提供了基于Python、Java、Scala和SQL的API,可以和其他大数据工具配合使用。由于Spark的核心引擎有着速度快和通用的特点,因此它还支持各种不同应用场景专门设计的高级组件,比如SQL和机器学习等。组件其实可以理解为Spark针对常见的任务场景而封装好的模块,这些模块提供了各场景的基本功能。组件之间可以相互调用,各组件如图:

在这里插入图片描述

  • Spark Core实现了任务调度、内存管理、错误恢复、与存储系统交互等模块,并且还包含了对弹性分布式数据集(Resilient

    Distributed Dataset,简称RDD)的API定义。它主要担任了系统管理员的角色。
  • Spark SQL 主要用来操作结构化数据的程序包,通过Spark SQL可以使用SQL或者hive版本的HQL来查询数据库。
  • Spark Streaming 主要是对实时数据进行流式计算。
  • MLib提供了很多机器学习算法。
  • GraphX用来操作图,可以并行的进行图计算,支持了图的各种操作。

其中,Spark SQL组件是经常用到的,使用hql语句从hadoop数仓中读取结构化的数据,存为RDD数据集,进行一些操作后分布式存储到hdfs中。


Spark前景

Spark如今已吸引了国内外各大公司的注意,如腾讯、淘宝、百度、亚马逊等公司均不同程度地使用了Spark来构建大数据分析应用,并应用到实际的生产环境中

在这里插入图片描述


Spark特点

Spark使用Scala语言进行实现,它是一种面向对象、函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集(Scala 提供一个称为 Actor 的并行模型,其中Actor通过它的收件箱来发送和接收非同步信息而不是共享数据,该方式被称为:Shared Nothing 模型)。

  1. 运行速度快:Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算。官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapReduce的10倍以上,如果数据从内存中读取,速度可以高达100多倍。
  2. 易用性好:Spark不仅支持Scala编写应用程序,而且支持Java、Python和R语言进行编写,特别是Scala是一种高效、可拓展的语言,能够用简洁的代码处理较为复杂的处理工作,也可以通过Spark Shell进行交互式编程。
  3. 通用性强:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件。Spark生态圈即BDAS(伯克利数据分析栈)包含了Spark Core、Spark SQL、Spark

    Streaming、MLLib和GraphX等组件,这些组件分别处理Spark

    Core提供内存计算框架、SparkStreaming的实时处理应用、Spark

    SQL的即席查询、MLlib或MLbase的机器学习和GraphX的图处理。
  4. 随处运行模式多样:Spark具有很强的适应性,可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源 能够读取HDFS、Cassandra、HBase、S3和Techyon为持久层读写原生数据,能够以Mesos、YARN和自身携带的Standalone作为资源管理器调度job,来完成Spark应用程序的计算。


Hadoop与Spark的对比

Hadoop存在如下一些缺点:

  • 表达能力有限
  • 磁盘IO开销大
  • 延迟高
  • 任务之间的衔接涉及IO开销
  • 在前一个任务执行完成之前,其他任务就无法开始,难以胜任复杂、多阶段的计算任务

而Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题相比于Hadoop MapReduce,Spark主要具有如下优点:

  • Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比Hadoop

    MapReduce更灵活
  • Spark提供了内存计算,可将中间结果放到内存中,对于迭代运算效率更高
  • Spark基于DAG的任务调度执行机制,要优于Hadoop MapReduce的迭代执行机制

    Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题
  • 使用Hadoop进行迭代计算非常耗资源
  • Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果作运算,避免了从磁盘中频繁读取数据

在这里插入图片描述

在这里插入图片描述


MapReduce与Spark对比


在这里插入图片描述


注意:


Spark没有存储功能,需要借助Hadoop的HDFS、HBase等完成数据的存储


Spark生态系统

Spark生态圈也称为BDAS(伯克利数据分析栈),是伯克利APMLab实验室打造的,力图在算法(Algorithms)、机器(Machines)、人(People)之间通过大规模集成来展现大数据应用的一个平台。伯克利AMPLab运用大数据、云计算、通信等各种资源以及各种灵活的技术方案,对海量不透明的数据进行甄别并转化为有用的信息,以供人们更好的理解世界。该生态圈已经涉及到机器学习、数据挖掘、数据库、信息检索、自然语言处理和语音识别等多个领域。

在这里插入图片描述


Spark的适用场景

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

  1. 复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时。
  2. 基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间。
  3. 基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间。

目前对以上三种场景需求都有比较成熟的处理框架,第一种情况可以用Hadoop的MapReduce来进行批量海量数据处理,第二种情况可以Impala进行交互式查询,对于第三中情况可以用Storm分布式处理框架处理实时流式数据。以上三者都是比较独立,各自一套维护成本比较高,而Spark的出现能够一站式平台满意以上需求。

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

  • Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小
  • 由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合
  • 数据量不是特别大,但是要求实时统计分析需求



版权声明:本文为weixin_46209889原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。