谷轮加速火花发动机简介
面筋加速火花发动机是一种经过优化的高性能发动机,可在 watsonx.data 上运行。 Spark 引擎使用 Gluten 将 SQL 执行卸载给 Velox,Velox 是一个开源执行引擎(用 C++ 实现),从而加速了 SparkSQL 的计算,降低了运行工作负载的成本。
Gluten 是一个本地引擎插件,旨在利用 Spark SQL 框架的高可扩展性和本地引擎的卓越性能,将本地引擎与 SparkSQL, 集成,从而加速 Spark SQL 和 DataFrame 工作负载。 它与 Apache Spark API 完全兼容,确保无需修改代码。
谷腾加速火花发动机的特点
-
支持文件格式 Apache Parquet 和 Apache Avro。
-
提高了表格扫描性能。
-
通过连接和聚合,加速大型 SQL 查询。
-
支持 Delta、Hudi、Iceberg 和 Hive 目录。
-
使用 UPDATE、DELETE、MERGE INTO、INSERT 和 CREATE TABLE AS SELECT 加快 Delta 和 Parquet 的写入速度,包括包含数千列的宽表。
-
默认情况下用 hash-joins 代替 sort-merge 连接。
限制
-
Amazon S3 对象存储支持 DAS 用于提交应用程序,但 ADLS 和 GCS 等其他对象存储需要传递明确的凭据。
-
较小的查询不会加速。
-
目录关联仅支持 s3 对象存储。
-
JVM 的回退
-
ANSI:Gluten 目前不支持 ANSI 模式。 如果启用 ANSI,Spark 计划的执行将始终回到 vanilla Spark。
-
FileSource 格式:目前,Gluten 仅支持 Parquet 文件格式,部分支持 ORC。 如果使用了其他格式,扫描运算符就会退回到 vanilla spark 格式。
-
-
不兼容行为
-
JSON 函数:Velox 在 JSON 数据中只支持双引号包围的字符串,不支持单引号。 如果使用单引号,Gluten 会给出错误的结果。
-
Parquet 读取配置:Gluten 支持
spark.files.ignoreCorruptFiles,默认为 false,如果为 true,行为与配置 false 相同。 Gluten 会忽略spark.sql.parquet.datetimeRebaseModeInRead,只返回写入 parquet 文件的内容。 它不考虑传统混合历(儒略格里高利历)和前驱格里高利历之间的区别。 香草火花的效果可能会有所不同。 -
Parquet 写入配置:Spark 有
spark.sql.parquet.datetimeRebaseModeInWrite配置,用于决定在为日期/时间戳写 Parquet 时,应使用传统混合(儒略历 + 格列高利历)日历还是 Proleptic Gregorian 日历。 如果要读取的 Parquet 是由 Spark 写入的,且该配置为 true,则 Velox 的 TableScan 在回读时会输出不同的结果。
-
-
溢出
OutOfMemoryException 在当前实现的溢出到磁盘功能中,当洗牌分区设置为大量分区时,仍有可能触发。 出现这种情况时,请尝试减少分区数量以消除 OOM。
-
CSV 读取
-
页眉选项应为 true。 现在我们只支持 DatasourceV1,即用户应设置 spark.sql.sources.useV1SourceList=csv。 不支持用户自定义读取选项,这将使 CSV 读取在大多数情况下退回到 vanilla Spark。 当用户指定的模式与文件模式不同时,CSV 读取也会退回到 vanilla Spark,并记录警告。
-
有关面筋限制的详细信息,请参阅 限制。
-
-
启用 FIPS 的环境不支持 Gluten。
麸质食品的最佳做法
-
Gluten 需要大量 OffHeap 内存,因为它集成了本地后端,即使用 Apache Arrow 的 Velox OffHeap 列格式,这对于大规模数据处理至关重要,且不会超出 JVM 堆限制。
-
如果不提供足够的 offHeap 内存,可能会导致潜在的 OOM(见 限制 )。 因此,默认情况下,75% 的执行器内存被设置为 offHeap。
-
用户可使用配置
ae.spark.offHeap.factor调整 offHeap, 的内存百分比,该配置接受(0-1)排他值,例如:0.75。 -
如果用户的工作负载有大量回退到基于 Java 的 spark 的情况,建议用户将其设置为较低值,即 < 0.5。(请参阅 " 限制 "),这样在回退到基于 Java 的火花执行时就不会发生 OOM。
-
建议将其设置为较高值,即 0.75 及以上,如果其工作负载可在 Gluten 上本地执行而无需回退。
默认设置值为 0.75。