Parametrização de modelos de fluxo de trabalho

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:
  1. uma lista de valores permitidos
  2. Uma lista de expressões regulares com as quais um valor tem de corresponder.

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