随着 SSD 的广泛应用及网卡性能的显著提升,Spark 引擎的性能瓶颈更多由传统认知的 IO 转变为以 CPU 为主的计算资源。而围绕 JVM 的 CPU 优化方案(如 Codegen )存在诸多约束,如字节码长度、参数个数等存在限制,开发者也很难在 JVM 上利用现代 CPU 的一些特性。
Spark Native 引擎在 Spark 物理计划进行转换,使用 C++ 实现的向量化加速库执行计算,并将执行完的数据以列式方式返回,提升内存及带宽利用效率,进而突破性能瓶颈,可以使 Spark 作业效率得到有效的提升。
使用限制
Spark Native 引擎目前存在使用场景限制,在限制场景时将 Spark Native引擎会在对应的 Stage 进行 fallback,回退到原生 Spark 引擎进行执行,由于 fallback 需要进行必要的数据转换,fallback 次数过多,可能会导致总体运行时间比原生 Spark 引擎更慢。
请您提前了解 Spark Native 引擎部分主要的使用限制:
支持 Parquet 数据格式,ORC 支持暂不完善,其他数据格式暂不支持。
暂不支持 Iceberg、Hudi 等湖格式。
暂不支持 ANSI 模式。
暂不支持 Date、Timestamp、Decimal、NaN 数据类型。
暂不支持动态分区写入。
暂不支持原生 Spark 的 columnar reading。
配置方式
注意:
Spark Native 引擎目前仍在测试阶段,您可以通过 EMR- V3.6.1(Beta)版本使用该特性进行测试,不建议用于生产作业。
参数 | 说明 |
spark.plugins | Spark 用到的插件,参数值设置为 io.glutenproject.GlutenPlugin(如果已经配置了 spark.plugins,则可以将 io.glutenproject.GlutenPlugin 加到其中,用逗号","隔开) |
spark.memory.offHeap.enabled | 设置为 true,Native 加速需要用到 JVM 的 off memory |
spark.memory.offHeap.size | 设置 offHeap 内存的大小,根据实际情况设置,初始可设置为1G |
spark.shuffle.manager | gluten 使用的列式 shuffle manager, 参数值设置为:org.apache.spark.shuffle.sort.ColumnarShuffleManager |
spark.driver.extraClassPath | Spark 用到的 gluten native jar,jar 包默认路径在 /usr/local/service/spark/gluten 下 |
spark.executor.extraClassPath | Spark 用到的 gluten native jar,jar 包默认路径在 /usr/local/service/spark/gluten 下 |
spark.executorEnv.LIBHDFS3_CONF | 集成的 HDFS 集群配置文件的路径,默认在/usr/local/service/hadoop/etc/hadoop/hdfs-site.xml |