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). Poi, 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 del nome e aggiungerà caratteri casuali per creare un nome del cluster univoco. Il cluster viene eliminato alla fine del flusso di lavoro.
- Proprietà del job
- Argomenti del job
- Variabili 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 in stile Unix. Questo nome verrà utilizzato come chiave quando fornisci un valore per il parametro in un secondo momento.
- fields (obbligatorio)
- Un elenco di campi che questo parametro sostituirà (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 la sintassi da utilizzare per specificare un percorso del campo). Tieni presente che un campo può essere visualizzato al massimo nell'elenco dei percorsi dei campi di un parametro.
- description (facoltativo)
- Breve descrizione del parametro.
- validation (facoltativo)
- Regole utilizzate per convalidare un valore del parametro, che può essere una delle seguenti:
- Un elenco di valori consentiti
- Un elenco di espressioni regolari a cui un valore deve corrispondere.
- Un elenco di valori consentiti
Sintassi del percorso del campo
La sintassi di un percorso del campo è simile a un
FieldMask.
Ad esempio, un percorso del campo che fa riferimento al campo della zona di un selettore di cluster di un modello di flusso di lavoro
verrebbe 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 per chiave, ad esempio:
- labels['key']
- placement.clusterSelector.clusterLabels['key']
- placement.managedCluster.labels['key']
- jobs['step-id'].labels['key']
È possibile fare riferimento ai job nell'elenco dei job per 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]
È possibile fare riferimento agli elementi nei campi ripetuti tramite un indice in base zero, ad esempio:
jobs['step-id'].sparkJob.args[0]
Altri esempi:
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
Non puoi parametrizzare le mappe e i campi ripetuti nella loro interezza. È possibile fare riferimento solo ai singoli valori delle mappe e ai singoli elementi nei campi ripetuti. Ad esempio, i seguenti percorsi dei campi non sono validi:
placement.clusterSelector.clusterLabels
jobs['step-id'].sparkJob.args
Parametrizzare 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 g-cloud
Puoi definire i parametri del modello di flusso di lavoro creando o esportando con il 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, vedi Utilizzare i file YAML.
Esempio 1: esempio di modello di cluster gestito parametrizzato
Di seguito è riportato un esempio di file YAML del modello di flusso di lavoro del cluster gestito teragen-terasort con quattro parametri definiti: CLUSTER, NUM_ROWS, GEN_OUT e SORT_OUT. Sono elencate due versioni: una PRIMA 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: esempio di modello di flusso di lavoro del selettore di cluster
Di seguito è riportato un esempio di file YAML del modello di flusso di lavoro del selettore di cluster teragen-terasort cluster-selector workflow parametrizzato 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
WorkflowTemplate
id o la risorsa del modello con nome completo name
("projects/projectId/regions/region/workflowTemplates/template_id"). Se esiste una risorsa modello con lo stesso nome del modello, verrà
sovrascritta (aggiornata) e il relativo numero di versione verrà incrementato. Se non esiste un
modello con lo stesso nome del modello, verrà creato.
API REST
Puoi definire uno o più WorkflowTemplate.parameters in una workflowTemplates.create o una 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"
}
}
}
}
}
Passare i parametri a un modello parametrizzato
Puoi passare un insieme diverso di valori dei parametri ogni volta che esegui un modello di flusso di lavoro parametrizzato. Devi fornire un valore per ogni parametro definito nel modello.
Comando g-cloud
Puoi passare una mappa di nomi di parametri a valori al
comando gcloud dataproc workflow-templates instantiate con il --parameters flag. Devi fornire tutti i valori dei parametri definiti nel modello. 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 di cluster parametrizzato
gcloud dataproc workflow-templates instantiate \
--parameters CLUSTER=my-cluster,NUM_ROWS=10000,OUTPUT_DIR=hdfs://some/dir
API REST
Puoi passare una
parameters mappa
di names a values
all'API Dataproc
workflowTemplates.instantiate. Devi fornire 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/"
}
}