配置Spark Native引擎
本章节仅适用于MRS 3.3.0及之后版本。
配置场景
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模式
配置参数
- 在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
- 在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间用空格隔开,前后需要加上双引号。
- X86平台参数如下: