Amazon EMR
Amazon EMR 版本指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 S3 Select Pushdown 与 Presto 结合使用以提高性能

对于 Amazon EMR 版本 5.18.0 及更高版本,您可以在 Amazon EMR 上将 S3 Select Pushdown 与 Presto 结合使用。此功能允许 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 属性。如果指定该属性,则查询将失败。

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

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

使用 Presto 启用 S3 Select Pushdown

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

[ { "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 的值确定工作线程节点中的这些操作所允许的是最大客户端连接数。但是,Presto 向 Amazon S3 发出的未向下推送的任何请求(例如,GET 操作)会继续由 fs.s3.maxConnections 的值决定。

如果您的应用程序遇到错误“等待从池连接超时,”,请同时增加 hive.s3select-pushdown.max-connectionsfs.s3.maxConnections 的值。