Parameterisasi template alur kerja

Jika template alur kerja akan dijalankan beberapa kali dengan nilai yang berbeda, Anda tidak perlu mengedit alur kerja setiap kali dengan menentukan parameter dalam template (membuat parameter template). Kemudian, Anda dapat meneruskan nilai yang berbeda untuk parameter setiap kali Anda menjalankan template.

Kolom yang Dapat Diparameterkan

Kolom template alur kerja Dataproc berikut dapat diparameterkan:

  • Label
  • URI File
  • Nama Managed cluster. Dataproc akan menggunakan nama yang diberikan pengguna sebagai awalan nama, dan menambahkan karakter acak untuk membuat nama cluster yang unik. Cluster dihapus di akhir alur kerja.
  • Properti tugas
  • Argumen tugas
  • Variabel skrip (di HiveJob, SparkSqlJob, dan PigJob)
  • Main class (di HadoopJob dan SparkJob)
  • Zona (di ClusterSelector)
  • Jumlah Instance (numInstances) dalam grup instance master atau worker.

Atribut parameter

Parameter template alur kerja ditentukan dengan atribut wajib dan opsional berikut:

nama (wajib diisi)
Nama variabel gaya Unix. Nama ini akan digunakan sebagai kunci saat memberikan nilai untuk parameter nanti.
kolom (wajib diisi)
Daftar kolom yang akan digantikan oleh parameter ini (lihat Kolom yang Dapat Diparameterkan untuk daftar kolom yang dapat diparameterkan). Setiap kolom ditentukan sebagai "jalur kolom" (lihat Sintaksis Jalur Kolom untuk sintaksis yang akan digunakan untuk menentukan jalur kolom). Perhatikan bahwa kolom diizinkan muncul di daftar jalur kolom paling banyak satu parameter.
deskripsi (opsional)
Deskripsi singkat parameter.
validasi (opsional)
Aturan yang digunakan untuk memvalidasi nilai parameter, yang dapat berupa salah satu dari:
  1. daftar nilai yang diizinkan
  2. daftar ekspresi reguler yang harus cocok dengan nilai.

Sintaksis jalur kolom

Jalur kolom memiliki sintaksis yang mirip dengan FieldMask. Misalnya, jalur kolom yang mereferensikan kolom zona pemilih cluster template alur kerja akan ditentukan sebagai placement.clusterSelector.zone.

Jalur kolom dapat mereferensikan kolom menggunakan sintaksis berikut:

  • Nama cluster terkelola:

    • placement.managedCluster.clusterName
  • Nilai dalam peta dapat dirujuk berdasarkan kunci, misalnya:

    • labels['key']
    • placement.clusterSelector.clusterLabels['key']
    • placement.managedCluster.labels['key']
    • jobs['step-id'].labels['key']
  • Tugas dalam daftar tugas dapat dirujuk berdasarkan step-id.

    • jobs['step-id'].hadoopJob.mainJarFileUri
    • jobs['step-id'].hiveJob.queryFileUri
    • jobs['step-id'].pySparkJob.mainPythonFileUri
    • jobs['step-id'].hadoopJob.jarFileUris[0]
    • jobs['step-id'].hadoopJob.archiveUris[0]
    • jobs['step-id'].hadoopJob.fileUris[0]
    • jobs['step-id'].pySparkJob.pythonFileUris[0]

    • Item dalam kolom berulang dapat dirujuk oleh indeks berbasis nol, misalnya:

    • jobs['step-id'].sparkJob.args[0]

    • Contoh lainnya:

    • jobs['step-id'].hadoopJob.args[0]

    • jobs['step-id'].hadoopJob.mainJarFileUri

    • jobs['step-id'].hadoopJob.properties['key']

    • jobs['step-id'].hiveJob.scriptVariables['key']

    • placement.clusterSelector.zone

Anda tidak dapat memarameterkan peta dan kolom berulang secara keseluruhan. Hanya nilai peta individual dan item individual dalam kolom berulang yang dapat dirujuk. Misalnya, jalur kolom berikut tidak valid:

placement.clusterSelector.clusterLabels
jobs['step-id'].sparkJob.args

Membuat parameter template alur kerja

Anda memparameterisasi template alur kerja dengan menentukan parameter template menggunakan Dataproc API atau Google Cloud CLI.

Perintah gcloud

Anda dapat menentukan parameter template alur kerja dengan membuat, atau mengekspor dengan Google Cloud CLI dan mengedit, file YAML template alur kerja, lalu mengimpor file dengan Google Cloud CLI untuk membuat atau memperbarui template. Lihat Menggunakan file YAML untuk mengetahui informasi selengkapnya.

Contoh 1: Contoh template managed-cluster berparameter

Berikut adalah contoh file YAML template alur kerja cluster terkelola teragen-terasort dengan empat parameter yang ditentukan: CLUSTER, NUM_ROWS, GEN_OUT, dan SORT_OUT. Dua versi tercantum: satu SEBELUM dan yang lainnya SETELAH parameterisasi.

Sebelum

placement:
  managedCluster:
    clusterName: my-managed-cluster
    config:
      gceClusterConfig:
        zoneUri: us-central1-a
jobs:
- hadoopJob:
    args:
    - teragen
    - '10000'
    - hdfs:///gen/
    mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
  stepId: teragen
- hadoopJob:
    args:
    - terasort
    - hdfs:///gen/
    - hdfs:///sort/
    mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
  prerequisiteStepIds:
  - teragen
  stepId: terasort

Setelah

placement:
  managedCluster:
    clusterName: 'to-be-determined'
    config:
      gceClusterConfig:
        zoneUri: us-central1-a
jobs:
- hadoopJob:
    args:
    - teragen
    - '10000'
    - hdfs:///gen/
    mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
  stepId: teragen
- hadoopJob:
    args:
    - terasort
    - hdfs:///gen/
    - hdfs:///sort/
    mainJarFileUri: file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar
  prerequisiteStepIds:
  - teragen
  stepId: terasort
parameters:
- description: The managed cluster name prefix
  fields:
  - placement.managedCluster.clusterName
  name: CLUSTER
- description: The number of rows to generate
  fields:
  - jobs['teragen'].hadoopJob.args[1]
  name: NUM_ROWS
  validation:
    values:
      values:
      - '1000'
      - '10000'
      - '100000'
- description: Output directory for teragen
  fields:
  - jobs['teragen'].hadoopJob.args[2]
  - jobs['terasort'].hadoopJob.args[1]
  name: GEN_OUT
  validation:
    regex:
      regexes:
      - hdfs:///.*
- description: Output directory for terasort
  fields:
  - jobs['terasort'].hadoopJob.args[2]
  name: SORT_OUT
  validation:
    regex:
      regexes:
      - hdfs:///.*

Contoh 2: Contoh template alur kerja pemilih cluster

Berikut adalah contoh file YAML template alur kerja cluster-selector teragen-terasort yang diparameterkan dengan tiga parameter yang ditentukan: CLUSTER, NUM_ROWS, dan OUTPUT_DIR.

placement:
  clusterSelector:
    clusterLabels:
      goog-dataproc-cluster-name: 'to-be-determined'
jobs:
  - stepId: teragen
    hadoopJob:
      args:
      - 'teragen'
      - 'tbd number of rows'
      - 'tbd output directory'
parameters:
- name: CLUSTER
  fields:
  - placement.clusterSelector.clusterLabels['goog-dataproc-cluster-name']
- name: NUM_ROWS
  fields:
  - jobs['teragen'].hadoopJob.args[1]
- name: OUTPUT_DIR
  fields:
  - jobs['teragen'].hadoopJob.args[2]

Setelah membuat atau mengedit file YAML yang menentukan template alur kerja dengan parameter template, gunakan perintah gcloud berikut untuk mengimpor file YAML guna membuat atau memperbarui template berparameter.

gcloud dataproc workflow-templates import template-ID or template-name \
    --region=region \
    --source=template.yaml

Anda dapat meneruskan WorkflowTemplate id atau resource template yang sepenuhnya memenuhi syarat name ("projects/projectId/regions/region/workflowTemplates/template_id") ke perintah. Jika ada resource template dengan nama template yang sama, resource tersebut akan ditimpa (diperbarui) dan nomor versinya akan bertambah. Jika template dengan nama template yang sama tidak ada, template tersebut akan dibuat.

Rest API

Anda dapat menentukan satu atau beberapa WorkflowTemplate.parameters dalam permintaan API workflowTemplates.create atau workflowTemplates.update.

Berikut adalah contoh permintaan workflowTemplates.create untuk membuat template alur kerja teragen-terasort dengan empat parameter yang ditentukan: CLUSTER, NUM_ROWS, GEN_OUT, dan SORT_OUT.

POST https://dataproc.googleapis.com/v1/projects/my-project/locations/us-central1/workflowTemplates
{
  "id": "my-template",
  "jobs": [
    {
      "stepId": "teragen",
      "hadoopJob": {
        "mainJarFileUri": "file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar",
        "args": [
          "teragen",
          "10000",
          "hdfs:///gen/"
        ]
      }
    },
    {
      "stepId": "terasort",
      "prerequisiteStepIds": [
        "teragen"
      ],
      "hadoopJob": {
        "mainJarFileUri": "file:///usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar",
        "args": [
          "terasort",
          "hdfs:///gen/",
          "hdfs:///sort/"
        ]
      }
    }
  ],
  "parameters": [
    {
      "name": "CLUSTER",
      "fields": [
        "placement.managedCluster.clusterName"
      ],
      "description": "The managed cluster name prefix"
    },
    {
      "name": "NUM_ROWS",
      "fields": [
        "jobs['teragen'].hadoopJob.args[1]"
      ],
      "description": "The number of rows to generate",
      "validation": {
        "values": {
          "values": [
            "1000",
            "10000",
            "100000"
          ]
        }
      }
    },
    {
      "name": "GEN_OUT",
      "fields": [
        "jobs['teragen'].hadoopJob.args[2]",
        "jobs['terasort'].hadoopJob.args[1]"
      ],
      "description": "Output directory for teragen",
      "validation": {
        "regex": {
          "regexes": [
            "hdfs:///.*"
          ]
        }
      }
    },
    {
      "name": "SORT_OUT",
      "fields": [
        "jobs['terasort'].hadoopJob.args[2]"
      ],
      "description": "Output directory for terasort",
      "validation": {
        "regex": {
          "regexes": [
            "hdfs:///.*"
          ]
        }
      }
    }
  ],
  "placement": {
    "managedCluster": {
      "clusterName": "to-be-determined",
      "config": {
        "gceClusterConfig": {
          "zoneUri": "us-central1-a"
        }
      }
    }
  }
}

Meneruskan parameter ke template berparameter

Anda dapat meneruskan serangkaian nilai parameter yang berbeda setiap kali menjalankan template alur kerja berparameter. Anda harus memberikan nilai untuk setiap parameter yang ditentukan dalam template.

Perintah gcloud

Anda dapat meneruskan peta nama parameter ke nilai ke perintah gcloud dataproc workflow-templates instantiate dengan tanda --parameters. Semua nilai parameter yang ditentukan dalam template harus diberikan. Nilai yang diberikan akan menggantikan nilai yang ditentukan dalam template.

Contoh template cluster terkelola berparameter

gcloud dataproc workflow-templates instantiate my-template \
    --region=region \
    --parameters=CLUSTER=cluster,NUM_ROWS=1000,GEN_OUT=hdfs:///gen_20180601/,SORT_OUT=hdfs:///sort_20180601

Contoh template pemilih cluster berparameter

gcloud dataproc workflow-templates instantiate \
  --parameters CLUSTER=my-cluster,NUM_ROWS=10000,OUTPUT_DIR=hdfs://some/dir
    

Rest API

Anda dapat meneruskan peta parameters parameter names ke values ke API workflowTemplates.instantiate Dataproc. Semua nilai parameter yang ditentukan dalam template harus diberikan. Nilai yang diberikan akan menggantikan nilai yang ditentukan dalam template.

.

Contoh:

POST https://dataproc.googleapis.com/v1/projects/my-project/regions/us-central1/workflowTemplates/my-template:instantiate
{
  "parameters": {
    "CLUSTER": "clusterA",
    "NUM_ROWS": "1000",
    "GEN_OUT": "hdfs:///gen_20180601/",
    "SORT_OUT": "hdfs:///sort_20180601/"
  }
}