Tutorial: Crie seu primeiro Databricks personalizado Pacote ativo padrão

Neste tutorial, você criará um padrão de pacote ativo personalizado do Databricks para criar pacotes que executam um Job com uma tarefa Python específica em um cluster usando uma imagem de contêiner Docker específica.

Antes de começar

Instale o Databricks CLI versão 0.205 ou superior. Se o senhor já o tiver instalado, confirme se a versão é 0.205 ou superior executando databricks -version na linha de comando.

Definir variáveis de prompt do usuário

O primeiro passo na criação de um pacote padrão é definir as variáveis de prompt do usuário databricks bundle init. Na linha de comando:

  1. Crie um diretório vazio chamado dab-container-template:

    mkdir dab-container-template
    
  2. Na raiz do diretório, crie um arquivo chamado databricks_template_schema.json:

    cd dab-container-template
    touch databricks_template_schema.json
    
  3. Adicione o seguinte conteúdo ao databricks_template_schema.json e salve o arquivo. Cada variável será traduzida em um prompt de usuário durante a criação do pacote.

    {
      "properties": {
        "project_name": {
          "type": "string",
          "default": "project_name",
          "description": "Project name",
          "order": 1
        }
      }
    }
    

Criar a estrutura de pastas do pacote

Em seguida, no diretório padrão, crie subdiretórios denominados resources e src. A pasta template contém a estrutura de diretórios para os pacotes gerados. Os nomes dos subdiretórios e arquivos seguirão a sintaxe do padrão do pacote Go quando derivados dos valores do usuário.

  mkdir -p "template/resources"
  mkdir -p "template/src"

Adicionar padrão de configuração YAML

No diretório template, crie um arquivo chamado databricks.yml.tmpl e adicione o seguinte YAML:

  touch template/databricks.yml.tmpl
  # This is a Databricks asset bundle definition for {{.project_name}}.
  # See https://docs.databricks.com/dev-tools/bundles/index.html for documentation.
  bundle:
    name: {{.project_name}}

  include:
    - resources/*.yml

  targets:
    # The 'dev' target, used for development purposes.
    # Whenever a developer deploys using 'dev', they get their own copy.
    dev:
      # We use 'mode: development' to make sure everything deployed to this target gets a prefix
      # like '[dev my_user_name]'. Setting this mode also disables any schedules and
      # automatic triggers for jobs and enables the 'development' mode for Delta Live Tables pipelines.
      mode: development
      default: true
      workspace:
        host: {{workspace_host}}

    # The 'prod' target, used for production deployment.
    prod:
      # For production deployments, we only have a single copy, so we override the
      # workspace.root_path default of
      # /Users/${workspace.current_user.userName}/.bundle/${bundle.target}/${bundle.name}
      # to a path that is not specific to the current user.
      #
      # By making use of 'mode: production' we enable strict checks
      # to make sure we have correctly configured this target.
      mode: production
      workspace:
        host: {{workspace_host}}
        root_path: /Shared/.bundle/prod/${bundle.name}
      {{- if not is_service_principal}}
      run_as:
        # This runs as {{user_name}} in production. Alternatively,
        # a service principal could be used here using service_principal_name
        # (see Databricks documentation).
        user_name: {{user_name}}
      {{end -}}

Crie outro arquivo YAML chamado {{.project_name}}_job.yml.tmpl e coloque-o no diretório template/resources. Esse novo arquivo YAML separa as definições do projeto Job do restante da definição do pacote. Adicione o seguinte YAML a esse arquivo para descrever o padrão Job, que contém uma tarefa Python específica para execução em um cluster Job usando uma imagem de contêiner Docker específica:

  touch template/resources/{{.project_name}}_job.yml.tmpl
  # The main job for {{.project_name}}
  resources:
    jobs:
      {{.project_name}}_job:
        name: {{.project_name}}_job
        tasks:
          - task_key: python_task
            job_cluster_key: job_cluster
            spark_python_task:
              python_file: ../src/{{.project_name}}/task.py
        job_clusters:
          - job_cluster_key: job_cluster
            new_cluster:
              docker_image:
                url: databricksruntime/python:10.4-LTS
              node_type_id: i3.xlarge
              spark_version: 13.3.x-scala2.12

Neste exemplo, o senhor usa uma imagem de contêiner Docker de base da default Databricks, mas pode especificar sua própria imagem personalizada.

Adicionar arquivos referenciados em sua configuração

Em seguida, crie um diretório template/src/{{.project_name}} e crie o arquivo de tarefa Python referenciado pelo Job no padrão:

  mkdir -p template/src/{{.project_name}}
  touch template/src/{{.project_name}}/task.py

Agora, adicione o seguinte a task.py:

  import pyspark
  from pyspark.sql import SparkSession

  spark = SparkSession.builder.master('local[*]').appName('example').getOrCreate()

  print(f'Spark version{spark.version}')

Verificar a estrutura padrão do pacote

Examine a estrutura de pastas do projeto padrão do pacote. Ele deve ter a seguinte aparência:

  .
  ├── databricks_template_schema.json
  └── template
      ├── databricks.yml.tmpl
      ├── resources
         └── {{.project_name}}_job.yml.tmpl
      └── src
          └── {{.project_name}}
              └── task.py

Teste seu padrão

Por fim, teste o padrão do pacote. Para gerar um pacote com base em seu novo padrão personalizado, use o comando databricks bundle init, especificando o novo local do padrão. Na pasta raiz de seus projetos de pacote:

mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template

Próximos passos