Se o seu modelo de fluxo de trabalho for executado várias vezes com valores diferentes, pode evitar ter de editar o fluxo de trabalho de cada vez definindo parâmetros no modelo (parametrizando o modelo). Em seguida, pode transmitir valores diferentes para os parâmetros sempre que executar o modelo.
Campos parametrizáveis
Os seguintes campos de modelos de fluxo de trabalho do Dataproc podem ser parametrizados:
- Etiquetas
- URIs de ficheiros
- Nome do cluster gerido. O Dataproc usa o nome fornecido pelo utilizador como prefixo do nome e acrescenta carateres aleatórios para criar um nome de cluster único. O cluster é eliminado no final do fluxo de trabalho.
- Propriedades do serviço
- Argumentos de trabalho
- Variáveis de script (em HiveJob, SparkSqlJob e PigJob)
- Classe principal (em HadoopJob e SparkJob)
- Zona (em ClusterSelector)
- Número de instâncias (
numInstances
) num grupo de instâncias principal ou trabalhador.
Atributos de parâmetros
Os parâmetros do modelo de fluxo de trabalho são definidos com os seguintes atributos obrigatórios e opcionais:
- name (obrigatório)
- Um nome de variável no estilo Unix. Este nome vai ser usado como chave quando fornecer um valor para o parâmetro mais tarde.
- campos (obrigatório)
- Uma lista de campos que este parâmetro vai substituir (consulte os campos parametrizáveis para ver uma lista de campos que podem ser parametrizados). Cada campo é especificado como um "caminho do campo" (consulte a sintaxe do caminho do campo para ver a sintaxe a usar para especificar um caminho do campo). Tenha em atenção que um campo pode aparecer, no máximo, na lista de caminhos de campos de um parâmetro.
- descrição (opcional)
- Breve descrição do parâmetro.
- validação (opcional)
- Regras usadas para validar um valor de parâmetro, que pode ser uma das seguintes opções:
- uma lista de valores permitidos
- Uma lista de expressões regulares com as quais um valor tem de corresponder.
- uma lista de valores permitidos
Sintaxe do caminho do campo
Um caminho de campo tem uma sintaxe semelhante a um FieldMask.
Por exemplo, um caminho de campo que faça referência ao campo de zona de um seletor de cluster de um modelo de fluxo de trabalho seria especificado como placement.clusterSelector.zone
.
Os caminhos dos campos podem referenciar campos através da seguinte sintaxe:
Nome do cluster gerido:
- placement.managedCluster.clusterName
Os valores nos mapas podem ser referenciados por chave, por exemplo:
- labels['key']
- placement.clusterSelector.clusterLabels['key']
- placement.managedCluster.labels['key']
- jobs['step-id'].labels['key']
As tarefas na lista de tarefas podem ser referenciadas pelo ID do passo.
- 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]
Pode fazer referência a itens em campos repetidos através de um índice de base zero, por exemplo:
jobs['step-id'].sparkJob.args[0]
Outros exemplos:
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
Não pode parametrizar mapas nem campos repetidos na totalidade. Só é possível fazer referência a valores de mapas individuais e itens individuais em campos repetidos. Por exemplo, os seguintes caminhos de campos são inválidos:
placement.clusterSelector.clusterLabels
jobs['step-id'].sparkJob.args
Parametrize um modelo de fluxo de trabalho
Parametriza um modelo de fluxo de trabalho definindo parâmetros de modelo com a API Dataproc ou a CLI Google Cloud.
comando gcloud
Pode definir parâmetros de modelos de fluxos de trabalho criando ou exportando com a CLI do Google Cloud e editando um ficheiro YAML de modelo de fluxo de trabalho. Em seguida, importe o ficheiro com a CLI do Google Cloud para criar ou atualizar o modelo. Consulte o artigo Usar ficheiros YAML para mais informações.
Exemplo 1: exemplo de modelo de cluster gerido parametrizado
Segue-se um ficheiro YAML de modelo de fluxo de trabalho com cluster gerido teragen-terasort de exemplo com quatro parâmetros definidos: CLUSTER, NUM_ROWS, GEN_OUT e SORT_OUT. São apresentadas duas versões: uma ANTES e a outra DEPOIS da parametrização.
Antes
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
Depois
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:///.*
Exemplo 2: exemplo de modelo de fluxo de trabalho do seletor de clusters
Segue-se um ficheiro YAML de modelo de fluxo de trabalho do seletor de clusters teragen-terasort com parâmetros definidos com três parâmetros definidos: 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]
Depois de criar ou editar um ficheiro YAML que define um modelo de fluxo de trabalho com parâmetros de modelo, use o seguinte comando gcloud para importar o ficheiro YAML para criar ou atualizar o modelo parametrizado.
gcloud dataproc workflow-templates import template-ID or template-name \ --region=region \ --source=template.yaml
Pode transmitir o WorkflowTemplate
id
ou o recurso de modelo totalmente qualificado name
("projects/projectId/regions/region/workflowTemplates/template_id") para o comando. Se existir um recurso de modelo com o mesmo nome de modelo, este é
substituído (atualizado) e o respetivo número de versão é incrementado. Se não existir um modelo com o mesmo nome, este é criado.
API REST
Pode definir um ou mais WorkflowTemplate.parameters num pedido da API workflowTemplates.create ou workflowTemplates.update.
Segue-se um exemplo de um pedido workflowTemplates.create
para criar um modelo de fluxo de trabalho teragen-terasort com quatro parâmetros definidos: 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" } } } } }
Transmita parâmetros para um modelo parametrizado
Pode transmitir um conjunto diferente de valores de parâmetros sempre que executar um modelo de fluxo de trabalho parametrizado. Tem de fornecer um valor para cada parâmetro definido no modelo.
Comando gcloud
Pode transmitir um mapa de nomes de parâmetros para valores ao comando gcloud dataproc workflow-templates instantiate com a flag --parameters
. Têm de ser fornecidos todos os valores dos parâmetros definidos no modelo. Os valores fornecidos substituem os valores especificados no modelo.
Exemplo de modelo de cluster gerido parametrizado
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
Exemplo de modelo de seletor de clusters parametrizado
gcloud dataproc workflow-templates instantiate \ --parameters CLUSTER=my-cluster,NUM_ROWS=10000,OUTPUT_DIR=hdfs://some/dir
API REST
Pode transmitir um mapa parameters
de parâmetros names
para values
para a API workflowTemplates.instantiate do Dataproc. Todos os valores de parâmetros definidos no modelo têm de ser fornecidos. Os valores fornecidos substituem os valores especificados no modelo.
Exemplo:
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/" } }