跳到主要内容

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 内部运行。