Spark之【简介、特点、生态架构】

1、简介

\quad \quad Apache Spark是一个开源的、强大的、分布式的并行计算框架,是一个实现快速通用的集群计算平台,用于大规模数据处理的统一分析引擎。

  • 它是由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的MapReduce计算模型。

  • 设计理念 :改善 MAP REDUCE 的弱点: 交互式和迭代式 ,在集群多点内存中运行的分布式计算 ,容错数据集合,DAG

2、四大特性

Spark官网对于其特点也进行了说明

2.1 高效性

  • 与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。
  • Apache Spark使用最先进的DAG调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能。
    在这里插入图片描述

2.2 易用性

\quad \quad Spark支持Java、Python、R和Scala的API(开发接口),还支持超过80种高级算法,方便用户可以快速构建不同的应用。而且Spark还支持交互式的Python和Scala的shell,可以方便地在这些shell中使用Spark集群来验证解决问题的方法。

在这里插入图片描述

2.3 通用性

\quad \quad Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中使用。Spark框架不再是一个简单的框架,可以把spark理解成一个生态系统,它内部是包含了很多模块,基于不同的应用场景可以选择对应的模块去使用。
在这里插入图片描述

2.4 兼容性

\quad \quad Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。
在这里插入图片描述

3、生态架构

  • Spark已经发展称为包含多个子项目的集合,可将其理解为一个技术栈,可实现很多功能。
    在这里插入图片描述

3.1 Spark Core

\quad \quad Spark Core是Spark的核心功能实现,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的 API 定义。RDD表示分布在多个计算节点上可以并行操作的元素集合,是spark主要的编程抽象。具体如下:

  • SparkContext:通常而言,Driver Application的执行与输出都是通过SparkContext来完成的,在正式提交Application之前,首先需要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储能力、计算能力、缓存、测量系统、文件服务、Web服务等内容,应用程序开发者只需要使用SparkContext提供的API完成功能开发。SparkContext内置的DAGScheduler负责创建Job,将DAG中的RDD划分到不同的Stage,提交Stage等功能。内置的TaskScheduler负责资源的申请、任务的提交及请求集群对任务的调度等工作。

  • 存储体系:Spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地减少了磁盘I/O,提升了任务执行的效率,使得Spark适用于实时计算、流式计算等场景。此外,Spark还提供了以内存为中心的高容错的分布式文件系统Tachyon供用户进行选择。Tachyon能够为Spark提供可靠的内存级的文件共享服务。

  • 计算引擎:计算引擎由SparkContext中的DAGScheduler、RDD以及具体节点上的Executor负责执行的Map和Reduce任务组成。DAGScheduler和RDD虽然位于SparkContext内部,但是在任务正式提交与执行之前将Job中的RDD组织成有向无关图(简称DAG)、并对Stage进行划分决定了任务执行阶段任务的数量、迭代计算、shuffle等过程。

3.2 Spark Streaming

  • 是Spark用来对实时结构化数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应。比如生产环境中的网页服务器日志、网路服务中用户提交的状态更新组成的消息队列都是数据流

  • Spark Streaming支付kafka等和简单的tcp套接字等多种数据输入源。输入流接收器(Receiver)负责接入数据,是接入数据流的接口规范。DStream是Spark Streaming中所有数据流的抽象,DStream本质上由一系列连续的RDD组成

3.3 Spark SQL

  • 是 Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 或者HQL来查询数据。Spark SQL 支持多种数据源,比 如 Hive 表、Parquet 以及 JSON 等。还支持将SQL和传统RDD编程的数据操作方式相结合

  • Spark SQL的过程可以总结为:首先使用SQL语句解析器(SQLParser)将SQL转换为语法树,并且使用规则执行器(RuleExecutor)将一系列规则应用到语法树,最终生成物理执行计划并执行。规则执行器还包括语法分析器(Analyzer)和优化器(Optimizer)

3.4 Spark MLlib

  • 提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。

3.5 GraphX

  • 用来操作图的程序库,可以进行并行的图计算

猜你喜欢

转载自blog.csdn.net/weixin_45666566/article/details/112487508