Spark最全详解(作用特点及架构原理应用)

Spark最全详解(作用特点及架构原理应用)-mikechen

Spark定义作用

Spark是由美国加州伯克利大学(UCBerkeley)实验室开发,基于内存计算的大数据并行计算框架,后续Spark加入Apache成为顶级项目。

Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎,设计用于大型分布式数据处理、数据中心或云计算。

 

Spark的特点

Spark主要有以下4大特点:

Spark最全详解(作用特点及架构原理应用)-mikechen

1.计算速度快

由于Spark是基于内存的分布式计算引擎,因此其运算效率很快,比如:Spark基于内存运算效率是Hadoop的100被以上,基于硬盘的运算奥效率也要快10倍以上。

2.易用性

Spark编程支持Java、Scala、Python和R等编程语言,并且拥有了80余种算法,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程。

3.通用性

Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算。

4.可扩展

Spark是专注于快速并行计算的引擎,而不是存储,与Apache Hadoop包括存储和计算不同,Spark对存储和计算进行解耦,简单的事情简单做。

这意味着你可以使用Spark来读取存储在各种数据源的数据,例如:Apache Hadoop、Apache Cassandra、Apache Hbase、MongoDB、Apache Hive、RDBMS等存储介质,并在内存中处理它们。

Spark最全详解(作用特点及架构原理应用)-mikechen

 

Spark VS Hadoop

Hadoop虽然已成为大数据技术的事实标准,但其本身还存在诸多缺陷,最主要的缺陷是其MapReduce计算模型延迟过高,无法胜任实时、快速计算的需求,因而适用于离线批处理的应用场景。

Spark在借鉴Hadoop MapReduce优点的同时,很好地解决了MapReduce所面临的问题,相比于MapReduce,Spark主要具有如下优点:

  • Spark的计算模式也属于MapReduce,但不局限于Map和Reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更灵活;
  • Spark提供了内存计算,中间结果直接放到内存中,带来了更高的迭代运算效率;
  • Spark基于DAG的任务调度执行机制,要优于MapReduce的迭代执行机制;

Spark 和Hadoop 的根本差异是多个作业之间的数据通信问题 : Spark 多个作业之间数据通信是基于内存,而 Hadoop 是基于磁盘

Spark将数据载入内存后,之后的迭代计算都可以直接使用内存中的中间结果作运算,避免了从磁盘中频繁读取数据。

但是 Spark 是基于内存的,所以在实际的生产环境中,由于内存的限制,可能会由于内存资源不够导致 Job 执行失败,此时,MapReduce 其实是一个更好的选择,所以 Spark并不能完全替代Hadoop。

 

Spark架构

Spark的架构如下图所示:

Spark最全详解(作用特点及架构原理应用)-mikechen

Spark核心组件

Spark主要包含Spark Core、Spark SQL等5大核心组件模块,具体作用如下:

1.Spark Core

Spark Core包含了Spark的基本功能:任务调度、内存管理、错误恢复、存储系统交互等模块,以及对弹性分布式数据集RDD的API定义。

2.Spark SQL

Spark SQL是操作结构化数据的程序包,通过Spark SQL可以使用SQL来查询多种数据源,比如:Hive表、Parquet以及JSON等。

3.Spark Streaming

Spark Streaming是实时流式数据计算的组件,它允许程序能够像普通RDD一样处理实时数据。

4.Spark MLlib

Spark包含了一个包含通用机器学习算法的库,称为MLlib,MLlib 不仅提供了模型评估、数据导入等额外的功能,还提供了一些更底层的机器学习原语。

5.GraphX

GrahpX是控制图、并行图操作和计算的一组算法和工具的集合。

 

Spark运行原理

Spark运行流程,如下图所示:

Spark最全详解(作用特点及架构原理应用)-mikechen

首先:为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控;

其次:资源管理器为Executor分配资源,并启动Executor进程;

再次:SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;

最后:Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源。

 

Spark应用场景

Spark的典型应用场景,主要分为如下3类:

  • 复杂的批量处理:偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;
  • 基于历史数据的交互式查询:通常的时间在数十秒到数十分钟之间;
  • 基于实时数据流的数据处理:通常在数百毫秒到数秒之间。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法