spark系列1:spark的前世今生

2021-03-30 20:16发布

1.1. Spark是什么

目标

了解 Spark 的历史和产生原因, 从而浅显的理解 Spark 的作用

Spark的历史

2009 年由加州大学伯克利分校 AMPLab 开创

2010 年通过BSD许可协议开源发布

2013 年捐赠给Apache软件基金会并切换开源协议到切换许可协议至 Apache2.0

2014 年 2 月,Spark 成为 Apache 的顶级项目

2014 年 11 月, Spark的母公司Databricks团队使用Spark刷新数据排序世界记录

Spark是什么

Apache Spark 是一个快速的, 多用途的集群计算系统, 相对于 Hadoop MapReduce 将中间结果保存在磁盘中, Spark 使用了内存保存中间结果, 能在数据尚未写入硬盘时在内存中进行运算.

Spark 只是一个计算框架, 不像 Hadoop 一样包含了分布式文件系统和完备的调度系统, 如果要使用 Spark, 需要搭载其它的文件系统和更成熟的调度系统

为什么会有Spark

Spark 产生之前, 已经有非常成熟的计算系统存在了, 例如 MapReduce, 这些计算系统提供了高层次的API, 把计算运行在集群中并提供容错能力, 从而实现分布式计算.

虽然这些框架提供了大量的对访问利用计算资源的抽象, 但是它们缺少了对利用分布式内存的抽象, 这些框架多个计算之间的数据复用就是将中间数据写到一个稳定的文件系统中(例如HDFS), 所以会产生数据的复制备份, 磁盘的I/O以及数据的序列化, 所以这些框架在遇到需要在多个计算之间复用中间结果的操作时会非常的不高效.

而这类操作是非常常见的, 例如迭代式计算, 交互式数据挖掘, 图计算等.

认识到这个问题后, 学术界的 AMPLab 提出了一个新的模型, 叫做 RDDs.

RDDs 是一个可以容错且并行的数据结构, 它可以让用户显式的将中间结果数据集保存在内中, 并且通过控制数据集的分区来达到数据存放处理最优化.

同时 RDDs 也提供了丰富的 API 来操作数据集.

后来 RDDs 被 AMPLab 在一个叫做 Spark 的框架中提供并开源.

总结

Spark 是Apache的开源框架

Spark 的母公司叫做 Databricks

Spark 是为了解决 MapReduce 等过去的计算系统无法在内存中保存中间结果的问题

Spark 的核心是 RDDs, RDDs 不仅是一种计算框架, 也是一种数据结构

1.2. Spark的特点(优点)

目标

理解 Spark 的特点, 从而理解为什么要使用 Spark

速度快

Spark 的在内存时的运行速度是 Hadoop MapReduce 的100倍

基于硬盘的运算速度大概是 Hadoop MapReduce 的10倍

Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理

易用

df = spark.read.json("logs.json")

df.where("age > 21") \

  .select("name.first") \

  .show()

Spark 支持 Java, Scala, Python, R, SQL 等多种语言的API.

Spark 支持超过80个高级运算符使得用户非常轻易的构建并行计算程序

Spark 可以使用基于 Scala, Python, R, SQL的 Shell 交互式查询.

通用

Spark 提供一个完整的技术栈, 包括 SQL执行, Dataset命令式API, 机器学习库MLlib, 图计算框架GraphX, 流计算SparkStreaming

用户可以在同一个应用中同时使用这些工具, 这一点是划时代的

兼容

Spark 可以运行在 Hadoop Yarn, Apache Mesos, Kubernets, Spark Standalone等集群中

Spark 可以访问 HBase, HDFS, Hive, Cassandra 在内的多种数据库

总结

支持 Java, Scala, Python 和 R 的 API

可扩展至超过 8K 个节点

能够在内存中缓存数据集, 以实现交互式数据分析

提供命令行窗口, 减少探索式的数据分析的反应时间

1.3. Spark组件

目标

理解 Spark 能做什么

理解 Spark 的学习路线

Spark 最核心的功能是 RDDs, RDDs 存在于 spark-core 这个包内, 这个包也是 Spark 最核心的包.

同时 Spark 在 spark-core 的上层提供了很多工具, 以便于适应不用类型的计算.

Spark-Core 和 弹性分布式数据集(RDDs)

Spark-Core 是整个 Spark 的基础, 提供了分布式任务调度和基本的 I/O 功能

Spark 的基础的程序抽象是弹性分布式数据集(RDDs), 是一个可以并行操作, 有容错的数据集合

RDDs 可以通过引用外部存储系统的数据集创建(如HDFS, HBase), 或者通过现有的 RDDs 转换得到

RDDs 抽象提供了 Java, Scala, Python 等语言的API

RDDs 简化了编程复杂性, 操作 RDDs 类似通过 Scala 或者 Java8 的 Streaming 操作本地数据集合

Spark SQL

Spark SQL 在 spark-core 基础之上带出了一个名为 DataSet 和 DataFrame 的数据抽象化的概念

Spark SQL 提供了在 Dataset 和 DataFrame 之上执行 SQL 的能力

Spark SQL 提供了 DSL, 可以通过 Scala, Java, Python 等语言操作 DataSet 和 DataFrame

它还支持使用 JDBC/ODBC 服务器操作 SQL 语言

Spark Streaming

Spark Streaming 充分利用 spark-core 的快速调度能力来运行流分析

它截取小批量的数据并可以对之运行 RDD Transformation

它提供了在同一个程序中同时使用流分析和批量分析的能力

MLlib

MLlib 是 Spark 上分布式机器学习的框架. Spark分布式内存的架构 比 Hadoop磁盘式 的 Apache Mahout 快上 10 倍, 扩展性也非常优良

MLlib 可以使用许多常见的机器学习和统计算法, 简化大规模机器学习

汇总统计, 相关性, 分层抽样, 假设检定, 随即数据生成

支持向量机, 回归, 线性回归, 逻辑回归, 决策树, 朴素贝叶斯

协同过滤, ALS

K-means

SVD奇异值分解, PCA主成分分析

TF-IDF, Word2Vec, StandardScaler

SGD随机梯度下降, L-BFGS

GraphX

GraphX 是分布式图计算框架, 提供了一组可以表达图计算的 API, GraphX 还对这种抽象化提供了优化运行

总结

Spark 提供了 批处理(RDDs), 结构化查询(DataFrame), 流计算(SparkStreaming), 机器学习(MLlib), 图计算(GraphX) 等组件

这些组件均是依托于通用的计算引擎 RDDs 而构建出的, 所以 spark-core 的 RDDs 是整个 Spark 的基础

1.4. Spark和Hadoop的异同

Hadoop

Spark

类型

基础平台, 包含计算, 存储, 调度

分布式计算工具

场景

大规模数据集上的批处理

迭代计算, 交互式计算, 流计算

延迟

易用性

API 较为底层, 算法适应性差

API 较为顶层, 方便使用

价格

对机器要求低, 便宜

对内存有要求, 相对较贵

————————————————

作者:涤生手记

链接:https://blog.csdn.net/qq_26442553/article/details/114818712?spm=1001.2014.3001.5502

来源:CSDN

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。