通过 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 服务方面的经验水平?

<ph type="x-smartling-placeholder"></ph> 新手 中级 熟练

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

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

408af5f32c4b7c25

点击启用 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

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_TAGS 列和 TARGET_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 许可。