Spark如何将字节码转换为机器码指令的运行时间转换?

在阅读了一些关于Whole State Code Generation的文章之后,spark会执行字节码优化以将查询计划转换为优化的执行计划。现在Spark如何将字节码转换为机器码指令的运行时间转换?

https://jaceklaskowski.gitbooks.io/mastering-apache-spark/spark-sql-whole-stage-codegen.html

我的下一个问题是,但仍然在做这些优化相关的字节码和所有以后,它仍然可能是合理的,因为这样做的这些字节码指令的机器代码指令的转换可能是一个可能的瓶颈由JIT单独在流程运行期间进行,并且为了进行此优化,JIT必须有足够的运行。

因此,spark是否会执行与优化字节码(这是whole stage code gen的结果)到机器码的动态/运行时转换有关的任何内容,或者是否依赖于JIT将这些字节码指令转换为机器码指令。因为如果它依赖于JIT,那么涉及到一定的不确定性。

回答:

spark会执行字节码优化以将查询计划转换为优化的执行计划。

Spark SQL does not do bytecode optimizations。

Spark SQL只是使用CollapseCodegenStages物理准备规则并最终将查询计划转换为single-method Java source code(即Janino compiles并生成字节码)。

因此,没有火花做好相关的优化代码的动态/运行时转换


JIT说到,任何WholeStageCodegenExecdoes此检查整个阶段的代码生成是否生成“太长生成的代码”或不可能高于spark.sql.codegen.hugeMethodLimit Spark SQL内部属性(默认情况下为8000并且是the value of HugeMethodLimit in the OpenJDK JVM settings)。

全阶段代码生成的单个编译Java函数的最大字节码大小。当编译函数超过此阈值时,将停用当前查询计划的此子树的全阶段代码生成器。默认值是8000,这是OpenJDK JVM实现中的一个限制。


有不支持CodegenSupport所以审查其doConsumedoProduce方法应显示时是否在所有的JIT可能在没有踢很多的物理运算符。

以上是 Spark如何将字节码转换为机器码指令的运行时间转换? 的全部内容, 来源链接: utcz.com/qa/260639.html

回到顶部