使用 S3 Select Pushdown 搭配 Presto 提高性能 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 S3 Select Pushdown 搭配 Presto 提高性能

使用 Amazon EMR 发行版 5.18.0 及更高版本,您可以将 S3 Select Pushdown 与 Presto on Amazon EMR 搭配使用。此功能允许 Presto 将投影操作(例如,SELECT)和谓词操作(例如,WHERE)的计算工作“下推”至 Amazon S3。这允许查询仅从 Amazon S3 中检索所需数据,从而可以提高性能并减少某些应用程序在 Amazon EMR 和 Amazon S3 之间传输的数据量。

S3 Select Pushdown 是否适合我的应用程序?

建议您分别在使用和不使用 S3 Select Pushdown 的情况下对您的应用程序进行基准检验,以查看其是否适用于您的应用程序。

使用以下准则来确定您的应用程序是否为使用 S3 Select 的候选项:

  • 您的查询将筛选掉原始数据集的一半以上的数据。

  • 您的查询筛选谓词使用具有 Presto 和 S3 Select 支持的数据类型的列。S3 Select Pushdown 不支持时间戳、实数和双精度数据类型。建议对数值数据使用十进制数据类型。有关 S3 Select 支持的数据类型的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的数据类型

  • 您在 Amazon S3 和 Amazon EMR 集群之间的网络连接具有良好的传输速度和可用带宽。Amazon S3 不压缩 HTTP 响应,因此响应大小可能会根据压缩的输入文件而增大。

注意事项和限制

  • 仅支持以 CSV 格式存储的对象。对象可以解压缩,也可以选择使用 gzip 或 bzip2 压缩。

  • 不支持 AllowQuotedRecordDelimiters 属性。如果指定该属性,则查询将失败。

  • 使用客户提供的加密密钥进行的 Amazon S3 服务器端加密(SSE-C)与客户端加密都不受支持。

  • S3 Select Pushdown 不能替代使用列式或压缩文件格式(如 ORC 或 Parquet)。

启用 S3 Select Pushdown with PrestoDB 或 Trino

要在 Amazon EMR 上启用 PrestoDB 的 S3 Select Pushdown,请使用 presto-connector-hive 配置分类以将 hive.s3select-pushdown.enabled 设置为 true,如以下示例所示。有关更多信息,请参阅配置应用程序。还必须设置 hive.s3select-pushdown.max-connections 值。对于大部分应用程序,500 的默认设置应该能满足需求。有关更多信息,请参阅下面的 了解和调整 hive.s3select-pushdown.max-connections

对于 EMR 版本 6.1.0 - 6.3.0 或更高版本上的 PrestoSQL,只需将以下示例中的 presto-connector-hive 替换为 prestosql-connector-hive

Amazon EMR 6.4.0 及更高版本使用新名称 Trino 而不是 PrestoSQL。如果您使用 Trino,请在以下示例中将 presto-connector-hive 替换为 trino-connector-hive

[ { "classification": "presto-connector-hive", "properties": { "hive.s3select-pushdown.enabled": "true", "hive.s3select-pushdown.max-connections": "500" } } ]

了解和调整 hive.s3select-pushdown.max-connections

默认情况下,Presto 使用 EMRFS 作为其文件系统。emrfs-site 配置分类中的设置 fs.s3.maxConnections 指定允许通过 Presto 的 EMRFS 连接到 Amazon S3 的最大客户端连接数。默认情况下,此连接数为 500。S3 Select Pushdown 在访问 Amazon S3 执行谓词操作时绕过 EMRFS。在此示例中,hive.s3select-pushdown.max-connections 的值确定从 Worker 节点执行这些操作所允许的最大客户端连接数。但是,Presto 启动的任何未向下推送的发往 Amazon S3 的请求(例如 GET 操作)将继续由 fs.s3.maxConnections 的值控制。

如果您的应用程序遇到错误“Timeout waiting for connection from pool”,请增加 hive.s3select-pushdown.max-connectionsfs.s3.maxConnections 的值。