通过 Cloud Dataproc 预配和使用托管式 Hadoop/Spark 集群(命令行)

1. 概览

Cloud Dataproc 是一项托管式 Spark 和 Hadoop 服务,可让您充分利用开源数据工具来执行批处理、查询、流式传输和机器学习。Cloud Dataproc 自动化功能可帮助您快速创建集群并轻松管理,以及在不需要集群时将其关闭以节省费用。由于花在管理上的时间和费用减少,您可以将精力集中在实际的工作和数据上。

本教程改编自 https://cloud.google.com/dataproc/overview

学习内容

  • 如何创建托管式 Cloud Dataproc 集群(预安装 Apache Spark)。
  • 如何提交 Spark 作业
  • 如何调整集群大小
  • 如何通过 SSH 连接到 Dataproc 集群的主节点
  • 如何使用 gcloud 检查集群、作业和防火墙规则
  • 如何关闭集群

所需条件

您将如何使用本教程?

仅阅读教程内容 阅读并完成练习

您如何评价自己在使用 Google Cloud Platform 服务方面的经验水平?

新手水平 中等水平 熟练水平

2. 设置和要求

自定进度的环境设置

  1. 登录 Cloud 控制台,然后创建一个新项目或重复使用现有项目。 (如果您还没有 Gmail 或 G Suite 账号,则必须创建一个。)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

请记住项目 ID,它在所有 Google Cloud 项目中都是唯一的名称(上述名称已被占用,您无法使用,抱歉!)。它稍后将在此 Codelab 中被称为 PROJECT_ID

  1. 接下来,您需要在 Cloud 控制台中启用结算功能,才能使用 Google Cloud 资源。

运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。请务必按照“清理”部分中的所有说明操作,该部分介绍了如何关停资源,以免产生超出本教程范围的结算费用。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

3. 启用 Cloud Dataproc 和 Google Compute Engine API

点击屏幕左上角的菜单图标。

2bfc27ef9ba2ec7d.png

从下拉菜单中选择“API 管理器”。

408af5f32c4b7c25.png

点击启用 API 和服务

a9c0e84296a7ba5b.png

在搜索框中搜索“Compute Engine”。在显示的搜索结果列表中,点击“Google Compute Engine API”。

b6adf859758d76b3.png

在 Google Compute Engine 页面上,点击启用

da5584a1cbc77104.png

启用后,点击指向左侧的箭头返回。

现在,搜索“Google Cloud Dataproc API”,然后也启用它。

f782195d8e3d732a.png

4. 启动 Cloud Shell

基于 Debian 的这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证。这意味着在本 Codelab 中,您只需要一个浏览器(没错,它适用于 Chromebook)。

  1. 如需从 Cloud Console 激活 Cloud Shell,只需点击激活 Cloud ShellfEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q(预配和连接到环境仅需花费一些时间)。

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 10.13.43 PM.png

在连接到 Cloud Shell 后,您应该会看到自己已通过身份验证,并且相关项目已设置为您的 PROJECT_ID

gcloud auth list

命令输出

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

命令输出

[core]
project = <PROJECT_ID>

如果出于某种原因未设置项目,只需发出以下命令即可:

gcloud config set project <PROJECT_ID>

正在查找您的 PROJECT_ID?检查您在设置步骤中使用的 ID,或在 Cloud Console 信息中心查找该 ID:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

默认情况下,Cloud Shell 还会设置一些环境变量,这对您日后运行命令可能会很有用。

echo $GOOGLE_CLOUD_PROJECT

命令输出

<PROJECT_ID>
  1. 最后,设置默认可用区和项目配置。
gcloud config set compute/zone us-central1-f

您可以选择各种不同的可用区。如需了解详情,请参阅区域和可用区

5. 创建 Cloud Dataproc 集群

启动 Cloud Shell 后,您可以使用命令行来调用 Cloud SDK gcloud 命令或该虚拟机实例上提供的其他工具。

选择要在本实验中使用的集群名称:

$ CLUSTERNAME=${USER}-dplab

我们先创建一个新集群:

$ gcloud dataproc clusters create ${CLUSTERNAME} \
  --region=us-central1 \
  --scopes=cloud-platform \
  --tags codelab \
  --zone=us-central1-c

包含两个工作器节点的默认集群设置应足以满足本教程的需求。上述命令包含 --zone 选项,用于指定将创建集群的地理可用区;还包含两个高级选项 --scopes--tags,下面将介绍使用这两个选项启用的功能。如需了解如何使用命令行标志自定义集群设置,请参阅 Cloud SDK gcloud dataproc clusters create 命令。

6. 将 Spark 作业提交到集群

您可以通过 Cloud Dataproc API jobs.submit 请求、使用 gcloud 命令行工具或通过 Google Cloud Platform Console 提交作业。您还可以使用 SSH 连接到集群中的机器实例,然后从该实例运行作业。

我们来使用 Cloud Shell 命令行中的 gcloud 工具提交作业:

$ gcloud dataproc jobs submit spark --cluster ${CLUSTERNAME} \
  --class org.apache.spark.examples.SparkPi \
  --jars file:///usr/lib/spark/examples/jars/spark-examples.jar -- 1000

作业运行时,您会在 Cloud Shell 窗口中看到输出。

输入 Control-C 以中断输出。这会停止 gcloud 命令,但作业仍会在 Dataproc 集群上运行。

7. 列出作业并重新连接

打印作业列表:

$ gcloud dataproc jobs list --cluster ${CLUSTERNAME}

最近提交的作业位于列表顶部。复制作业 ID,并将其粘贴到以下命令中的“jobId”位置。该命令将重新连接到指定作业并显示其输出:

$ gcloud dataproc jobs wait jobId

作业完成后,输出将包含 Pi 值的近似值。

493928df54f61386.png

8. 调整集群大小

如需运行更大型的计算任务,您可能需要向集群添加更多节点以加快速度。Dataproc 可让您随时向集群添加节点或从中移除节点。

检查集群配置:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

通过添加一些可抢占节点来扩大集群规模:

$ gcloud dataproc clusters update ${CLUSTERNAME} --num-secondary-workers=2

再次检查集群:

$ gcloud dataproc clusters describe ${CLUSTERNAME}

请注意,除了原始集群说明中的 workerConfig 之外,现在还有一个 secondaryWorkerConfig,其中包含两个抢占式工作器的 instanceNames。在启动新节点时,Dataproc 会将集群状态显示为“就绪”。

由于您最初使用了两个节点,现在使用了四个节点,因此 Spark 作业的运行速度应该会快一倍左右。

9. 通过 SSH 连接到集群

通过 SSH 连接到主节点,其实例名称始终是集群名称,后跟 -m

$ gcloud compute ssh ${CLUSTERNAME}-m --zone=us-central1-c

您首次在 Cloud Shell 上运行 ssh 命令时,系统会为您的账号生成 SSH 密钥。您可以选择口令,也可以暂时使用空白口令,日后如果需要,可以使用 ssh-keygen 更改口令。

在实例上,检查主机名:

$ hostname

由于您在创建集群时指定了 --scopes=cloud-platform,因此可以在集群上运行 gcloud 命令。列出项目中的集群:

$ gcloud dataproc clusters list

完成后,退出 SSH 连接:

$ logout

10. 检查代码

您在创建集群时添加了 --tags 选项,以便为集群中的每个节点添加标记。标记用于将防火墙规则附加到每个节点。您在本 Codelab 中未创建任何匹配的防火墙规则,但仍可以检查节点上的标记和网络上的防火墙规则。

打印主节点的说明:

$ gcloud compute instances describe ${CLUSTERNAME}-m --zone us-central1-c

在输出的末尾附近查找 tags:,并查看其中是否包含 codelab

打印防火墙规则:

$ gcloud compute firewall-rules list

请注意 SRC_TAGSTARGET_TAGS 列。通过将标记附加到防火墙规则,您可以指定该规则应应用于具有该标记的所有节点。

11. 关闭集群

您可以通过 Cloud Dataproc API clusters.delete 请求、从命令行使用 gcloud dataproc clusters delete 可执行文件或通过 Google Cloud Platform Console 关闭集群。

我们来使用 Cloud Shell 命令行关停集群:

$ gcloud dataproc clusters delete ${CLUSTERNAME} --region us-central1

12. 恭喜!

您学习了如何创建 Dataproc 集群、提交 Spark 作业、调整集群大小、使用 SSH 登录到主节点、使用 gcloud 检查集群、作业和防火墙规则,以及使用 gcloud 关闭集群!

了解详情

许可

此作品已获得 知识共享署名 3.0 通用许可和 Apache 2.0 许可授权。