Apache Spark
Apache Spark是一个开源集群运算框架,最初是由加州大学柏克莱分校AMPLab所开发。相对于Hadoop的MapReduce会在运行完工作后将中介数据存放到磁盘中,Spark使用了内存内运算技术,能在数据尚未写入硬盘时即在内存内分析运算。Spark在内存内运行程序的运算速度能做到比Hadoop MapReduce的运算速度快上100倍,即便是运行程序于硬盘时,Spark也能快上10倍速度。[2]Spark允许用户将数据加载至集群内存,并多次对其进行查找,非常适合用于机器学习算法。[3]
![]() | |
开发者 | Apache软件基金会, 加州大学柏克莱分校AMPLab, Databricks |
---|---|
当前版本 |
|
源代码库 | |
编程语言 | Scala, Java, Python |
操作系统 | Linux, Mac OS, Microsoft Windows |
类型 | 数据分析, 机器学习算法 |
许可协议 | Apache授权条款 2.0 |
网站 | spark |
使用Spark需要搭配集群管理员和分布式保存系统。Spark支持独立模式(本地Spark集群)、Hadoop YARN或Apache Mesos的集群管理。[4] 在分布式保存方面,Spark可以和 Alluxio、HDFS[5]、 Cassandra[6] 、OpenStack Swift和Amazon S3等接口搭配。 Spark也支持伪分布式(pseudo-distributed)本地模式,不过通常只用于开发或测试时以本机文件系统取代分布式保存系统。在这样的情况下,Spark仅在一台机器上使用每个CPU内核运行进程。
在2014年有超过465位贡献者投入Spark开发[7],让其成为Apache软件基金会以及巨量数据众多开源项目中最为活跃的项目。
历史
Spark在2009年由Matei Zaharia在加州大学柏克莱分校AMPLab开创,2010年通过BSD授权条款开源发布。2013年,该项目被捐赠给Apache软件基金会并切换授权条款至Apache2.0。[8]。2014年2月,Spark成为Apache的顶级项目。2014年11月,Databricks团队使用Spark 刷新数据排序世界记录。[9]
项目构成要素
Spark项目包含下列几项:
Spark内核和弹性分布式数据集(RDDs)
Spark内核是整个项目的基础,提供了分布式任务调度,调度和基本的I/O功能。而其基础的进程抽象则称为弹性分布式数据集(RDDs),是一个可以并行操作、有容错机制的数据集合。 RDDs可以通过引用外部存储系统的数据集创建(例如:共享文档系统、HDFS、HBase或其他 Hadoop 数据格式的数据源)。或者是通过在现有RDDs的转换而创建(比如:map、filter、reduce、join等等)。
RDD抽象化是经由一个以Scala、Java、Python的语言集成API所呈现,简化了编程复杂性,应用进程操纵RDDs的方法类似于操纵本地端的数据集合。
以 RDD 为中心的函数式编程的一个典型示例是以下 Scala 进程,它计算一组文本文档中出现的所有单词的频率并打印最常见的单词。 每个 map、flatMap(map 的变体)和 reduceByKey 都采用匿名函数对单个数据项(或一对项)运行简单操作,并应用其参数将 RDD 转换为新的 RDD。[10][11]
val conf = new SparkConf().setAppName("wiki_test")
val sc = new SparkContext(conf)
val data = sc.textFile("/path/to/somedir")
val tokens = data.flatMap(_.split(" "))
val wordFreq = tokens.map((_, 1)).reduceByKey(_ + _)
wordFreq.sortBy(s => -s._2).map(x => (x._2, x._1)).top(10)
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要好。[12] MLlib可使用许多常见的机器学习和统计算法,简化大规模机器学习时间,其中包括:
特色
- Java、Scala、Python和R APIs。
- 可扩展至超过8000个结点。[14]
- 能够在内存内缓存数据集以进行交互式数据分析。
- Scala或Python中的交互式命令行接口可降低横向扩展数据探索的反应时间。
- Spark Streaming对即时数据串流的处理具有可扩充性、高吞吐量、可容错性等特点。
- Spark SQL支持结构化和关联式查找处理(SQL)。
- MLlib机器学习算法和Graphx图形处理算法的高端函数库。
参考数据
- . 2024年2月15日 [2024年3月19日].
- Xin, Reynold; Rosen, Josh; Zaharia, Matei; Franklin, Michael; Shenker, Scott; Stoica, Ion. (PDF). June 2013 [2015-05-30]. (原始内容存档 (PDF)于2017-08-09).
|conference=
被忽略 (帮助) - Matei Zaharia. . Invited Talk at NIPS 2011 Big Learning Workshop: Algorithms, Systems, and Tools for Learning at Scale. [2015-05-30]. (原始内容存档于2015-11-13).
- . apache.org. Apache Foundation. 2014-12-18 [2015-01-18]. (原始内容存档于2015-01-19).
- . [2015-05-30]. (原始内容存档于2015-03-24).
- Doan, DuyHai. . Cassandra User (邮件列表). 2014-09-10 [2014-11-21]. (原始内容存档于2015-05-30).
- . [2015-05-30]. (原始内容存档于2014-12-07).
- . apache.org. Apache Software Foundation. 27 February 2014 [4 March 2014]. (原始内容存档于2015-03-17).
- . [2015-05-30]. (原始内容存档于2015-05-15).
- Frank Kane. . Packt. 2017 [2021-11-09]. ISBN 978-1787287945. (原始内容存档于2021-11-09).
- , .NET Platform, 2020-09-14 [2020-09-14], (原始内容存档于2022-04-29)
- Sparks, Evan; Talwalkar, Ameet. . slideshare.net. Spark User Meetup, San Francisco, California. 2013-08-06 [10 February 2014]. (原始内容存档于2015-06-26).
- Gonzalez, Joseph; Xin, Reynold; Dave, Ankur; Crankshaw, Daniel; Franklin, Michael; Stoica, Ion. (PDF). Oct 2014 [2015-05-30]. (原始内容存档 (PDF)于2014-12-07).
|conference=
被忽略 (帮助) - . apache.org. Apache Software Foundation. [5 December 2014]. (原始内容存档于2015-05-20).
外部链接
- 官方网站(英文)
- Spark SQL (页面存档备份,存于)
- Spark Streaming (页面存档备份,存于)
- MLlib机器学习 (页面存档备份,存于)
- GraphX 图形处理 (页面存档备份,存于)