Apache Spark(转)
来自:维基百科,自由的百科全书
Apache Spark是一个开源簇运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了内存内运算技术,能在数据尚未写入硬盘时即在内存内分析运算。Spark在内存内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。[1]Spark允许用户将数据加载至簇内存,并多次对其进行查询,非常适合用于机器学习算法。[2]
使用Spark需要搭配簇管理员和分布式存储系统。Spark支持独立模式(本地Spark簇)、Hadoop YARN或Apache Mesos的簇管理。[3] 在分布式存储方面,Spark可以和HDFS[4]、 Cassandra[5] 、OpenStack Swift和Amazon S3等接口搭载。 Spark也支持伪分布式(pseudo-distributed)本地模式,不过通常只用于开发或测试时以本机文件系统替换分布式存储系统。在这样的情况下,Spark仅在一台机器上使用每个CPU核心运行程序。
在2014年有超过465位贡献家投入Spark开发[6],让其成为Apache软件基金会以及巨量数据众多开源项目中最为活跃的项目。
目录
[隐藏]
历史[编辑]
Spark在2009年由Matei Zaharia在加州大学柏克莱分校AMPLab开创,2010年通过BSD许可协议开源发布。2013年,该项目被捐赠给Apache软件基金会并切换许可协议至Apache2.0。[7]。2014年2月,Spark成为Apache的顶级项目。2014年11月,Databricks团队使用Spark 刷新数据排序世界记录。[8]
项目构成要素[编辑]
Spark项目包含下列几项:
Spark核心和弹性分布式数据集(RDDs)[编辑]
Spark核心是整个项目的基础,提供了分布式任务调度,调度和基本的I/O功能。而其基础的程序抽象则称为弹性分布式数据集(RDDs),是一个可以并型操作、有容错机制的数据集合。 RDDs可以通过引用外部存储系统的数据集创建(例如:共享文件系统、HDFS、HBase或其他 Hadoop 数据格式的数据源)。或者是通过在现有RDDs的转换而创建(比如:map、filter、reduce、join等等)。
RDD抽象化是经由一个以Scala, Java, Python的语言集成API所呈现,简化了编程复杂性,应用程序操纵RDDs的方法类似于操纵本地端的数据集合。
Spark SQL[编辑]
Spark SQL在Spark核心上带出一种名为SchemaRDD的数据抽象化概念,提供结构化和半结构化数据相关的支持。Spark SQL提供了领域特定语言,可使用Scala、Java或Python来操纵SchemaRDDs。它还支持使用使用命令行界面和ODBC/JDBC服务器操作SQL语言。在Spark 1.3版本,SchemaRDD被重命名为DataFrame。
Spark Streaming[编辑]
Spark Streaming充分利用Spark核心的快速调度能力来运行流分析。它截取小批量的数据并对之运行RDD转换。这种设计使流分析可在同一个引擎内使用同一组为批量分析编写而撰写的应用程序代码。
MLlib[编辑]
MLlib是Spark上分布式机器学习框架。Spark分布式内存式的架构比Hadoop磁盘式的Apache Mahout快上10倍,扩充性甚至比Vowpal Wabbit要好。[9] MLlib可使用许多常见的机器学习和统计算法,简化大规模机器学习时间,其中包括:
- 汇总统计、相关性、分层抽样、假设检定、随机数据生成
- 分类与回归:支持矢量机、回归、线性回归、决策树、朴素贝叶斯
- 协同过滤:ALS
- 分群:k-平均算法
- 维度缩减:奇异值分解(SVD),主成分分析(PCA)
- 特征提取和转换:TF-IDF、Word2Vec、StandardScaler
- 最优化:随机梯度下降法(SGD)、L-BFGS
GraphX[编辑]
GraphX是Spark上的分布式图形处理框架。它提供了一组API,可用于表达图表计算并可以模拟Pregel抽象化。GraphX还对这种抽象化提供了优化运行。
GraphX最初为加州大学柏克莱分校AMPLab和Databricks的研究项目,后来捐赠给Spark项目。[10]
特色[编辑]
- Java、Scala、Python和R APIs。
- 可扩展至超过8000个结点。[11]
- 能够在内存内缓存数据集以进行交互式数据分析。
- Scala或Python中的交互式命令行接口可降低横向扩展数据探索的反应时间。
- Spark Streaming对即时数据流的处理具有可扩充性、高吞吐量、可容错性等特点。
- Spark SQL支持结构化和和关系式查询处理(SQL)。
- MLlib机器学习算法和Graphx图形处理算法的高级库。
参考资料[编辑]
- ^ Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion. Shark: SQL and Rich Analytics at Scale(PDF). June 2013.
- ^ Matei Zaharia. Spark: In-Memory Cluster Computing for Iterative and Interactive Applications. Invited Talk at NIPS 2011 Big Learning Workshop: Algorithms, Systems, and Tools for Learning at Scale.
- ^ Cluster Mode Overview - Spark 1.2.0 Documentation - Cluster Manager Types. apache.org. Apache Foundation. 2014-12-18 [2015-01-18].
- ^ Figure showing Spark in relation to other open-source Software projects including Hadoop
- ^ Doan, DuyHai. Re: cassandra + spark / pyspark. Cassandra User mailing list. 2014-09-10 [2014-11-21].
- ^ Open HUB Spark development activity
- ^ The Apache Software Foundation Announces Apache™ Spark™ as a Top-Level Project. apache.org. Apache Software Foundation. 27 February 2014 [4 March 2014].
- ^ Spark officially sets a new record in large-scale sorting
- ^ Sparks, Evan; Talwalkar, Ameet. Spark Meetup: MLbase, Distributed Machine Learning with Spark. slideshare.net. Spark User Meetup, San Francisco, California. 2013-08-06 [10 February 2014].
- ^ Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion. GraphX: Graph Processing in a Distributed Dataflow Framework (PDF). Oct 2014.
- ^ Apache Spark FAQ. apache.org. Apache Software Foundation.[5 December 2014].