Se il 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). In seguito, puoi passare valori diversi per i parametri ogni volta che esegui il modello.
Campi parametrizzabili
I seguenti campi del modello di flusso di lavoro Dataproc possono essere parametrizzati:
- Etichette
- URI file
- Nome del cluster gestito. Dataproc utilizzerà il nome fornito dall'utente come prefisso e aggiugnerà 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 vengono definiti con i seguenti attributi obbligatori e facoltativi:
- nome (obbligatorio)
- Un nome di variabile in stile Unix. Questo nome verrà utilizzato come chiave quando fornisci un del parametro in un secondo momento.
- campi (obbligatorio)
- Un elenco dei campi che verranno sostituiti da questo parametro (vedi Campi parametrizzabili per un elenco di campi che possono essere parametrizzati). Ogni campo viene specificato come "percorso del campo" (vedi Sintassi del percorso del campo per per specificare un percorso campo). Tieni presente che un campo può compaiono al massimo nell'elenco di percorsi dei campi di un parametro.
- description (facoltativo)
- Breve descrizione del parametro.
- validation (facoltativo)
- Regole utilizzate per convalidare un valore parametro, che può essere uno dei seguenti:
- un elenco di valori consentiti
- un elenco di espressioni regolari che devono corrispondere a un valore.
- un elenco di valori consentiti
Sintassi del percorso del campo
La sintassi di un percorso del campo è simile a quella di un
FieldMask.
Ad esempio, un percorso del campo che fa riferimento al campo della zona del selettore di cluster di un modello di flusso di lavoro viene 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
È possibile fare riferimento ai valori nelle mappe tramite una chiave, ad esempio:
- etichette['chiave']
- posizionamento.clusterSelector.clusterEtichette['key']
- posizionamento.managedCluster.labels['key']
- job['step-id'].labels['key']
È possibile fare riferimento ai job nell'elenco dei job tramite step-id.
- job['step-id'].hadoopJob.mainJarFileUri
- job['step-id'].hiveJob.queryFileUri
- job['step-id'].pySparkJob.mainPythonFileUri
- jobs['step-id'].hadoopJob.jarFileUris[0]
- job['step-id'].hadoopJob.ArchiveUris[0]
- job['step-id'].hadoopJob.fileUris[0]
lavori['step-id'].pySparkJob.pythonFileUris[0]
È possibile fare riferimento agli elementi nei campi ripetuti tramite un indice in base zero, ad esempio:
jobs['step-id'].sparkJob.args[0]
Altri esempi:
job['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
Le mappe e i campi ripetuti non possono essere parametrizzati per intero: al momento, solo i singoli valori della mappa e i singoli elementi nei campi ripetuti ai quali fare riferimento. Ad esempio, i seguenti percorsi dei campi 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 relativi parametri con l'API Dataproc o l'interfaccia a riga di comando Google Cloud.
Comando gcloud
Puoi definire i parametri del modello di flusso di lavoro creando o esportando Google Cloud CLI e modifica, un file YAML modello di flusso di lavoro, importando il file con Google Cloud CLI per creare o aggiornare il modello. Per ulteriori informazioni, consulta la sezione Utilizzo dei file YAML.
Esempio 1: modello di cluster gestito con parametri
Di seguito è riportato un esempio di teragen-terasort flusso di lavoro per cluster gestiti modello YAML con quattro parametri definiti: CLUSTER, NUM_ROWS, GEN_OUT e SORT_OUT. Sono elencate due versioni: una BEFORE e l'altra DOPO la parametrizzazione.
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: modello di flusso di lavoro del selettore di cluster
Di seguito è riportato un campione con parametri teragen-terasort flusso di lavoro del selettore cluster modello YAML 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 parametri del modello, utilizza il seguente comando gcloud per importare il file YAML per creare o aggiornare il modello parametrizzato.
gcloud dataproc workflow-templates import template-ID or template-name \ --region=region \ --source=template.yaml
Puoi passare al comando il valore WorkflowTemplateid
o la risorsa modello completa name
("projects/projectId/regions/region/workflowTemplates/template_id"). Se esiste una risorsa modello con lo stesso nome, verrà sovrascritta (aggiornata) e il relativo numero di versione verrà incrementato. Se
modello con lo stesso nome modello non esiste, verrà creato.
API Rest
Puoi definire uno o più parametri WorkflowTemplate 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 dei 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 a ogni parametro definito nel modello.
Comando gcloud
Puoi passare una mappa dei nomi dei parametri ai valori
Il comando gcloud dataproc workflow-templates snapshotiate con il flag --parameters
. Tutti
è necessario specificare i valori dei parametri definiti nel modello. La
i valori forniti sostituiranno i valori specificati nel modello.
Esempio di modello di cluster gestito parametrizzato
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 cluster con parametri
gcloud dataproc workflow-templates instantiate \ --parameters CLUSTER=my-cluster,NUM_ROWS=10000,OUTPUT_DIR=hdfs://some/dir
API Rest
Puoi trasmettere un
Mappa parameters
del parametro da names
a values
a Dataproc
workflowTemplates.instantiate
tramite Google Cloud CLI
o tramite l'API Compute Engine. Tutti i valori dei parametri definiti nel modello devono essere forniti. I valori forniti sostituiranno i valori specificati nei
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/" } }