Spark优点、组件及与hadoop的异同

本文深入探讨了Apache Spark作为新一代分布式计算框架的优势,包括其相较于Hadoop MapReduce的高速性能,内存计算特性,以及在迭代计算、交互式计算和流计算领域的广泛应用。同时,文章也对比了Spark与Hadoop在计算模型、应用场景、延迟和易用性等方面的异同。

一 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), 是一个可以并行操作, 有容错的数据集合

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

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

  3. 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的异同

项目hadoopSpark
类型基础平台, 包含计算, 存储, 调度分布式计算工具
场景大规模数据集上的批处理迭代计算, 交互式计算, 流计算
延迟
易用性API 较为底层, 算法适应性差API 较为顶层, 方便使用
价格对机器要求低, 便宜对内存有要求, 相对较贵
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值