将本地 Hadoop 基础架构迁移到 Google Cloud

本指南介绍如何将本地 Apache Hadoop 系统迁移至 Google Cloud。这一迁移过程不仅可以将您的 Hadoop 工作迁移到 Google Cloud,还支持您调整工作以充分利用针对云计算优化的 Hadoop 系统的优势。本指南还介绍了将 Hadoop 配置迁移到 Google Cloud 时需要了解的一些基本概念。

本文是描述如何从本地 Hadoop 迁移的系列指南中的第一篇:

迁移到 Google Cloud 的优势

与使用本地 Hadoop 解决方案相比,使用 Google Cloud 可以有多种途径让您节省时间、金钱和精力。在许多情况下,采用基于云的方法可以使您的整体解决方案更简单、更易于管理。

内置对 Hadoop 的支持

Google Cloud 包括 Dataproc,这是一个托管式 Hadoop 和 Spark 环境。您可以使用 Dataproc 以最小的改动运行大多数现有作业,因此您无需迁离已知的所有 Hadoop 工具。

托管式硬件和配置

在 Google Cloud 上运行 Hadoop 时,永远无需担心物理硬件。只需指定集群配置,然后 Dataproc 就会为您分配资源。另外,您可以随时扩缩集群。

简化的版本管理

使开源工具保持最新并协同工作是管理 Hadoop 集群最复杂的任务之一。使用 Dataproc 时,Dataproc 版本控制将为您管理大部分工作。

灵活的作业配置

典型的本地 Hadoop 设置使用单个集群,可用于多种用途。当您迁移到 Google Cloud 时,您可以专注于单个任务,根据需要创建任意数量的集群。这消除了维护具有不断增长的依赖性和软件配置交互的单个集群中存在的大部分复杂性问题。

对迁移进行规划

从本地 Hadoop 解决方案迁移到 Google Cloud 需要转变方法。典型的本地 Hadoop 系统由一个支持许多工作负载、通常跨多个业务领域的单一集群组成。因此,随着时间的推移,系统会变得越来越复杂,并且可能需要管理员作出一些妥协以使所有内容在单一集群中正常运行。将 Hadoop 系统迁移到 Google Cloud 可以降低管理复杂性。但是,为了简化过程并以最低费用在 Google Cloud 中执行最有效的处理,您需要重新考虑如何构建数据和作业。

由于 Dataproc 在 Google Cloud 上运行 Hadoop,因此使用永久性 Dataproc 集群来复制本地设置似乎是最简单的解决方案。但是,这种方法存在一些限制:

  • 使用 Dataproc 将数据保存在永久性 HDFS 集群中比将数据存储在 Cloud Storage 中更昂贵,而后者是我们建议的方案,本文稍后会加以说明。将数据保存在 HDFS 集群中也会让您在使用其他 Google Cloud 产品处理数据时受到一些限制。
  • 在一些特定的使用场景下,使用其他相关 Google Cloud 服务扩充或替换某些开源工具可能更有效或更经济。
  • 为您的作业使用单个永久性 Dataproc 集群比迁移到为单个作业或作业区域提供服务的目标集群更难以管理。

将 Hadoop 系统迁移到 Google Cloud 最经济实惠、最灵活的方法是抛弃使用大型、多用途、永久性集群的想法,转而考虑适用于运行特定作业的小型、短期集群。例如,将数据存储在 Cloud Storage 中即可支持多个临时处理集群。这种模型通常被称为“临时模型”,因为用于处理作业的集群会根据需要进行分配,并在作业完成时释放。

下图展示了从本地系统到 Google Cloud 上的临时模型的假设迁移过程。

说明在迁移到 Google Cloud 时如何重新排列本地集群的图示。

该示例将在两个本地集群上运行的四个作业迁移到 Dataproc。用于在 Google Cloud 中运行作业的临时集群旨在最大限度地提高单个作业的效率。其中,前两个作业使用同一集群,第三个作业和第四个作业各自在自己的集群上运行。迁移您自己的作业时,您可以根据特定工作需求为单个作业或一组作业自定义和优化集群。Dataproc 可帮助您快速定义多个集群、使其联机并根据您的需求进行扩缩。

示例中的数据从两个本地 HDFS 集群迁移到 Cloud Storage 存储分区。第一个集群中的数据会分布在多个存储分区中,第二个集群中的数据则迁移到单个存储分区。您可以自定义 Cloud Storage 中数据的结构,以满足应用和业务需求。

示例迁移捕获完整迁移到 Google Cloud 的开始状态和结束状态。这意味着只需一步就可完成迁移,但如果您不考虑一次性完整迁移到 Google Cloud,那么您将获得最佳结果。更好的做法是,您可以重构您的解决方案,以便以本地无法实现的方式使用新的工具集。要进行这样的重构工作,我们建议您逐步迁移。

以下是将工作流迁移到 Google Cloud 的建议步骤:

  1. 首先迁移数据

    • 将数据迁移到 Cloud Storage 存储分区。
    • 以小规模起步。使用备份或归档数据可最大限度地减少对现有 Hadoop 系统的影响。
  2. 进行实验

    • 使用一部分数据进行测试和实验。为每个作业创建小规模的概念验证。
    • 尝试使用新方法处理数据。
    • 适应 Google Cloud 和云计算模式。
  3. 考虑采用专用的临时集群。

    • 尽可能使用最小的集群,可以将其范围限定为单个作业或一小组密切相关的作业。
    • 在需要时为作业创建集群,并在用完后删除。
  4. 使用合适的 Google Cloud 工具。

迁移到临时模型

在运行本地 Hadoop 工作流和在 Google Cloud 上运行相同工作流之间的最大转变是从单一的永久性集群迁移到专用的临时集群。如果采用新的方法,您可在需要运行作业时启动集群,然后在作业完成时将其删除。您的作业所需的资源仅在使用时才有效,因此您只需为实际用量付费。此方法使您可以为单个作业定制集群配置。由于无需维护和配置永久性集群,因此可以降低资源使用和集群管理的费用。

本部分介绍如何将现有 Hadoop 基础架构迁移到临时模型。

将数据与计算分开

使用 Cloud Storage 作为工作流的永久性存储空间具有以下优势:

  • 管理访问权限更加轻松。
  • 它是一个 Hadoop 兼容文件系统 (HCFS),因此可以轻松用于现有作业。
  • 在大多数情况下,它比 HDFS 更快。
  • 它的维护次数低于 HDFS。
  • 迁移数据比 HDFS 更容易。
  • 它使您可以轻松将数据用于所有 Google Cloud 产品。
  • 它比将数据保存在永久性 Dataproc 集群上的 HDFS 中更加实惠。

通过将数据永久存储在 Cloud Storage 中,您可以在由 Dataproc 管理的临时 Hadoop 集群上运行作业。

在某些情况下,将数据迁移到另一种 Google Cloud 服务(如 BigQuery 或 Bigtable)可能效果更好。但是大多数通用数据应该保留在 Cloud Storage 中。本指南稍后将详细介绍这些替代存储方案。

在临时集群上运行作业

Dataproc 可以轻松创建和删除集群,因此您可以从使用单个集群转为使用许多临时集群。这样做具有很多优势:

  • 您可以避免单点故障并提高数据流水线的可靠性。当长时间运行的共享集群陷入错误状态时,可能整个数据流水线都会被阻止。修复长时间运行的有状态集群可能需要很长时间,从而导致违反服务等级目标 (SLO)。相比之下,有问题的无状态临时集群可以轻松删除,然后通过作业重试重新创建。
  • 您可以通过消除作业之间的资源争用,获得预测性更强的作业性能并避免违反 SLO。
  • 您可以为单个作业优化集群配置和自动扩缩政策。
  • 为作业创建临时集群时,您可以获取最新的安全补丁、问题修复和优化。
  • 您可以避免长时间运行的集群的常见问题,例如日志和临时文件填满磁盘,或者可用区中缺货导致集群无法扩容。
  • 您无需随着时间的推移维护集群,因为每次使用临时集群时都会对其进行配置。无需维护集群可以消除跨作业管理工具的管理负担。
  • 您无需分别为开发、测试和生产维护不同的基础架构。您可以使用相同的定义来创建任意数量的不同集群版本。
  • 您可以使用隔离式单作业集群更快地排查问题。
  • 您只需在作业使用资源时为其付费。

您可以使用 Dataproc 初始化操作来定义集群中节点的配置。这使您可以轻松维护密切支持单个作业和相关作业组所需的不同集群配置。要开始操作,您可以使用提供的示例初始化操作。这些示例演示了如何执行自己的初始化操作。

最大限度地缩短临时集群的生命周期

使用临时集群的关键在于仅将它们用于作业的生命周期内。 在运行作业时,请遵循以下流程:

  1. 创建正确配置的集群。

  2. 运行您的作业,将输出发送到 Cloud Storage 或其他永久性位置。

  3. 删除集群。

  4. 根据需要使用您的作业输出。

  5. 在 Cloud Logging 或 Cloud Storage 中查看日志。

此流程如下图所示:

云端的临时作业流的图示。

仅在绝对必要时才使用小型永久性集群

如果没有永久性集群就无法完成工作,那么您可以创建一个。此方案的费用较高,如果有办法在临时集群上完成作业,则不建议使用此方案。

您可以通过以下方式最大限度地降低永久性集群的费用:

  • 尽可能创建最小的集群。
  • 将您在该集群上运行的作业数量限制到最少。
  • 将集群扩缩到最小可用节点数,然后按需动态添加节点。

逐步迁移

逐步迁移有许多优点。您可以:

  • 将现有 Hadoop 基础架构中的单个作业与成熟环境中固有的复杂性隔离开来。
  • 单独检查每个作业以评估其需求并确定迁移的最佳途径。
  • 在出现意外问题时及时处理,同时不延迟相关任务。
  • 为每个复杂流程创建概念验证,而不影响生产环境。
  • 谨慎地将工作负载迁移到推荐的临时模型。

您的迁移过程对于 Hadoop 环境是独特的,因此没有适合所有迁移场景的通用计划。请制定一个能够让您自由地将每个部分转换为云计算模式的迁移计划。

以下是典型的逐步迁移顺序:

  1. 将部分数据迁移至 Google Cloud。

  2. 用这些数据进行实验:

    1. 复制使用这些数据的现有作业。

    2. 创建适用于这些数据的新原型。

  3. 用其他数据重复这些步骤。

尽可能从最不重要的数据开始迁移。在早期阶段,使用备份数据和存档是种很好的方法。

要测试迁移是否成功,您可以进行低风险的回填作业,具体是通过对存档数据运行突发处理。您可以设置用于填补当前作业到位之前存在的数据处理空白的作业。 通常,先迁移突发作业可以让您在迁移计划的早期阶段积累在 Google Cloud 上扩缩的经验。之后,您就可以逐步迁移更重要的作业。

下图展示了典型的回填混合架构的示例。

在云端回填的典型架构图示。

该示例有两个主要组件。首先,在本地集群上运行的预定作业通过互联网网关将数据推送到 Cloud Storage。其次,回填作业在临时 Dataproc 集群上运行。除了回填之外,您还可以使用 Google Cloud 中的临时集群进行实验,并为未来的工作创建概念验证。

计划完整的迁移

到目前为止,本指南假设您的目标是将整个 Hadoop 系统从本地迁移到 Google Cloud。完全在 Google Cloud 上运行的 Hadoop 系统比在云端和本地运行的 Hadoop 系统更易于管理。但是,为满足业务或技术需求,您通常需要采用混合方法。

设计混合解决方案

以下是您可能需要混合解决方案的一些原因:

  • 您正在开发云原生系统,因此依赖于它们的现有系统必须继续在本地运行,直到您完成开发为止。
  • 您有将数据保留在本地的业务需求。
  • 您必须与在本地运行的其他系统共享数据,并且由于技术或业务限制,这些系统无法与 Google Cloud 交互。

典型的混合解决方案有四个主要部分:

  1. 本地 Hadoop 集群。

  2. 从本地集群到 Google Cloud 的连接。

  3. Google Cloud 中的集中化数据存储空间。

  4. 处理 Google Cloud 数据的云原生组件。

如何使系统保持同步是您使用混合云解决方案时必须解决的问题之一。也就是说,您如何确保在一个地方对数据所做的更改会反映在另一个地方?您可以通过明确区分数据在不同环境中的使用方式来简化同步。

例如,您可能有一个混合解决方案,其中只有您的归档数据存储在 Google Cloud 中。您可以设置预定作业,以便在数据存储到指定时间时将数据从本地集群迁移到 Google Cloud。然后,您可以设置在 Google Cloud 中处理归档数据的所有作业,这样您就永远无需将更改同步到本地集群。

划分系统的另一种方法是将特定项目或工作组的所有数据和工作迁移到 Google Cloud,同时在本地保留其他工作。然后,您可以专注于您的作业,而无需创建复杂的数据同步系统。

您可能会遇到安全或逻辑方面的问题,这会使您将本地集群连接到 Google Cloud 的方式变得复杂。一种解决方案是使用通过 Cloud VPN 连接到本地网络的 Virtual Private Cloud

下图展示了混合云设置的示例:

典型混合云 Hadoop 架构图示。

此示例设置使用 Cloud VPN 将 Google Cloud VPC 连接到本地集群。该系统使用 VPC 内的 Dataproc 来管理处理来自本地系统的数据的永久性集群。这可能涉及在系统间同步数据。这些永久性 Dataproc 集群还将来自本地系统的数据转移到 Google Cloud 中的相应存储服务。为了便于说明,该示例使用 Cloud Storage、BigQuery 和 Bigtable 进行存储,这些是 Google Cloud 中 Hadoop 工作负载处理的数据的最常用存储服务。

此示例混合解决方案的另一半展示了在公有云中按需创建的多个临时集群。这些集群可用于许多任务,包括收集和转换新数据的任务。这些作业的结果存储在 VPC 中运行的集群使用的相同存储服务中。

设计云原生解决方案

相比之下,云原生解决方案更加简单直接。因为您使用存储在 Cloud Storage 中的数据在 Google Cloud 上运行所有作业,所以可以完全避免数据同步的复杂性,但您仍须注意不同的作业是如何使用同一数据的。

下图展示了云原生系统的示例:

典型云原生 Hadoop 架构图示。

示例系统中有一些永久性集群和一些临时集群。这两种集群共享云端工具和资源,包括存储和监控。Dataproc 使用标准化机器映像在集群中的虚拟机上定义软件配置。您可以使用这些预定义映像作为所需虚拟机配置的基础映像。该示例展示了大多数永久性集群在 1.1 版本上运行,还有一个集群在 1.2 版本上运行。您可以在需要时使用自定义虚拟机实例创建新集群。这样您可以将测试和开发环境与关键生产数据和作业分离开来。

此示例中的临时集群运行着各种各样的作业。此示例展示了使用在 Compute Engine 上运行的 Apache Airflow 来计划临时集群的工作。

使用 Google Cloud 服务

本部分讨论将 Hadoop 迁移到 Google Cloud 的一些其他注意事项。

用 Google Cloud 服务替换开源工具

Google Cloud 提供了许多可以与 Hadoop 系统搭配使用的产品。与在 Google Cloud 中运行等效的开源产品相比,使用 Google Cloud 产品通常具有更多优势。了解 Google Cloud 产品和服务,探索此平台所能提供的广度。

使用区域和地区

在配置数据和作业之前,您应该了解地理位置和区域的影响。许多 Google Cloud 服务要求您指定要分配资源的地区或区域。当发出请求的区域与存储资源的区域不同时,请求的延迟时间会增加。此外,如果服务的资源和您的永久性数据位于不同的区域,则某些对 Google Cloud 服务的调用可能会在处理之前将所有必需的数据从一个地区复制到另一个地区。这会对性能产生严重影响。

配置身份验证和权限

您对 Google Cloud 服务中的权限的控制程度可能不如您在本地 Hadoop 环境中那么精细。在开始迁移之前,请确保您了解访问权限管理在 Google Cloud 中的工作原理。

Identity and Access Management (IAM) 用于管理云端资源的访问权限。它基于账号和角色工作。 账号用于识别用户或请求(身份验证),授予账号的角色用于决定访问权限级别(授权)。大多数 Google Cloud 服务都提供自己的一组角色来帮助您调整权限。作为规划迁移流程的一部分,您应了解 IAM 如何与 Cloud StorageDataproc 进行交互。在将其他每个 Google Cloud 服务添加到系统时,需了解其权限模型,并考虑如何定义适用于您使用的服务的角色。

使用 Cloud Logging 监控作业

Google Cloud 作业将其日志发送到 Cloud Logging 后,您可以在其中轻松访问这些日志。通过以下方式可以获取日志:

使用 Compute Engine 管理边缘节点

您可以使用 Compute Engine 访问 Dataproc Hadoop 集群中的边缘节点。与大多数 Google Cloud 产品一样,您可以采用多种管理方案,例如通过基于网页的控制台、命令行以及网络 API。

使用 Google Cloud 大数据服务

Cloud Storage 是在 Google Cloud 中存储非结构化数据的主要方式,但它不是唯一的存储方案。您的某些数据可能更适合存储在专为大数据设计的产品中。

您可以使用 Bigtable 存储大量稀疏数据。Bigtable 是一种符合 HBase 标准的 API,可提供低延迟时间和高可伸缩性,以适应您的作业。

对于数据仓储,您可以使用 BigQuery

后续步骤