spark是一个用于大规模数据处理的统一计算引擎。适用于各种各样原先需要多种不同的分布式平台处理的场景,包括批处理、迭代计算、交互式查询、流处理。通过统一的框架将各种处理流程整合到一起。
spark特性
- 快速性
spark通过使用先进的DAG调度器、查询优化器和物理执行引擎,可以高性能地进行批量及流式处理。使用逻辑回归算法进行迭代计算,spark比hadoop速度快100多倍。
- 简单易用
spark支持多种编程语言,比如Java、Scala、Python、R及SQL。
spark提供了超过80多个高级算子操作,可以很便捷地构建并行计算应用。
- 通用性
spark构建了一个完善的生态栈,将批量计算、交互式计算、流式计算、机器学习及图计算整合到一个统一的框架体系中。
- 处处运行
spark可以运行在standalone、YARN、Mesos、Kubernetes及EC2多种调度平台上。
另外,spark可以接入多种数据源,比如HDFS、Alluxio、HBase、Cassandra、Hive及本地文件。
spark生态栈
Spark Core
Spark Core实现了Spark的基本功能,包括任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的API定义。RDD表示分布在多个计算节点上并行操作的元素集合,是Spark的核心抽象模型。
Spark SQL
Spark SQL是Spark用来处理结构化数据的子框架。Spark SQL支持多种数据源,比如Hive表、Parquet及JSON等。Spark SQL可使用SQL或Hive的SQL方言(HQL)查询数据,还支持将SQL和RDD相互转换。
Spark Streaming
Spark Streaming是Spark提供的对实时数据进行流式计算的组件。Spark Streaming提供了操作数据流的API,同时还提供了高级别的容错性、吞吐量及可伸缩性。
MLlib
MLlib是一个提供常见机器学习(ML)功能的程序库。MLlib提供了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入及更底层的机器学习原语(包括通用的梯度下降优化算法)。
Graphx
Graphx是用来操作图(比如社交网络的朋友关系图)的程序库,可进行并行的图计算。Graphx扩展了RDD API,能用来创建一个顶点和边都包含任意属性的有向图。Graphx支持对图的各种操作(比如进行图分隔的subgraph和操作所有顶点的mapVertices),及一些常用算法(比如PageRank和三角计数)。
集群管理器
Spark设计为可高效地在一个计算节点到数千个计算节点之间伸缩计算,所以为了获取最大灵活性,spark支持在各种集群管理器上运行,包括Hadoop YARN、Apache Mesos及Spark自带的独立调度器等。
spark用户及用途
spark的使用者主要分为两大目标人群:数据分析师和工程师。这两大人群使用spark的典型用例不一致,大致分为两类:数据分析和数据处理。
数据分析
数据分析师就是主要负责分析数据并建模的人。他们具备SQL、统计、预测建模(机器学习)等方面技能,有一定使用Python、Matlab或R编程的能力。
Spark通过一系列组件支持数据分析任务。Spark shell提供python和scala接口来进行交互式数据分析。Spark SQL提供独立的SQL shell来使用SQL探索数据,也可以通过标准的Spark程序或Spark shell进行SQL查询。MLlib程序库进行机器学习和数据分析。Spark还支持调用R或Matlab外部程序。
数据处理
工程师就是使用Spark开发数据处理应用的软件开发者。他们具备软件工程概念(封装、接口设计及面向对象思想),能使用工程技术设计软件系统。
Spark为开发用于集群并行执行的程序提供了捷径。不需要开发者关注分布式问题、网络通信及程序容错性。为工程师提供足够的接口实现常见的任务及对应用监控、审查和性能调优。
spark简史
- 2009 ,Spark诞生于UCBerkeley的AMP实验室
- 2010 ,Spark正式对外开源
- 2012-10-15,Spark 0.6.0发布。
- 大范围的性能改进,增加了一些新特性,并对Standalone部署模式进行了简化
- 2013-02-27,Spark 0.7.0发布
- 增加了更多关键特性,例如:Python API、Spark Streaming的alpha版本等
- 2013-06-21,Spark接受进入Apache孵化器
- 2013-09-17,Spark 0.8.0发布
- 支持Scala2.9/YARN2.2/Standalone部署模式下调度的高可用性,shuffle优化等
- 2014-01-24,Spark 0.9.0发布
- 增加了GraphX,机器学习新特性,流式计算新特性,核心引擎优化(外部聚合、加强对YARN的支持)等
- 2014-05-26,Spark 1.0.0发布
- 增加了Spark SQL、MLlib、GraphX和Spark Streaming都增加了新特性并进行了优化。Spark核心引擎还增加了对安全YARN集群的支持
- 2014-09-03,Spark 1.1.0发布
- Spark核心API及Streaming,Python,SQL,GraphX和MLlib的bug修复
- 2014-12-10,Spark 1.2.0发布
- Spark核心API及Streaming,Python,SQL,GraphX和MLlib的bug修复
- 2015-03-06,Spark 1.3.0发布
- 该版本发布的最大亮点是新引入的DataFrame API,对于结构型的DataSet,它提供了更方便更强大的操作运算。。除了DataFrame之外,还值得关注的一点是Spark SQL成为了正式版本,这意味着它将更加的稳定,更加的全面。
- 2015-06-03,Spark 1.4.0发布
- 该版本将 R API 引入 Spark,同时提升了 Spark 的核心引擎和 MLlib ,以及 Spark Streaming 的可用性
- 2015-09-09,Spark 1.5.0发布
- Spark 1.5.0是1.x线上的第6个发行版。这个版本共处理了来自230+contributors和80+机构的1400+个patches。
- Spark 1.5的许多改变都是围绕在提升Spark的性能、可用性以及操作稳定性。
- Spark 1.5.0焦点在Tungsten项目,它主要是通过对低层次的组建进行优化从而提升Spark的性能。
- Spark 1.5版本为Streaming增加了operational特性,比如支持backpressure。另外比较重要的更新就是新增加了一些机器学习算法和工具,并扩展了Spark R的相关API。
- 2015-12-22,Spark 1.6.0发布
- 该版本含了超过1000个patches,在这里主要展示三个方面的主题:新的Dataset API,性能提升(读取Parquet 50%的性能提升,自动内存管理,streaming state management十倍的性能提升),以及大量新的机器学习和统计分析算法。
- 在Spark1.3.0引入DataFrame,它可以提供high-level functions让Spark更好地处理数据结构和计算。这让Catalyst optimizer 和Tungsten execution engine自动加速大数据分析。发布DataFrame之后开发者收到了很多反馈,其中一个主要的是大家反映缺乏编译时类型安全。为了解决这个问题,Spark采用新的Dataset API (DataFrame API的类型扩展)。Dataset API扩展DataFrame API支持静态类型和运行已经存在的Scala或Java语言的用户自定义函数。对比传统的RDD API,Dataset API提供更好的内存管理,特别是在长任务中有更好的性能提升。
- 2016-07-20,Spark 2.0.0发布
- 该版本主要更新APIs,支持SQL 2003,支持R UDF ,增强其性能。300个开发者贡献了2500补丁程序
- 2016-12-16,Spark 2.1.0发布
- 这是 2.x 版本线的第二个发行版。此发行版在为Structured Streaming进入生产环境做出了重大突破,Structured Streaming 现在支持了event time watermarks了并且支持Kafka0.10
- 此外,此版本更侧重于可用性,稳定性和优雅(polish),并解决了1200多个tickets
- 2017-07-01,Spark 2.2.0发布
- 这是 2.x 系列的第三个版本。此版本移除了 Structured Streaming 的实验标记(experimental tag),意味着已可以放心在线上使用。
- 该版本的更新内容主要针对的是系统的可用性、稳定性以及代码润色。包括:
- Core 和 Spark SQL 的 API 升级和性能、稳定性改进,比如支持从 Hive metastore 2.0/2.1 中读取数据;支持解析多行的 JSON 或 CSV 文件;移除对 Java 7 的支持;移除对 Hadoop 2.5 及更早版本的支持 等
- SparkR 针对现有的 Spark SQL 功能添加了更广泛的支持,比如 Structured Streaming 为 R 语言提供的 API ;R 语言支持完整的 Catalog API ;R 语言支持 DataFrame checkpointing 等
- 2018-02-23,Spark 2.3.0发布
- 这是 2.x 系列中的第四个版本。此版本增加了对 Structured Streaming 中的 Continuous Processing 以及全新的 Kubernetes Scheduler 后端的支持
- 其他主要更新包括新的 DataSource 和 Structured Streaming v2 API,以及一些 PySpark 性能增强。
- 此外,此版本继续改进项目的可用性、稳定性,并持续润色代码。
- now