Substituir configurações de tarefa Job em pacotes ativos do Databricks

Este artigo descreve como substituir as configurações da tarefa do Databricks Job em Databricks ativo Bundles. Consulte O que são pacotes Databricks ativos?

Nos arquivos de configuração do pacote do Databricks, você pode usar o mapeamento task em uma definição Job para join as configurações de tarefas Job em um mapeamento resources de nível superior com as configurações de tarefas de Job em um mapeamento targets, por exemplo (reticências indicam conteúdo omitido, por questões de brevidade):

# ...
resources:
  jobs:
    <some-unique-programmatic-identifier-for-this-job>:
      # ...
      tasks:
        - task_key: <some-unique-programmatic-identifier-for-this-task>
          # Task settings.

targets:
  <some-unique-programmatic-identifier-for-this-target>:
    resources:
      jobs:
        <the-matching-programmatic-identifier-for-this-job>:
          # ...
          tasks:
            - task_key: <the-matching-programmatic-identifier-for-this-key>
              # Any more task settings to join with the settings from the
              # resources mapping for the matching top-level task_key.
          # ...

Para join o mapeamento resources de nível superior e o mapeamento targets para o mesmo task, o task_key dos mapeamentos task deve ser definido com o mesmo valor.

Se qualquer configuração de tarefa de Job for definida no mapeamento resources de nível superior e no mapeamento targets para o mesmo task, então a configuração no mapeamento targets terá precedência sobre a configuração no nível superior resources mapeamento.

Exemplo 1: Configurações de tarefa de Job definidas em múltiplos mapeamentos de recursos e sem conflitos de configurações

Neste exemplo, spark_version no mapeamento resources de nível superior é combinado com node_type_id e num_workers no mapeamento resources em targets para definir as configurações para o task_key denominado my-task ( reticências indicam conteúdo omitido, por questões de brevidade):

# ...
resources:
  jobs:
    my-job:
      name: my-job
      tasks:
        - task_key: my-key
          new_cluster:
            spark_version: 13.3.x-scala2.12

targets:
  development:
    resources:
      jobs:
        my-job:
          name: my-job
          tasks:
            - task_key: my-task
              new_cluster:
                node_type_id: n2-highmem-4
                num_workers: 1
          # ...

Quando você executa databricks bundle validate para este exemplo, o gráfico resultante é o seguinte (as reticências indicam o conteúdo omitido, por questões de brevidade):

{
  "...": "...",
  "resources": {
    "jobs": {
      "my-job": {
        "tasks": [
          {
            "new_cluster": {
              "node_type_id": "n2-highmem-4",
              "num_workers": 1,
              "spark_version": "13.3.x-scala2.12"
            },
            "task-key": "my-task"
          }
        ],
        "...": "..."
      }
    }
  }
}

Exemplo 2: Configurações de tarefa Job conflitantes definidas em vários mapeamentos de recursos

Neste exemplo, spark_version e num_workers são definidos no mapeamento resources de nível superior e no mapeamento resources em targets. spark_version e num_workers no mapeamento resources em targets têm precedência sobre spark_version e num_workers no mapeamento resources de nível superior. Isso define as configurações para o task_key denominado my-task (reticências indicam conteúdo omitido, por questões de brevidade):

# ...
resources:
  jobs:
    my-job:
      name: my-job
      tasks:
        - task_key: my-task
          new_cluster:
            spark_version: 13.3.x-scala2.12
            node_type_id: n2-highmem-4
            num_workers: 1

targets:
  development:
    resources:
      jobs:
        my-job:
          name: my-job
          tasks:
            - task_key: my-task
              new_cluster:
                spark_version: 12.2.x-scala2.12
                num_workers: 2
          # ...

Quando você executa databricks bundle validate para este exemplo, o gráfico resultante é o seguinte (as reticências indicam o conteúdo omitido, por questões de brevidade):

{
  "...": "...",
  "resources": {
    "jobs": {
      "my-job": {
        "tasks": [
          {
            "new_cluster": {
              "node_type_id": "n2-highmem-4",
              "num_workers": 2,
              "spark_version": "12.2.x-scala2.12"
            },
            "task_key": "my-task"
          }
        ],
        "...": "..."
      }
    }
  }
}