【精通Spark系列】一文搞懂Spark的运行架构,文末附带大数据Spark的学习路线

2022-01-04 13:43:29 浏览数 (1)

1.为什么会有Spark

在开始讲Spark运行的整体架构之前,先来讲讲为什么会有Spark?这个框架被设计出来是要解决什么问题的?

Mapreduce是离线大数据处理时经常使用的一种计算模型,但是也有着较多的缺点,例如不适合交互式计算,不适合迭代计算。

比如说,我们进行一个数据计算,流程如下图,这个使用使用MapReduce的话,每个节点可能都要使用一个Map还有一个reduce去表示,那MR1跟MR2之间的结果要怎么传递?就要把结果放在HDFS分布式文件中存储,这样的话带来的问题就是耗时费内存,开销大。

而spark在每个计算节点中是可以通过内存来传递结果的,而且提供了更好的上层API,相比之下Spark就具有了和明显的优势。Spark提供了多种算子做计算,支持多种语言。虽然spark本身没有提供类似于HDFS的分布式文件系统,但是他可以和hadoop生态的众多框架整合,可以访问多种数据库,包括redis都可以整合。

2.Spark的运行架构以及流程

Spark运行的基本流程

由上图,spark在运行的时候一般有如下流程

  1. 由Driver创建一个SparkContext进行资源申请,任务分配与监控
  2. 资源管理器给Executor分配资源,申请完毕在worker中启动Executor进程
  3. SparkContext根据RDD的依赖关系生产DAG图
  4. DAG图由DAGScheduler解析成Stage,之后把一个个TaskSet提交给底层调度器TaskScheduler处理
  5. Executor向Sparkcontext申请Task,TaskScheduler将Task发给Executor运行并提供程序代码
  6. 运行完毕后写入数据并释放资源

涉及到的基本概念

对于Spark运行的流程介绍中涉及到了一些Spark基本概念与名词,下面进行解释

  • Driver:该进程调用Spark程序的main方法,并启动SparkContext
  • Executor:作为一个进程运行在工作节点WorkerNode,负责运行Task
  • RDD:弹性分布式数据集,是分布式内存的抽象概念,后续文章会大篇幅介绍到
  • Task:是运行在Excutor上的工作单元
  • Job:一个Job包含了多个RDD以及作用于对于RDD上的各种操作。
  • Stage:是Job调度的基本单位,一个Job分成多组Task。每组Task被称为Stage,或者称为TaskSet。
  • DAG:有向无环图,主要反映RDD之间的依赖关系
  • Master:负责管理集群与节点,不参与到计算
  • Worker:该进程是一个守护进程,主要负责和外部集群工具打交道,申请或者释放集群资源。
  • Client:用户进行程序提交的入口

3.Spark的组成

Spark主要由五大部分组成,这五大部分的内容结构归结起来就可以说是学习Spark的基本路线了,Spark最核心的功能是RDDs,而RDDs就存在于spark-core这个包内,这个包也是spark最核心的部分,提供给了多种上层API,用于不同场景下的计算。

  • Spark Core:

Spark-Core是整个Spark的基础。

包含Spark的基本功能,包含任务调度,内存管理,容错机制等,内部定义了RDDs(弹性分布式数据集),提供了很多APIs来创建和操作这些RDDs。为其他组件提供底层的服务。

  • Spark SQL:

Spark SQL在spark-core的基础之上又推出一个DataSet与DataFrame的数据抽象化概念。提供了在DataSet与DataFrame之上执行SQL的能力。

Spark SQL处理结构化数据的库,就像Hive SQL,Mysql一样,企业中用来做报表统计。

  • Spark Streaming:

Spark streaming充分利用了spark-core的快速调度能力来进行流发计算与分析。是实时数据流处理组件,类似Storm。Spark Streaming提供了API来操作实时流数据。企业中用来从可以Kafka接收数据做实时统计。

  • MLlib:

MLlib是Spark上分布式机器学习的框架,是一个包含通用机器学习功能的包,Machine learning lib包含分类,聚类,回归等,还包括模型评估和数据导入。MLlib提供的上面这些方法,都支持集群上的横向扩展。

  • Graphx:

Graphx是分布式图计算框架。是用来处理图的库(例如,社交网络图),并进行图的并行计算。像Spark Streaming,Spark SQL一样,它也继承了RDD API。它提供了各种图的操作,和常用的图算法,例如PangeRank算法。

Spark提供了全方位的软件栈,只要掌握Spark一门编程语言就可以编写不同应用场景的应用程序(批处理,流计算,图计算等)。Spark主要用来代替Hadoop的MapReduce部分。

4.总结

到这里我们就完成了集群的搭建与第一个小案例的运行,如果操作过程中遇到问题可以私信我,博主会尽力帮你解答

0 人点赞