问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Spark 架构原理

创作时间:
作者:
@小白创作中心

Spark 架构原理

引用
1
来源
1.
https://geek-docs.com/spark/spark-tutorial/spark-architecture-principle.html

Apache Spark是一种快速、通用的集群计算系统,它通过基于DAG的任务调度和内存计算策略,提供了比传统MapReduce更高的处理速度和更灵活的编程模型。本文将深入探讨Spark的核心架构原理,包括其计算阶段划分、作业管理和执行过程,并与MapReduce进行对比分析。

Spark的计算阶段

与MapReduce相比,Spark的计算框架更加富有弹性和灵活性。MapReduce将一个应用的计算分为严格的Map和Reduce两个阶段,而Spark可以根据应用的复杂程度,将其分割成更多的计算阶段(stage)。这些计算阶段组成一个有向无环图(DAG),Spark任务调度器可以根据DAG的依赖关系执行计算阶段。

例如,在机器学习算法中,某些算法可能需要进行大量的迭代计算,产生数万个计算阶段。在Spark中,这些计算阶段可以在一个应用中处理完成,而不是像MapReduce那样需要启动数万个应用,因此极大地提高了运行效率。

上图描述了一个典型的Spark运行DAG的不同阶段。整个应用被切分成3个阶段,阶段3需要依赖阶段1和阶段2,阶段1和阶段2互不依赖。Spark在执行调度的时候,先执行阶段1和阶段2,完成以后,再执行阶段3。

Spark的作业管理

Spark中的RDD函数分为两种:转换函数和action函数。转换函数调用后得到的还是一个RDD,而action函数调用后不再返回RDD。例如,count()函数返回RDD中数据的元素个数,saveAsTextFile(path)将RDD数据存储到指定路径下。

DAGScheduler在遇到shuffle时会生成一个计算阶段,在遇到action函数时会生成一个作业(job)。RDD中的每个数据分片,Spark都会创建一个计算任务去处理,所以一个计算阶段会包含很多个计算任务(task)。

Spark的执行过程

Spark支持多种部署方案,包括Standalone、Yarn、Mesos和Kubernetes等。其核心执行流程如下:

  1. Spark应用程序启动在自己的JVM进程里,即Driver进程,启动后调用SparkContext初始化执行配置和输入数据。
  2. SparkContext启动DAGScheduler构造执行的DAG图,切分成最小的执行单位也就是计算任务。
  3. Driver向Cluster Manager请求计算资源,用于DAG的分布式计算。
  4. Cluster Manager收到请求后,将Driver的主机地址等信息通知给集群的所有计算节点Worker。
  5. Worker收到信息后,根据Driver的主机地址,跟Driver通信并注册,然后根据自己的空闲资源向Driver通报自己可以领用的任务数。
  6. Driver根据DAG图开始向注册的Worker分配任务。
  7. Worker收到任务后,启动Executor进程开始执行任务。Executor先检查自己是否有Driver的执行代码,如果没有,从Driver下载执行代码,通过Java反射加载后开始执行。

总结

Spark具有三个主要特性:

  1. RDD的编程模型更简单
  2. DAG切分的多阶段计算过程更快速
  3. 使用内存存储中间计算结果更高效

这些特性使得Spark相对Hadoop MapReduce可以有更快的执行速度,以及更简单的编程实现。Spark的出现和流行,得益于内存容量和成本的提升,以及机器学习等复杂计算需求的增加,这些因素共同推动了Spark成为大数据处理领域的主流框架。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号