Hadoop 上的恢复
Hadoop 上的 HivePlus 设计用于从灾难性故障中恢复,例如 Yarn 应用程序故障和 DAGAppMaster 故障。结合处理 ContainerWorker 故障的 MR3 容错特性,恢复机制使 HivePlus 能够在几乎所有类型的故障事件中继续运行。下面介绍 HivePlus 在以下情况下的行为:1)Yarn 应用程序被杀死;2)DAGAppMaster 被杀死。
当 Yarn 应用程序被杀死时
HiveServer2 始终与一个或多个 Yarn 应用程序相关联。在共享会话模式下,所有 Beeline 连接共享一个共同的 Yarn 应用程序;而在独立会话模式下,每个 Beeline 连接创建自己的 Yarn 应用程序。无论哪种情况,HivePlus 对 Yarn 应用程序故障的响应如下:
- Beeline 立即收到活动查询的
FAILED状态。 - Beeline 保持与 HiveServer2 的连接。
- HiveServer2 在新查询提交时启动新的 Yarn 应用程序。
- 在最坏的情况下,如果新的 Yarn 应用程序立即被杀死,Beeline 可能无法提交新查询。但它仍保持与 HiveServer2 的连接。
因此,只有最终用户会在短暂的时间内经历单个查询失败。
当 Yarn 应用程序被杀死时,其 DAGAppMaster 也会自动被杀死。根据其模式,DAGAppMaster 可能作为 Yarn 容器运行(在使用 mr3.master.mode=yarn 的 Yarn 模式下),作为 HiveServer2 运行所在节点上的进程运行(在使用 mr3.master.mode=local-process 的 LocalProcess 模式下),或作为 HiveServer2 内部的线程运行(在使用 mr3.master.mode=local-thread 的 LocalThread 模式下)。
当 DAGAppMaster 被杀死时
当 DAGAppMaster 被杀死时,HivePlus 的行为取决于 DAGAppMaster 模式。在 Yarn 模式下(mr3.master.mode=yarn),执行以下序列:
- Yarn 尝试启动新的 DAGAppMaster。
- 对于活动查询,Beeline 持续收到
RUNNING状态但没有进展(即进度条显示零百分比),直到新的 DAGAppMaster 启动。 - 最终查询重新开始,Beeline 也正常恢复。
- 如果 Yarn 未能启动新的 DAGAppMaster,Yarn 应用程序被杀死。
- 在最坏的情况下,如果 Beeline 在新的 DAGAppMaster 启动时提交新查询,它将无法提交该查询。
因此,DAGAppMaster 故障可以被最终用户检测为查询执行的临时暂停,直到新的 DAGAppMaster 启动。
在 LocalProcess 模式下(mr3.master.mode=local-process),结果不同,因为 MR3 不支持 LocalProcess 模式下的 DAGAppMaster 恢复:
- Beeline 立即收到活动查询的
FAILED状态。 - 新的 DAGAppMaster 不会自动启动。
- Yarn 应用程序继续运行,所有孤立的容器也继续运行。
- Beeline 保持与 HiveServer2 的连接。
- 当提交新查询时,之前的 Yarn 应用程序失败(从而杀死所有孤立容器)并启动新的 Yarn 应用程序。
因此,最终用户可以继续通过相同的 Beeline 连接发送查询。
在 LocalThread 模式下(mr3.master.mode=local-thread),没有 DAGAppMaster 可以被杀死,因为它作为线程在 HiveServer2 内部运行。