将 Hadoop 作业从本地迁移到 Dataproc

本指南介绍了如何使用 Dataproc 将 Apache Hadoop 作业迁移到 Google Cloud。

本文是描述如何从本地 Hadoop 迁移数据的三篇指南的第三篇:

在 Google Cloud 上运行 Hadoop 作业

您可以使用 Dataproc 在 Google Cloud 上运行大多数 Hadoop 作业。以下列表总结了基本操作过程:

  1. 更新您的作业以指向存储在 Cloud Storage 中的持久数据。

  2. 创建要在其上运行作业的 Dataproc 集群。这种临时的一次性集群称为临时集群

  3. 将您的作业提交到临时集群。

  4. (可选)使用 Cloud Logging 或 Cloud Storage 监控作业日志。默认情况下,使用您在创建集群时指定的暂存存储分区在 Cloud Storage 中捕获日志。

  5. 检查 Cloud Storage 上的作业输出。

  6. 作业完成后,删除集群。

支持的作业

Dataproc 运行 Hadoop,因此可以自动支持多种作业。使用 Dataproc 创建集群时,默认情况下会配置以下技术:

  • Hadoop
  • Spark
  • Hive
  • Pig

Dataproc 提供了多个机器映像的版本,其中预安装了不同版本的开源软件。只需在映像上使用预配置的软件即可运行多个作业。对于某些作业,您可能需要安装其他软件包。Dataproc 提供了一种称为初始化操作的机制,使您可以自定义在集群节点上运行的软件。您可以使用初始化操作来创建会在每个节点上运行的脚本。

更新数据位置 (URI)

Cloud Storage 连接器预先安装在 Dataproc 集群节点上,使您的作业可以将 Cloud Storage 用作 Hadoop 兼容文件系统 (HCFS)。将数据存储在 Cloud Storage 中,以便您可以使用连接器的功能。如果这样做,对作业唯一必要的更改是更新 URI,用 gs:// 替换 hdfs://

如果在迁移过程中重新组织数据,请记下所有源路径和目标路径,以便您可以轻松更新作业以使用新数据组织。

可以将数据存储在云端的持久集群中的 HDFS 中,但不建议这样做。您可以在数据迁移指南中了解有关迁移数据的更多信息。

配置集群以运行作业

如果使用我们建议的方法在 Google Cloud 上运行作业,您可以在需要时创建临时集群,并在作业完成时删除它们。这种方法为您配置集群提供了很大的灵活性。您可以为每个作业使用不同的配置,或创建可用于几个作业组的标准集群配置。

如需了解创建集群的基础步骤,请参阅 Dataproc 文档。本部分的其余内容介绍了一些重要的集群配置注意事项,以帮助您确定如何配置。

调整集群大小

定义新集群时,您需要做的第一件事就是确定集群要使用的虚拟硬件。计算出完美的集群配置可能是很困难的,因为每个作业都有其特定的需求和特性。因此请尝试不同的配置,然后找到适合您作业的正确设置。

设置集群时,您至少需要确定以下几项:

  • 要使用多少个节点。
  • 用于主节点的虚拟机类型。
  • 用于工作器节点的虚拟机类型。

节点类型由虚拟 CPU 的数量和它们可用的内存量来定义。这些定义对应于 Compute Engine 的机器类型。您通常可以找到与要迁移的本地节点的配置相对应的节点类型。您可以使用该等效项作为起始位置,设置与本地部署集群类似的集群。设置时,最好的方法是调整配置并监控对作业执行的影响。当您开始优化作业配置时,您将了解如何在系统中处理其他作业。

请记住,您可以根据需要扩展集群,因此您无需从开始就定义一个完美的规范。

选择主磁盘选项

您可以指定工作器节点使用的主磁盘的大小。请根据您要在其上运行的作业类型来确定适合集群的最佳方案。请使用默认值并评估结果,除非您明确作业对主磁盘使用有不寻常的要求。

如果您的作业属于磁盘密集型并且在各个节点上执行缓慢,则可以添加更多主磁盘空间。对于磁盘密集型作业,尤其是那些具有许多单独读写操作的作业,您可以通过添加本地 SSD 来提升操作效率。添加足够的 SSD 以保证给予本地执行所需的所有空间。您的本地执行目录遍布在您添加的这些 SSD 上。

使用抢占式工作器节点

通过向集群中添加抢占式工作器节点,您可以获得低成本作业处理能力。这些节点使用抢占式虚拟机

在选择使用它们之前,请注意抢占式节点存在可靠性低的劣势。虽然 Dataproc 会尝试平滑处理抢占,但如果丢失的节点太多,作业可能会失败。因此仅将抢占式节点用于容错或优先级较低的作业,以便偶尔的作业失败不会破坏您的业务。

如果您决定使用抢占式工作器节点,请考虑常规节点与抢占式节点的比率。最佳结果没有定式,但一般而言,相对于标准节点来说,使用的抢占式节点越多,作业没有足够的节点来完成任务的可能性就越大。您可以通过尝试不同的比率并分析结果来确定作业的抢占式节点与常规节点的最佳比率。

请注意,SSD 在抢占式工作器节点上是不可用的。如果在专用节点上使用 SSD,则您使用的任何抢占式工作器节点将与专用节点的每个方面进行匹配,但没有可用的 SSD。

运行作业

Dataproc 提供了多个可用于启动作业的界面,所有这些界面都在产品文档中进行了描述。本部分介绍在 Google Cloud 上运行 Hadoop 作业时要考虑的选项和操作。

获取作业输出

您在 Dataproc 上运行的作业通常有几种类型的输出。您的作业可能直接编写多种输出 - 例如,Cloud Storage 存储分区中的文件或 BigQuery 等其他云产品中的文件。Dataproc 还会收集日志和控制台输出,并将它们放入与您运行作业的集群相关联的 Cloud Storage 的暂存存储分区中。

使用可重启的作业

提交作业时,可以将其配置为自动重启,因此在其遇到问题时 可以自动重启。此选项对依赖于高度可变的资源或环境的作业非常有用。例如,在潜在不可靠的渠道(例如公共互联网)上传输数据的作业特别容易因超时错误和类似的网络问题而发生随机故障。如果您需要失败的作业稍后可以成功运行,则可以使用作业重启功能。

扩缩您的集群

Dataproc 可以随时轻松地为您的集群添加或移除节点,包括在您的作业运行时。Dataproc 文档包含有关扩展集群的详细说明。扩缩包括安全停用节点。使用此选项,正在停用的节点将有时间完成正在进行的处理。

随时间管理作业

处理单个作业通常并不复杂,但 Hadoop 系统可以包含数十个或数百个作业。随着时间的推移,与每个作业相关联的日志、输出文件和其他信息的数量激增,使找到任何单独作业的信息变得困难。您可以采取以下措施,以便更轻松地管理未来的作业:

  • 使用自定义标签来标识作业、集群和其他资源。使用标签后,您可以轻松通过过滤器查找资源。Dataproc 支持使用标准 Google Cloud 标签系统的自定义标签,因此在标记资源时,它可以帮助您在其他 GCP 服务中管理该资源。
  • 组织您的 Cloud Storage 存储分区以分离不同类型的作业。将数据分组到与业务结构或功能区域相对应的存储分区中,也可以更轻松地管理权限。
  • 为单个作业或密切相关的作业组定义集群。如果将每个配置仅用于范围广泛的作业,则更新临时集群的设置要容易得多。

后续步骤