发布版本 - Amazon Athena
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

发布版本

适用于 Apache Spark 的 Amazon Athena 提供以下发行版本:

PySpark 引擎版本 3

PySpark 版本 3 包含 Apache Spark 版本 3.2.1。使用此版本,您可以在 Athena 控制台内笔记本中执行 Spark 代码。

Apache Spark 版本 3.5

Apache Spark 版本 3.5 基于 Amazon EMR 7.12,并打包了 Apache Spark 版本 3.5.6。使用此版本,您可以从 Amazon SageMaker AI 融通式合作开发工作室笔记本或您首选的兼容 Spark 客户端运行 Spark 代码。此版本添加了关键功能,旨在改善交互式工作负载的体验:

  • 安全 Spark Connect:将 Spark Connect 添加为经过身份验证和授权的 Amazon 端点。

  • 会话级成本归属:用户可以在 Amazon Cost Explorer 或成本和使用情况报告中跟踪每个交互式会话的成本。有关更多信息,请参阅 会话级成本归属

  • 高级调试功能:添加实时 Spark UI 和 Spark History Server 支持,用于调试来自 API 和笔记本的工作负载。有关更多信息,请参阅 访问 Spark UI

  • 未筛选访问支持:访问您拥有完整表权限的、受保护的 Amazon Glue Data Catalog 表。有关更多信息,请参阅 将 Lake Formation 与 Athena Spark 工作组搭配使用

Spark 默认属性

下表列出适用于 Athena SparkConnect 会话的 Spark 属性及其默认值。

Key 默认 值 说明

spark.app.id

<Athena SessionId>

此项不可修改。

spark.app.name

default

spark.driver.cores

4

驱动程序使用的核心数。此项在初次启动期间不可修改。

spark.driver.memory

10g

每个驱动程序使用的内存量。此项在初次启动期间不可修改。

spark.driver.memoryOverhead

6g

分配给在驱动程序上运行的 Python 工作负载和其他进程的内存开销量。此项在初次启动期间不可修改。

spark.cortex.driver.disk

64g

Spark 驱动程序磁盘。此项在初次启动期间不可修改。

spark.executor.cores

4

每个执行程序使用的核心数。此项在初次启动期间不可修改。

spark.executor.memory

10g

每个驱动程序使用的内存量。

spark.executor.memoryOverhead

6g

分配给在执行程序上运行的 Python 工作负载和其他进程的内存开销量。此项在初次启动期间不可修改。

spark.cortex.executor.disk

64g

Spark 执行程序磁盘。此项在初次启动期间不可修改。

spark.cortex.executor.architecture

AARCH_64

执行程序的架构。

spark.driver.extraJavaOptions

-Djava.net.preferIPv6Addresses=false -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Djdk.reflect.useDirectMethodHandle=false

Spark 驱动程序的额外 Java 选项。此项在初次启动期间不可修改。

spark.executor.extraJavaOptions

-Djava.net.preferIPv6Addresses=false -XX:+IgnoreUnrecognizedVMOptions --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.util.calendar=ALL-UNNAMED --add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED -Djdk.reflect.useDirectMethodHandle=false

Spark 执行程序的额外 Java 选项。此项在初次启动期间不可修改。

spark.executor.instances

1

要分配的 Spark 执行程序容器的数量。

spark.dynamicAllocation.enabled

TRUE

开启动态资源分配的选项。此选项可根据工作负载扩展或缩减在应用程序中注册的执行程序数量。

spark.dynamicAllocation.minExecutors

0

如果开启动态分配,则表示执行程序数量的下限。

spark.dynamicAllocation.maxExecutors

59

如果开启动态分配,则表示执行程序数量的上限。

spark.dynamicAllocation.initialExecutors

1

开启动态分配时要运行的初始执行程序数量。

spark.dynamicAllocation.executorIdleTimeout

60s

在 Spark 将其删除之前,执行程序可保持空闲状态的时间长度。这仅适用于开启动态分配的情况。

spark.dynamicAllocation.shuffleTracking.enabled

TRUE

启用 DRA 需要启用随机排序跟踪。

spark.dynamicAllocation.sustainedSchedulerBacklogTimeout

1s

超时:定义 Spark 调度器在触发向集群管理器发出启动新执行程序请求之前,必须观察持续积压待处理任务的时长。

spark.sql.catalogImplementation

hive

spark.hadoop.hive.metastore.client.factory.class

com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory

Amazon Glue 元存储实现类。

spark.hadoop.hive.metastore.glue.catalogid

<accountId>

Amazon Glue 目录账户 ID。

spark.sql.hive.metastore.sharedPrefixes

software.amazon.awssdk.services.dynamodb

属性指定一个以逗号分隔的包前缀列表,用于应通过 Application ClassLoader(而不是为 Hive Metastore 客户端代码创建的隔离 ClassLoader)加载的类。

spark.hadoop.fs.s3.impl

org.apache.hadoop.fs.s3a.S3AFileSystem

定义使用 S3A 的 S3 客户端实现。

spark.hadoop.fs.s3a.impl

org.apache.hadoop.fs.s3a.S3AFileSystem

定义 S3A 客户端(S3A)的实现。

spark.hadoop.fs.s3n.impl

org.apache.hadoop.fs.s3a.S3AFileSystem

定义使用 S3A 的本机 S3 客户端(S3N)实现。

spark.hadoop.fs.AbstractFileSystem.s3.impl

org.apache.hadoop.fs.s3a.S3A

spark.hadoop.fs.s3a.aws.credentials.provider

software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider

spark.hadoop.fs.s3.customAWSCredentialsProvider

com.amazonaws.auth.DefaultAWSCredentialsProviderChain

spark.hadoop.mapreduce.output.fs.optimized.committer.enabled

TRUE

向 Amazon S3 写入数据时,此属性可为 Spark 任务启用优化的提交协议。设置为 true 时,其可帮助 Spark 避免代价高昂的文件重命名操作,实现比默认 Hadoop 提交者更快、更可靠的原子写入。

spark.hadoop.fs.s3a.endpoint.region

<REGION>

此配置为通过 S3A 客户端访问的 Amazon S3 存储桶显式设置 Amazon 区域。

spark.hadoop.fs.s3.getObject.initialSocketTimeoutMilliseconds

2000

此项指定套接字连接超时(毫秒)。

spark.hadoop.fs.s3a.committer.magic.enabled

TRUE

此项启用 S3A Magic Committer:一种高性能但专属的提交协议,依赖于底层集群管理器对特殊路径的支持。

spark.hadoop.fs.s3a.committer.magic.track.commits.in.memory.enabled

TRUE

仅当启用 Magic Committer 时相关,其指定是否应在内存中跟踪任务提交的文件列表,而不是写入临时磁盘文件。

spark.hadoop.fs.s3a.committer.name

magicv2

此设置显式选择要使用的特定 S3A Output Committer 算法(例如,目录、分区或魔法)。通过指定名称,您可以选择管理临时数据、处理任务失败以及对目标 Amazon S3 路径执行最终原子提交的策略。

spark.hadoop.fs.s3.s3AccessGrants.enabled

FALSE

在通过 S3A/EMRFS 文件系统客户端访问 Amazon S3 数据时,支持 Amazon S3 访问权限管控的属性。

spark.hadoop.fs.s3.s3AccessGrants.fallbackToIAM

FALSE

启用 Amazon S3 访问权限管控后,此属性控制访问权限管控查询失败或未提供足够的权限时,Amazon S3 客户端是否应回退到传统 IAM 凭证。

spark.pyspark.driver.python

/usr/bin/python3.11

驱动程序的 Python 路径。

spark.pyspark.python

/usr/bin/python3.11

执行程序的 Python 路径。

spark.python.use.daemon

TRUE

此配置控制 Spark 是否在每个执行程序上使用 Python worker 守护进程。启用后(默认值为 true),执行程序将在任务之间保持 Python worker 处于活动状态,以避免为每个任务重复启动和初始化新 Python 解释器带来的开销,从而显著提升 Pyspark 应用程序的性能。

spark.sql.execution.arrow.pyspark.enabled

TRUE

允许使用 Apache Arrow 来优化 PySpark 中 JVM 和 Python 进程之间的数据传输。

spark.sql.execution.arrow.pyspark.fallback.enabled

TRUE

配置属性,控制使用 Apache Arrow 优化在 JVM 和 Python 之间传输数据发生错误时 Spark 的行为。

spark.sql.parquet.fs.optimized.committer.optimization-enabled

TRUE

配置属性,控制 Spark 在向某些文件系统(特别是 Amazon S3 等云存储系统)写入 Parquet 文件时是否使用优化的文件提交器。

spark.sql.parquet.output.committer.class

com.amazon.emr.committer.EmrOptimizedSparkSqlParquetOutputCommitter

Spark 配置属性,指定编写 Parquet 文件时要使用的 Hadoop OutputCommitter 的完全限定类名。

spark.resourceManager.cleanupExpiredHost

TRUE

此属性控制驱动程序是否主动清理与在已删除或已过期节点上运行的执行程序关联的 Spark 应用程序资源。

spark.blacklist.decommissioning.enabled

TRUE

使 Spark 的逻辑能够自动将集群管理器正在停用(正常关闭)的执行程序列入黑名单的属性。此项可防止调度器向即将退出的执行程序发送新任务,从而提高资源缩减期间的作业稳定性。

spark.blacklist.decommissioning.timeout

1h

Spark 在将任务从正在停用的执行程序成功迁出前等待的最长时间,超过此时间会将该主机列入黑名单。

spark.stage.attempt.ignoreOnDecommissionFetchFailure

TRUE

告知 Spark 如果从正在停用的执行程序读取随机排序数据时发生提取失败应宽松处理,不要让整个阶段的尝试失效。提取失败将被可恢复,并且 Spark 将从不同的位置重新提取数据(可能需要重新计算),在正常关闭期间优先确保作业完成而非严格执行错误处理。

spark.decommissioning.timeout.threshold

20

此属性通常在内部或特定的集群管理器设置中使用,用于定义 Spark 预计主机停用过程所花的最长总持续时间。如果实际停用时间超出此阈值,Spark 可能会采取激进措施来释放资源,例如将主机列入黑名单或请求强制终止。

spark.files.fetchFailure.unRegisterOutputOnHost

TRUE

当任务无法从特定主机获取随机排序或 RDD 数据时,将此项设置为 true 会指示 Spark 在该主机上取消注册与失败应用程序关联的所有输出块。这样可以防止后续任务尝试从不可靠的主机获取数据,迫使 Spark 重新计算其他位置所需的区块并提升工作稳健性,以应对间歇性网络问题。