本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
激活 Presto 严格模式
在某些情况下,长时间运行的查询可能会导致高昂的成本,并导致 Amazon EMR 使用更多的集群资源。这会与集群上的其他工作负载竞争资源。在 Amazon 6.8 及更高EMR版本中,您可以使用严格模式功能,拒绝或警告您以下类型的长时间运行的查询:
-
分区列上没有谓词的查询,这会导致对大量数据进行表扫描
-
在两个大表之间使用交叉连接的查询
-
对大量行进行无限制排序的查询
在 Presto 完全优化查询计划后,严格模式将开始运行。要根据您的查询需求使用和自定义严格模式,您可以通过以下方式配置 Presto。
设置 | 描述 | 默认 |
---|---|---|
strict-mode-enabled |
开启和关闭严格模式。值 true 表示严格模式已开启。 |
false |
strict-mode-fail-query |
如果严格模式检测到可能长时间运行的查询,则会拒绝相关查询。如果是false ,Amazon EMR 只会发出警告。 |
false |
strict-mode-restrictions |
指定严格模式开启时将应用的限制。严格模式支持以下限制:MANDATORYPARTITION_ PREDICATE JOIN、DISALLOW CROSS _ 和 LIMITED _ SORT。 |
MANDATORY_PARTITION_PREDICATE,DISALLOW_CROSS_JOIN, LIMITED_SORT |
要试用严格模式,您可以覆盖这些配置,或者在使用 Presto 客户端时将其设置为会话属性。
要在创建集群时使用设置配置 Amazon Web Services Management Console
-
选择 “创建集群”,然后选择 Amazon EMR 版本 6.8.0,然后选择 Presto 或 Trino。有关更多信息,请参阅 安装 PrestoDB 和 Trino。
-
直接为严格模式指定配置属性,或者将JSON文件上传到 Amazon S3。或者,为您的元数据 Amazon 仓选择 Glue 数据目录。指定您的子网VPC、引导操作、key pair 和安全组。选择 Create cluster(创建集群)以创建集群。
-
登录到集群的主节点,然后运行
presto-cli
或trino-cli
。 -
提交查询。严格模式会验证每个查询并确定它是否在长时间运行。根据您的
strict-mode-fail-query
设置,Amazon EMR 会拒绝查询或发出警告。 -
完成查询后,终止集群并删除您的资源。
使用在正在运行的集群上设置配置 Amazon CLI
-
使用 Amazon CLI 和运行
presto-cli
或,登录到集群的主节点trino-cli
。 -
使用所需的值运行以下命令。
set session strict_mode_enabled = true; set session strict_mode_fail_query = false; set session strict_mode_restrictions = 'DISALLOW_CROSS_JOIN,LIMITED_SORT';
注意事项
在使用严格模式时,请注意以下几点:
-
在某些情况下,严格模式可能会拒绝并未消耗大量资源的短时查询。例如,对小表的查询未应用动态筛选,也未用交叉连接替内部连接。这可能导致查询使用强制分区谓词或禁止交叉连接。发生这种情况时,严格模式会拒绝该查询。
-
严格模式检查仅适用于SELECT、INSERT、A CREATE TABLE S SELECT 和EXPLAINANALYZE查询类型。
-
您只能通过 Hive 连接器使用对强制分区谓词的限制。