

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Presto 中处理竞价型实例丢失


在 Amazon EMR 中使用竞价型实例时，您可以通过较低的成本利用 Amazon EC2 容量运行大数据工作负载。为换取更低的成本，Amazon EC2 可能会在发出两分钟通知后中断竞价型实例。当您终止某个节点时，Presto 最长可能需要 10 分钟才会返回错误。这会导致错误报告出现不必要的延迟，并可能导致重试。快速终止功能可让您控制 Presto 处理已终止节点的方式。

Presto 协调器的作用是通过定期轮询其状态来跟踪所有 Worker 节点。如果不快速终止，协调器就不会向 YARN NodeManager 查询每个节点的状态。这可能导致在查询失败之前出现长时间的重试循环。通过快速终止， NodeManager 只要轮询未能到达主机，Presto 协调器就会立即在中查看节点状态。如果 NodeManager 显示该节点处于非活动状态，Presto 将放弃进一步的重试，查询失败并返回错误。`NODE_DECOMMISSIONED`

下面的一组配置参数允许您控制和自定义 Presto 在节点终止时的行为。


**Presto 的节点故障处理配置**  

| 设置 | 说明 | 默认 | 
| --- | --- | --- | 
| query.remote-task.max-backoff-duration | 协调器会继续尝试从 Worker 节点获取远程任务状态的持续时间。 | 10 分钟 | 
| query.remote-task.quick-terminate-node-failure |  如果协调器无法连接到该节点或在该节点上运行的工作线程，则将激活快速节点故障。`query.remote-task.terminate-on-connect-exception` 的值将决定协调器是必须连接到该节点还是必须连接到工作线程。 节点查询失败，并且 Amazon EMR 会将该节点从可用工作线程列表中移除。发生这种情况时，您将无法使用该节点来计划新的查询。 如果您将此值设置为 `false`，Presto 会恢复其先前的行为，即 Presto 协调器在将该节点标记为不可用之前再次尝试连接到该节点（对于 `query.remote-task.max-backoff-duration`），并且将该节点上正在进行的查询设为失败。  | true | 
| query.remote-task.terminate-on-connect-exception | 如果可以连接到主机但协调器无法连接到主机上的工作进程，则指定 Amazon EMR 是否应作为节点。将此值设置为 true 时，则将在无法访问主机时激活快速查询失败。 | false | 