使用 Cloud Scheduler 的工作流

在本文档中,您将使用 Google Cloud 的以下收费组件:

  • Dataproc
  • Compute Engine
  • Cloud Scheduler

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

设置项目

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 启用 Dataproc, Compute Engine, and Cloud Scheduler API。

    启用 API

  5. 安装 Google Cloud CLI。
  6. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  7. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  8. 确保您的 Google Cloud 项目已启用结算功能

  9. 启用 Dataproc, Compute Engine, and Cloud Scheduler API。

    启用 API

  10. 安装 Google Cloud CLI。
  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init

创建自定义角色

  1. 在 Google Cloud 控制台中打开 IAM 和管理 → 角色页面。
    1. 点击“创建角色”以打开创建角色页面。
    2. 填写“标题”、“说明”、“ID”、“发布阶段”等字段。建议:使用“Dataproc 工作流模板创建”作为角色标题。
    3. 点击“添加权限”,
      1. 添加权限表单中,点击过滤条件,然后选择“权限”。填写过滤条件以读取“权限:dataproc.workflowTemplates.instantiate”。
      2. 点击所列权限左侧的复选框,然后点击“添加”。
    4. 在“创建角色”页面上,再次点击“添加权限”以重复之前的子步骤,将“iam.serviceAccounts.actAs”权限添加到自定义角色。创建角色页面现在列出了两个权限。
    5. 点击自定义角色页面上的“创建”。自定义角色列在角色页面上。

创建服务账号

  1. 在 Google Cloud 控制台中,转到服务账号页面。

    转到“服务账号”

  2. 选择您的项目。

  3. 点击 创建服务账号

  4. 服务帐号名称字段中,输入名称 workflow-scheduler。 Google Cloud 控制台将根据此名称填写服务帐号 ID 字段。

  5. 可选:在服务账号说明字段中,输入服务账号的说明。

  6. 点击创建并继续

  7. 点击选择角色字段,然后选择您在上一步中创建的 Dataproc Workflow Template Create 自定义角色。

  8. 点击继续

  9. 服务帐号管理员角色字段中,输入您的 Google 帐号电子邮件地址。

  10. 点击完成以完成服务账号的创建过程。

创建工作流模板。

在本地终端窗口或 Cloud Shell 中复制并运行下面列出的命令,以创建和定义工作流模板

注意:

  • 这些命令指定“us-central1”区域。如果您之前运行过 gcloud config set compute/region 来设置区域属性,则可以指定其他区域或删除 --region 标志。
  • add-job 命令中的“-- ”(破折号空格)序列将 1000 参数传递到 SparkPi 作业,该作业指定用于估计 Pi 值的样本数量。

  1. 创建工作流模板。

    gcloud dataproc workflow-templates create sparkpi \
        --region=us-central1
    
  2. 将 Spark 作业添加到 sparkpi 工作流模板。“计算”步骤 ID 是必需的,用于标识已添加的 SparkPi 作业。
    gcloud dataproc workflow-templates add-job spark \
        --workflow-template=sparkpi \
        --step-id=compute \
        --class=org.apache.spark.examples.SparkPi \
        --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
        --region=us-central1 \
        -- 1000
    

  3. 使用托管单节点集群运行工作流。Dataproc 将创建集群,对其运行工作流,然后在工作流完成时删除集群。

    gcloud dataproc workflow-templates set-managed-cluster sparkpi \
        --cluster-name=sparkpi \
        --single-node \
        --region=us-central1
    

  4. 在 Google Cloud 控制台中,点击 Dataproc 工作流页面上的 sparkpi 名称,以打开工作流模板详情页面。确认 sparkpi 模板属性。

创建 Cloud Scheduler 作业

  1. 打开 Google Cloud 控制台中的 Cloud Scheduler 页面(您可能需要选择项目才能打开该页面)。点击“创建作业”。

  2. 输入或选择以下作业信息:

    1. 选择一个地区:您创建工作流模板的“us-central” 或其他地区。
    2. 名称:“sparkpi”
    3. 频率:“* * * * *”表示每分钟选择一次;“0 9 * * 1”表示每个星期一上午 9 点进行选择。如需了解其他 unix-cron 值,请参阅定义作业时间表注意:无论您为作业设置的频率如何,您都可以在 Google Cloud 控制台中点击 Cloud Scheduler 作业上的“立即运行”按钮来运行和测试作业。
    4. 时区:选择您的 timezone。输入“美国”可列出美国时区。
    5. 目标:“HTTP”
    6. 网址:在插入 your-project-id 后插入以下网址。如果您在其他地区创建了工作流模板,请替换“us-central1”。此网址将调用 Dataproc workflowTemplates.instantiate API 以运行 sparkpi 工作流模板
      https://dataproc.googleapis.com/v1/projects/your-project-id/regions/us-central1/workflowTemplates/sparkpi:instantiate?alt=json
      
    7. HTTP 方法
      1. “POST”
      2. 正文:“{}”
    8. 身份验证标头
      1. “添加 OAuth 令牌”
      2. 服务账号:插入您为本教程创建的服务账号service account address。您可以在插入 your-project-id 后使用以下账号地址:
        workflow-scheduler@your-project-id.iam.gserviceaccount
        
      3. 范围:您可以忽略此项。
    9. 点击“创建”。

测试计划的工作流作业

  1. Cloud Scheduler 作业页面的 sparkpi 作业行上,点击“立即运行”。

  2. 等待几分钟,然后打开 Dataproc 工作流页面以验证 sparkpi 工作流是否已完成。

  3. 在工作流删除代管式集群后,作业详细信息会保留在 Google Cloud 控制台中。点击 Dataproc 作业 页面上列出的 compute... 作业以查看工作流作业详情。

清理

本教程中的工作流将在工作流完成时删除其托管集群。通过保留工作流,您可以重新运行工作流且不会产生费用。您可以删除本教程中创建的其他资源,以避免重复收费。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除工作流模板

gcloud dataproc workflow-templates delete sparkpi \
    --region=us-central1

删除 Cloud Schedule 作业

在 Google Cloud 控制台中打开 Cloud Scheduler 作业页面,选中 sparkpi 函数左侧的复选框,然后点击“删除”。

删除您的服务账号

在 Google Cloud 控制台中打开 IAM 和管理 → 服务帐号页面,选中 workflow-scheduler... 服务帐号左侧的复选框,然后点击“删除”。

后续步骤