更新时间:2024-11-29 GMT+08:00

配置Spark Native引擎

配置场景

Spark Native引擎是通过使用向量化的C++加速库,实现对Spark算子性能加速的一种技术方案。传统的SparkSQL是基于行式数据,通过JVM的codegen来实现查询加速的,由于JVM对生成的java代码存在各种约束,比如方法长度,参数个数等,以及行式数据对内存带宽的利用率不足,因此存在性能提升空间。使用成熟的向量化的c++加速库后,数据采用向量化格式存在内存中,可以提高带宽利用率,并通过批量的列数处理获得加速效果。

通过开启Spark Native引擎特性,获得SparkSQL的性能加速。

使用约束

  • Scan算子当前支持的数据类型为:Boolean、Integer、Long、Float、Double、String、Date、Decimal
  • 支持的数据格式:parquet、orc
  • 支持的文件系统:obs、hdfs
  • 支持的机型: AMD64、ARM
  • 支持的场景:spark-sql模式

配置参数

  1. 在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-defaults.conf”配置文件中进行设置,修改如下参数:

    参数

    说明

    默认值

    spark.plugins

    Spark用到的插件,参数值设置为io.glutenproject.GlutenPlugin。

    说明:

    如果已经配置了spark.plugins,则可以将

    io.glutenproject.GlutenPlugin加到其中,用逗号","隔开。

    spark.memory.offHeap.enabled

    设置为true,Native加速需要用到JVM的off memory。

    false

    spark.memory.offHeap.size

    设置offHeap内存的大小,根据实际情况设置,初始可设置为1G。

    -1

    spark.yarn.dist.files

    此参数用于将libch.so和libjsig.so分发到所有节点上,以便所有节点上的executors使用spark.executorEnv.LD_PRELOAD参数提前加载。

    • x86平台上参数值设置为:{客户端安装目录}/Spark/spark/native/libch.so,{客户端安装目录}/JDK/jdk1.8.0_372/jre/lib/amd64/libjsig.so
    • arm平台上参数值设置为:{客户端安装目录}/Spark/spark/native/libch.so,{客户端安装目录}/JDK/jdk1.8.0_372/jre/lib/aarch64/libjsig.so
    说明:

    如果已经配置了spark.yarn.dist.files,则可以将上述参数加到其中,用逗号“,”隔开。

    此处需要与2中spark-env.sh中export LD_PRELOAD使用同一路径下的libch.so和libjsig.so。

    spark.executorEnv.LD_PRELOAD

    为executor设置环境变量LD_PRELOAD

    设置为$PWD/libch.so $PWD/libjsig.so

    说明:

    此参数用于executor提前加载libch.so和libjsig.so,如果已经配置了spark.executorEnv.LD_PRELOAD,则可以将上述参数加到其中,用空格隔开。

    spark.gluten.sql.columnar.libpath

    Native加速库的服务端路径,非镜像场景时该文件并不存在。设置为空

    集群中的spark安装目录下,例如: ${BIGDATA_HOME}/FusionInsight_Spark_xxx/install/FusionInsight-Spark-*/spark/native/libch.so

    spark.sql.orc.impl

    native:orc读取使用Spark原生的orc实现。

    hive:使用Hive的orc相关实现。

    设置为native

    hive

    spark.gluten.sql.columnar.scanOnly

    是否仅开启scan加速。

    设置为true,开启scanOnly模式。

    false

  1. 在Spark客户端的“{客户端安装目录}/Spark/spark/conf/spark-env.sh”配置文件中进行设置。
    • X86平台参数如下:

      export LD_PRELOAD="{客户端安装目录}/Spark/spark/native/libch.so {客户端安装目录}/JDK/jdk1.8.0_372/jre/lib/amd64/libjsig.so"

    • ARM平台参数如下:

      export LD_PRELOAD="{客户端安装目录}/Spark/spark/native/libch.so {客户端安装目录}/JDK/jdk1.8.0_372/jre/lib/aarch64/libjsig.so"

      注意:此处需要与表中spark.yarn.dist.files参数使用同一路径下的libch.so和libjsig.so,多个so间用空格隔开,前后需要加上双引号。