高可用性模式

创建 Managed Service for Apache Spark 集群时,您可以通过指定集群中的主实例数量来将集群置于 Hadoop 高可用性 (HA) 模式。主实例的数量只能在创建集群时指定。

目前,Managed Service for Apache Spark 支持两种主实例配置:

  • 1 个主实例(默认,非 HA)
  • 3 个主实例 (Hadoop HA)

默认模式与 Hadoop 高可用性模式的比较

  • Compute Engine 故障:在 Compute Engine 意外发生故障的罕见情况下,Managed Service for Apache Spark 实例将会遇到机器重新启动的情况。Managed Service for Apache Spark 默认的单主实例配置可在此情况下恢复并继续处理新工作,但正在进行的作业必然会失败并需要重新运行,并且,在重启后,直到单个 NameNode 完全恢复之前,您将无法访问 HDFS。在高可用性模式下,系统会配置 HDFS 高可用性YARN 高可用性,以确保在任何单节点故障或重启的情况下,YARN 和 HDFS 操作不中断。

  • 作业驱动程序终止:如果作业的正确性依赖驱动程序的成功运行,则您运行的任何作业的驱动程序/主程序仍然可能出现单点故障。通过 Dataproc Jobs API 提交的作业不被视为具备“高可用性”,当运行相应作业驱动程序的主实例节点发生故障时,仍会终止此作业。要使用高可用性 Cloud Dataproc 集群让各个作业拥有针对单节点故障的恢复能力,作业必须满足以下任一条件:1) 在没有同步驱动程序的情况下运行;或者 2) 必须在 YARN 容器内运行驱动程序,并被编写为可以处理驱动程序重启。如需通过示例了解可重启的驱动程序如何在 YARN 容器内运行以实现容错,请参阅在 YARN 上启动 Spark

  • 可用区级故障:与所有 Managed Service for Apache Spark 集群一样,高可用性集群中的所有节点都位于同一可用区。如果某个故障影响了某可用区中的所有节点,则故障不会得到缓解。

实例名称

默认主实例名为 cluster-name-m;高可用性主实例名为 cluster-name-m-0cluster-name-m-1cluster-name-m-2

Apache ZooKeeper

在高可用性 Managed Service for Apache Spark 集群中,ZooKeeper 组件会自动安装在集群主服务器上。所有主节点都会加入 ZooKeeper 集群,该集群为其他 Hadoop 服务启用自动故障转移功能。

HDFS

在标准 Managed Service for Apache Spark 集群中:

  • cluster-name-m 运行:
    • NameNode
    • 辅助 NameNode

在高可用性 Managed Service for Apache Spark 集群中:

  • cluster-name-m-0cluster-name-m-1 运行:
    • NameNode
    • ZKFailoverController
  • 所有主实例均运行 JournalNode
  • 没有辅助 NameNode

如需详细了解组件,请参阅 HDFS 高可用性文档。

YARN

在标准 Managed Service for Apache Spark 集群中,cluster-name-m 运行 ResourceManager。

在高可用性 Managed Service for Apache Spark 集群中,所有主实例都运行 ResourceManager。

如需详细了解组件,请参阅 YARN 高可用性文档。

创建高可用性集群

控制台

  • 打开 Managed Service for Apache Spark 创建集群页面。
  • 定义集群形状部分中,选择高可用性
  • 默认情况下,驱动节点设置与主要工作器设置相同。 在其他配置下,您可以修改驱动节点,取消选中将默认驱动节点设为与主要工作器相同复选框,然后指定驱动节点设置。

gcloud 命令

如需使用 gcloud dataproc clusters create 来创建高可用性集群,请运行以下命令:
gcloud dataproc clusters create cluster-name \
    --region=region \
    --num-masters=3 \
    ... other args

REST API

如需创建高可用性集群,请使用 clusters.create API,并将 masterConfig.numInstances 设置为 3