Parametrizzazione dei modelli di flusso di lavoro

Se il tuo modello di flusso di lavoro verrà eseguito più volte con valori diversi, puoi evitare di dover modificare il flusso di lavoro ogni volta definendo i parametri nel modello (parametrizzando il modello). Successivamente, puoi trasmettere valori diversi per i parametri ogni volta che esegui il modello.

Campi parametrizzabili

I seguenti campi del modello di flusso di lavoro di Dataproc possono essere parametrizzati:

  • Etichette
  • URI file
  • Nome del cluster gestito. Dataproc utilizzerà il nome fornito dall'utente come prefisso del nome e aggiungerà caratteri casuali per creare un nome univoco per il cluster. Il cluster viene eliminato alla fine del flusso di lavoro.
  • Proprietà job
  • Argomenti job
  • Variabili di script (in HiveJob, SparkSqlJob e PigJob)
  • Classe principale (in HadoopJob e SparkJob)
  • Zona (in ClusterSelector)
  • Numero di istanze (numInstances) in un gruppo di istanze master o worker.

Attributi dei parametri

I parametri del modello di flusso di lavoro sono definiti con i seguenti attributi obbligatori e facoltativi:

name (obbligatorio)
Un nome di variabile unix. Questo nome verrà utilizzato come chiave quando in seguito verrà fornito un valore per il parametro.
campi (obbligatori)
Un elenco di campi che questo parametro sostituirà (consulta la sezione Campi parametrizzabili per un elenco dei campi che possono essere parametrizzati). Ogni campo viene specificato come "percorso campo" (consulta la sezione Sintassi del percorso del campo per la sintassi da utilizzare per specificare il percorso di un campo). Tieni presente che un campo può essere visualizzato al massimo nell'elenco di percorsi di un parametro.
descrizione (facoltativo)
Breve descrizione del parametro.
convalida (facoltativo)
Regole utilizzate per convalidare un valore parametro, che può essere una delle seguenti:
  1. un elenco di valori consentiti
  2. un elenco di espressioni regolari a cui un valore deve corrispondere.

Sintassi del percorso del campo

La sintassi di un percorso di un campo è simile a una FieldMask. Ad esempio, un percorso di campo che fa riferimento al campo zona del selettore di cluster di un modello di flusso di lavoro sarà specificato come placement.clusterSelector.zone.

I percorsi dei campi possono fare riferimento ai campi utilizzando la seguente sintassi:

  • Nome del cluster gestito:

    • placement.managedCluster.clusterName
  • Nelle mappe è possibile fare riferimento ai valori in base a una chiave, ad esempio:

    • etichette['chiave']
    • posizionamento.clusterSelector.clusterLabels['chiave']
    • posizionamento.managedCluster.labels['key']
    • job['step-id'].labels['chiave']
  • È possibile fare riferimento ai job nell'elenco dei job tramite l'ID passaggio.

    • lavori['step-id'].hadoopJob.mainJarFileUri
    • job['step-id'].hiveJob.queryFileUri
    • job['step-id'].pySparkJob.mainPythonFileUri
    • offerte di lavoro['step-id'].hadoopJob.jarFileUris[0]
    • lavori['step-id'].hadoopJob.archiveUris[0]
    • lavori['step-id'].hadoopJob.fileUris[0]
    • job['step-id'].pySparkJob.pythonFileUris[0]

    • Gli elementi nei campi ripetuti possono essere utilizzati come riferimento da un indice in base zero, ad esempio:

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

    • Altri esempi:

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

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

    • job['step-id'].hadoopJob.properties['chiave']

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

    • placement.clusterSelector.zone

Le mappe e i campi ripetuti non possono essere parametrizzati nella loro interezza: al momento, è possibile fare riferimento solo ai singoli valori della mappa e ai singoli elementi nei campi ripetuti. Ad esempio, i seguenti percorsi di campo non sono validi:

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

Parametrizzazione di un modello di flusso di lavoro

Puoi parametrizzare un modello di flusso di lavoro definendo i parametri del modello con l'API Dataproc o Google Cloud CLI.

Comando gcloud

Puoi definire i parametri del modello di flusso di lavoro creando o esportando con Google Cloud CLI e modificando un file YAML del modello di flusso di lavoro, quindi importando il file con Google Cloud CLI per creare o aggiornare il modello. Per ulteriori informazioni, consulta Utilizzo dei file YAML.

Esempio 1: modello di cluster gestito con parametri

Di seguito è riportato un esempio di file YAML del modello teragen-terasort flusso di lavoro gestito-cluster con quattro parametri definiti: CLUSTER, NUM_ROWS, GEN_OUT e SORT_OUT. Sono elencate due versioni: una PRIMA e l'altra Dopo.

Prima

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

Dopo

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:///.*

Esempio 2: esempio di modello di flusso di lavoro del selettore di cluster

Di seguito è riportato un file YAML modello teragen-terasort cluster-selector di esempio con parametri con tre parametri definiti: CLUSTER, NUM_ROWS e 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]

Dopo aver creato o modificato un file YAML che definisce un modello di flusso di lavoro con i parametri del modello, utilizza il seguente comando gcloud per importare il file YAML e creare o aggiornare il modello con parametri.

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

Puoi passare WorkflowTemplate id o la risorsa del modello completo name ("projects/projectId/regions/region/workflowTemplates/template_id") al comando. Se esiste una risorsa del modello con lo stesso nome di modello, questa verrà sovrascritta (aggiornata) e il numero di versione verrà incrementato. Se non esiste un modello con lo stesso nome, verrà creato.

API Rest

Puoi definire uno o più WorkflowTemplate.parameters in una richiesta API workflowTemplates.create o workflowTemplates.update.

Di seguito è riportata una richiesta workflowTemplates.create di esempio per creare un modello di flusso di lavoro teragen-terasort con quattro parametri definiti: CLUSTER, NUM_ROWS, GEN_OUT e 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"
        }
      }
    }
  }
}

Passaggio di parametri a un modello con parametri

Puoi passare un insieme diverso di valori parametro ogni volta che esegui un modello di flusso di lavoro con parametri. Devi fornire un valore per ciascun parametro definito nel modello.

Comando gcloud

Puoi passare una mappa dei nomi dei parametri ai valori al comando gcloud dataproc flusso di lavoro-templates istantaneiiate con il flag --parameters. È necessario fornire tutti i valori dei parametri definiti nel modello. I valori specificati sostituiranno i valori specificati nel modello.

Esempio di modello di cluster gestito con parametri

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

Esempio di modello di selettore di cluster con parametri

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

API Rest

Puoi passare una mappa parameters del parametro names a values all'API Dataproc workflowTemplates.instantiate. Devono essere forniti tutti i valori dei parametri definiti nel modello. I valori forniti sostituiranno i valori specificati nel modello.

.

Esempio:

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/"
  }
}