Spark的全阶段Java代码生成器模块之间的关系是什么

时间:2018-01-24 13:20:46

标签: apache-spark apache-spark-sql

我正在探索Spark的全阶段Java代码生成功能,并注意到那里有几个组件。有一个执行引擎和一个编译器。

您能澄清所有组件之间的关系吗?我认识到的运动部件是:

  1. 查询优化的催化剂
  2. Tungsten执行引擎?
  3. Janino编译器
  4. 这些是今天的标准吗?我还没有提到其他任何部分吗?

    Spark与这些组件之间的执行流程以及它们之间的组件是什么?

1 个答案:

答案 0 :(得分:3)

查询"流程"是:

  • 用户创建一些数据集 - 现在它只有logicalPlan
  • 在行动评估期间,Spark使用Analyzer和Catalyst进行树操作
  • 接下来,Spark使用Catalyst来优化analyzePlan,批量运行优化规则,直到计划为“稳定”。或者我们有最大的迭代次数。
  • 在物理规划期间,Spark使用Janino编译标记为" WholeStageCodegen"的所有步骤(阶段)。在优化期间。请注意,编译是Tungsten Project的一部分,如here所述。该项目的其他部分是例如内存中数据的新二进制表示
  • 最后,Spark执行引擎执行生成的代码。

请注意"催化剂"是作为一个树操作框架创建的,现在我们经常说" Catalyst"对于整个优化器。此外,Tungsten只是一个开发了一些功能的项目,但现在我们说使用Tungsten功能的执行引擎称为Tungsten