一 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 不仅是一种计算框架, 也是一种数据结构
三 Spark的特点(优点)
速度快
-
Spark 的在内存时的运行速度是 Hadoop MapReduce 的100倍
-
基于硬盘的运算速度大概是 Hadoop MapReduce 的10倍
-
Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理
易用
-
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 个节点 能够在内存中缓存数据集, 以实现交互式数据分析 提供命令行窗口, 减少探索式的数据分析的反应时间
四 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
-
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 的基础
五 Spark和Hadoop的异同
项目 | hadoop | Spark |
---|---|---|
类型 | 基础平台, 包含计算, 存储, 调度 | 分布式计算工具 |
场景 | 大规模数据集上的批处理 | 迭代计算, 交互式计算, 流计算 |
延迟 | 大 | 小 |
易用性 | API 较为底层, 算法适应性差 | API 较为顶层, 方便使用 |
价格 | 对机器要求低, 便宜 | 对内存有要求, 相对较贵 |