Spark代码在集群上执行过程理解

spark代码是如何在集群上执行的?

总体上可以概述为4步:

  1. 写DataFrame/Dataset/SQL 代码(通过console或spark-submit提交代码)
  2. 如果代码有效,Spark将此转成逻辑计划(Logical Plan)
  3. Spark对计划中的一系列transform操作进行优化,并将逻辑计划转成物理计划(Physical Plan)
  4. Spark在集群上执行(基于RDD操作的)物理计划

整体上看,提交的代码要通过 Catalyst优化器。它会决定代码执不执行,以及具体执行的物理计划如何,最后代码执行完成并返回结果给用户。

Spark代码在集群上执行过程理解_第1张图片

 

逻辑计划Logical Planning

spark代码执行的第一个阶段就是获取代码,并转成逻辑计划logical plan。

逻辑计划只是将用户提交的一系列表达式转成最优化的视图,仅仅表示这一系列抽象的transformation变换,而不涉及执行器executors或驱动器driver。

这个过程是如何实现的呢?都包括哪些步骤?

首先,用户的代码会被转成未解析的逻辑计划。未解析的意思是,尽管你的代码是合法的,但可能代码中引用的表或字段名是不存在的。

接着,Spark会在分析器(analyzer)中使用catalog仓库对代码中的表和列进行解析。catalog里存放着所有表、DataFrame信息。如果发现表或列不存在,分析器会拒绝掉这个未解析的逻辑计划。

如果能成功解析,那么解析后的逻辑计划会被传入Catalyst 优化器。然后根据一系列的优化规则来优化逻辑计划,最后生成的是经过优化的逻辑计划。

Spark代码在集群上执行过程理解_第2张图片

 

物理计划Physical Planning

当成功创建了优化的逻辑计划后,Spark就开始了物理计划过程。

物理计划也被叫做一个Spark计划,指逻辑计划如何在集群上通过生成不同的物理执行策略和代价比较模型来选择最佳的执行策略。

物理执行计划会生成一系列的RDDs和变换。(这个过程类似于编译,把DataFrame/Datasets/SQL编程的变换操作编译成RDD的变换操作。)

Spark代码在集群上执行过程理解_第3张图片

 

执行Execution

当选择了一个物理执行计划后,Spark就开始在RDDs上跑代码了。

你可能感兴趣的:(spark使用,Spark)