本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 S3 Select Pushdown 搭配 Presto 提高性能
在亚马逊EMR发布版本 5.18.0 及更高版本中,你可以在亚马逊上将 S3 selecSELECT
)和谓词操作(例如,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。
启用 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 值。对于大部分应用程序,
的默认设置应该能满足需求。有关更多信息,请参阅下面的 了解和调整 hive.s3select-pushdown.max-connections。500
对于 6.1.0-6.3.0 EMR 版本SQL上的 Presto,请在以下示例
中替换为。presto-connector-hive
prestosql-connector-hive
亚马逊 6.4.0 及更高EMR版本使用新名称 Trino 而不是 Presto。SQL如果您使用 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 允许与 Amazon S3 的最大客户端连接数。EMRFS默认情况下,此连接数为 500。访问 Amazon S3 进行谓词操作EMRFS时,S3 Select Pushdown 会绕过。在此示例中,hive.s3select-pushdown.max-connections
的值确定从 Worker 节点执行这些操作所允许的最大客户端连接数。但是,Presto 向 Amazon S3 发起的任何未向下推的请求(例如GET操作)将继续受值的约束。fs.s3.maxConnections
如果您的应用程序遇到错误“Timeout waiting for connection from pool”,请增加 hive.s3select-pushdown.max-connections
和 fs.s3.maxConnections
的值。