Spark 简介


1 概述

Apache Spark是专为大规模数据处理而设计的快速通用计算引擎。Spark是HadoopMapReduce类的通用并行框架(加州大学伯克利分校的AMP实验室),这就是UCBerkeleyAMPlab,利用HadoopMapReduce的优势是什么;但MapReduce不同——Job的中间输出结果可以保存在内存中,因此不需要读写HDFS,因此,Spark在要求重复使用的MapReduce的算法中进行数据挖掘和机器学习。

Spark是一个类似于Hadoop的开放源码集群计算环境,但它们之间有一些区别,这两种有用的区别使得Spark能够更好地处理某些工作负载,换句话说,Spark除了能够提供交互查询之外,还允许优化迭代工作负载。Spark支持内存分布数据集。

Spark使用Scala语言实现,并使用Scala作为应用程序框架。不像Hadoop,Spark和Scala能够紧密集成,Scala可以很容易地操纵分布式数据集,就像处理本地的集合对象一样。

尽管创建Spark是为了支持分布式数据集上的迭代作业,但是它实际上是对Hadoop的一种补充,并可以并行运行在Hadoop文件系统中。叫做Mesos的第三方集群框架能够支持这种行为。由加州大学伯克利分校AMP实验室(Algorithms,Machines,andPeopleLab)开发的Spark可用于构建大型、低延迟数据分析应用。

2 基本原理

SparkStreaming:以Spark为Stream建立一个框架来处理Stream数据,其基本原理是将Stream数据分成几秒钟,然后以批量batch的方式来处理。SparkStreaming由Spark建造,其中一个原因是Spark低延迟执行引擎(100ms+),虽然与专用的流数据处理软件无法比较,但另一方面,还可以用于实时计算,与基于Record的其他处理框架(例如Storm)进行比较,对RDD部分依赖的狭义数据可以通过重新计算源数据来实现容错。此外,它还实现了与批量、实时数据处理逻辑及算法的兼容性。这对于一些特殊的应用很方便,需要历史数据与实时数据的联合分析。

3 Spark的特点

  • 更快的速度

内存计算下,Spark 比 Hadoop 快100倍。

  • 易用性

Spark 提供了80多个高级运算符。

  • 通用性

Spark 提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

  • 支持多种资源管理器

Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器

  • Spark生态系统
    • Shark:Shark基本上是以Spark的框架为基础提供HiveQL命令界面,与Hive类似,要想尽可能地与Hive兼容,Spark使用Hive的API实现查询参数和登录平台,PhysicalPlanexecution阶段以Spark替代了HadoopMapReduce。Shark通过配置Shark参数,自动将特定RDD缓存到存储器中,实现数据重用,从而加速特定数据集的检索。与此同时,Shark通过UDF用户自定义函数实现具体的数据分析学习算法,使SQL数据查询与运算分析相结合,以最大限度地提高RDD的重复使用。
    • SparkR:SparkR是一个R软件包,为Spark提供轻量级前端。SparkR提供一个分布式数据结构,包括解决R中的dataframe只能在单个机器上使用的瓶颈,并且与R中的dataframe一样支持很多操作,例如select、filter、aggregate等。(与dplyr包中的功能相似)这很好地解决了R的数据级瓶颈。SparkR还支持分布式机器学习算法,如MLib机器学习库。SparkR为Spark引入了R语言社区,吸引了一大批数据科学家开始在Spark平台上进行数据分析。