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



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

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

  1. 查询优化的催化剂
  2. 钨用于执行引擎?
  3. 贾尼诺编译器

这些是今天的标准吗?还有其他我没有提到的部分吗?

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

查询"flow"是:

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

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

最新更新