0%

spark简介

spark简介

spark是一个快速、通用的大数据分析计算引擎,Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——**Job中间输出结果可以保存在内存中**,从而不再需要读写HDFS,减少了磁盘IO,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为,spark可用来构建大型的、低延迟的数据分析应用程序。

spark构成

spark生态圈包括Spark的任务调度、内存管理、容错机制等功能

  • Spark Core:Spark的基础核心功能,其他功能都是在该基础上进行扩展的
  • Spark SQL:Spark用来操作结构化数据的组件,支持通过SQL查询数据或者Hive SQL来查询数据,并且支持多数据源
  • Spark Streaming:Spark用于实时流处理的组件,Spark Streaming支持Kafka、Flume、ZeroMQ、HDFS等多种数据输入源,使用诸如map()、join()、window()等高级函数进行处理,并支持将处理后的最终结果存储到文件系统、数据库等
  • Spark MLib:Spark提供的用于机器学习的算法库,如分类、聚类、回归及协同过滤等算法,还包括模型评估及数据导入等。
  • Spark GraphX:Spark提供的分布式图处理框架,提供与图计算和图挖掘相关的接口,包括常用图计算的算法。

Spark 将内存数据抽象为弹性分布式数据集(resilient distributed dataset,RDD),可以理解为RDD是Spark分布式计算的数据结构,表示一个不可变、可分区、可并行操作、有容错机制的数据集合。RDD提供了transformations和actions两种类型的操作。transformations操作是得到一个新的RDD,如map、filter、groupByKey、flatMap、join、union等;actions操作是得到一个值或者一个计算结果,如reduce、collect、count、take、first、saveAsTestFile等。所有的transformations操作都是采用惰性策略,只有在actions类操作被提交时才会触发执行计算,而只将transformations类操作提交时是不会触发计算的。

而Spark Streaming则提供了一个叫做DStream(Discretized Stream)的高级抽象,DStream表示一个持续不断输入的数据流,一个DStream实际上是由一个RDD序列组成的,可由基于Kafka、HDFS、Flume、Socket等输入流创建。

Spark采用Master-Slave架构模式。Master对应集群中含有Master进程的节点,是Spark集群的主控节点;Slave是集群中含有Worker进程的节点,在集群模式下Worker是集群中任何可以运行Spark应用程序的节点,类似Yarn中的NodeManager节点,在基于Yarn的Spark集群模式Worker指的就是NodeManager节点,在单机模式下Worker负责管理本地节点资源,接收Master的命令进行状态汇报。

Spark整体架构中还包含了Driver、Executor、Client几个角色。Driver是应用程序逻辑执行起点,负责作业的解析、生成作业stage,并将作业调度到Executor上执行;Executor是Spark应用程序运行在Worker节点上的一个进程,该进程负责运行Task,并且负责将执行状态存储在内存或者磁盘上,在Yarn模式下,进程名为CoarseGrainedExecutorBackend;Client则是客户端进程,负责提交作业到Master

spark运行模式

Spark有五种运行模式

  • 本地单机模式:所有spark进程都运行在同一个JVM中。在该模式下可以通过local[n]来指定Master变量以设置并行级别,n表示线程数
  • 独立部署模式:使用Spark内置的任务调度框架,通过Spark://${masterIP}:${port}来指定连接Spark集群
  • 基于Yarn的集群模式:Spark运行在Yarn资源管理器上,基于Hadoop,由Yarn负责资源管理,Spark负责任务调度与计算
  • 基于Mesos的集群模式:运行在Mesos资源管理器上
  • 基于Amazon EC2的集群模式:在Amazon EC2云端上部署Spark环境