激活 Presto 严格模式 - Amazon EMR
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

激活 Presto 严格模式

在某些情况下,长时间运行的查询会产生极高的成本,并且可能导致 Amazon EMR 使用更多的集群资源。这会与集群上的其他工作负载竞争资源。在 Amazon EMR 版本 6.8 及更高版本中,您可以使用严格模式功能,拒绝以下类型的长时间运行的查询或向您发出警告:

  • 分区列上没有谓词的查询,这会导致对大量数据进行表扫描

  • 在两个大表之间使用交叉连接的查询

  • 对大量行进行无限制排序的查询

在 Presto 完全优化查询计划后,严格模式将开始运行。要根据您的查询需求使用和自定义严格模式,您可以通过以下方式配置 Presto。

Presto 严格模式配置
设置 描述 默认值
strict-mode-enabled 开启和关闭严格模式。值 true 表示严格模式已开启。 false
strict-mode-fail-query 如果严格模式检测到可能长时间运行的查询,则会拒绝相关查询。如果值为 false,则 Amazon EMR 只会发出警告。 false
strict-mode-restrictions 指定严格模式开启时将应用的限制。严格模式支持以下限制:MANDATORY_PARTITION_PREDICATE、DISALLOW_CROSS_JOIN 和 LIMITED_SORT。

MANDATORY_PARTITION_PREDICATE、DISALLOW_CROSS_JOIN、LIMITED_SORT

要试用严格模式,您可以覆盖这些配置,或者在使用 Presto 客户端时将其设置为会话属性。

在通过 Amazon Web Services Management Console创建集群时设置配置
  1. 选择 Create cluster(创建集群)并选择 Amazon EMR 版本 6.8.0,然后选择 Presto 或 Trino。有关更多信息,请参阅 安装 PrestoDB 和 Trino

  2. 直接指定严格模式的配置属性,或者将 JSON 文件上传到 Amazon S3。您也可为您的元数据存储选择 。指定您的 VPC、子网、引导操作、密钥对和安全组。选择 Create cluster(创建集群)以创建集群。

  3. 登录到集群的主节点,然后运行 presto-clitrino-cli

  4. 提交查询。严格模式会验证每个查询并确定它是否在长时间运行。根据您的 strict-mode-fail-query 设置,Amazon EMR 会拒绝查询或发出警告。

  5. 完成查询后,终止集群并删除您的资源。

通过 Amazon CLI 在正在运行的集群上设置配置
  1. 使用 Amazon CLI 登录到集群的主节点,然后运行 presto-clitrino-cli

  2. 使用所需的值运行以下命令。

    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、CREATE TABLE AS SELECT 和 EXPLAIN ANALYZE 查询类型。

  • 您只能通过 Hive 连接器使用对强制分区谓词的限制。