使用 Cloud Scheduler 的工作流

本教程使用 Google Cloud 的以下收费组件:

  • Dataproc
  • Compute Engine
  • Cloud Scheduler

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

准备工作

设置项目

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

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

    启用 API

  5. 安装并初始化 Cloud SDK

创建自定义角色

  1. 在 Cloud Console 中打开 IAM 和管理员 → 角色页面。
    1. 点击“创建角色”。
    2. 填写“标题”、“说明”、“ID”、“发布阶段”等字段。建议:使用“Dataproc 工作流模板创建”作为角色标题。
    3. 点击“添加权限”。
    4. 添加权限表单的“过滤条件表”测试框中,选择“权限”,然后填写过滤条件以读取“权限:dataproc.workflowTemplates.instantiate”。
    5. 点击所列权限左侧的复选框,然后点击“添加”。
    6. 点击自定义角色页面上的“创建”。自定义角色列在角色页面上。

创建服务帐号

  1. 在 Cloud Console 中打开 IAM 和管理员 → 服务帐号页面。

  2. 点击“创建服务帐号”,然后完成以下步骤:

      1. 服务帐号名称:“workflow-scheduler”
      2. 服务帐号 ID(此字段应自动填充):“workflow-scheduler@your-project-id.iam.gserviceaccount”
      3. 服务帐号说明: Optional description
        1. 点击“创建”。
        2. 角色:选择具有 dataproc.workflowTemplates.instantiate 权限的自定义角色
        3. 向用户授予访问此服务帐号的权限:
          1. 服务帐号用户角色:您可以忽略此项。
          2. 服务帐号管理员角色: Insert your Google account email address
        4. 创建密钥:您可以忽略此项。
        5. 点击“完成”。

    创建工作流模板。

    在本地终端窗口或 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. 点击 Cloud Console 中的 Dataproc 工作流页面上的 sparkpi名称,打开工作流模板详细信息页面。确认 sparkpi 模板属性。

    创建 Cloud Scheduler 作业

    1. 在 Cloud Console 中打开 Cloud Scheduler 页面,然后点击“创建作业”。

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

      1. 选择一个地区:您创建工作流模板的“us-central” 或其他地区。
      2. 名称:“sparkpi”
      3. 频率:“* * * * *”表示每分钟选择一次;“0 9 * * 1”表示每个星期一上午 9 点进行选择。如需了解其他 unix-cron 值,请参阅定义作业时间表注意:无论您为作业设置的频率如何,都可以在 Cloud Console 中点击 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. 在工作流删除托管式集群后,作业详情将保留在 Cloud Console 中。点击 Dataproc 作业 页面上列出的 compute... 作业以查看工作流作业详情。

    清理

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

    删除项目

    1. 在 Cloud Console 中,转到管理资源页面。

      转到“管理资源”页面

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

    删除工作流模板

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

    删除 Cloud Schedule 作业

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

    删除您的服务帐号

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

    后续步骤