谷轮加速火花发动机简介

面筋加速火花发动机是一种经过优化的高性能发动机,可在 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。