Pular para o conteúdo principal

Crie um pacote personalizado padrão

Neste tutorial, você criará um padrão personalizado para criar Pacotes de Automação Declarativa que executam um Job com uma tarefa Python em um cluster usando uma imagem de contêiner Docker específica.

Para obter informações sobre o padrão de pacote personalizado, consulte Padrão de pacote personalizado.

nota

Imagens personalizadas de contêineres do Docker não são compatíveis com o Google Cloud.

Requisitos

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

Definir variáveis de solicitação do usuário

Primeiro, defina as variáveis de prompt do usuário databricks bundle init . A partir da linha de comando:

  1. Crie uma pasta vazia chamada dab-container-template:

    sh
    mkdir dab-container-template
  2. Na raiz da pasta, crie um arquivo chamado databricks_template_schema.json:

    sh
    cd dab-container-template
    touch databricks_template_schema.json
  3. Adicione o seguinte JSON ao arquivo databricks_template_schema.json para definir uma solicitação ao usuário para o nome do projeto do pacote:

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

Crie a estrutura de pastas do pacote

Em seguida, crie uma pasta template para conter a estrutura de pastas dos seus pacotes gerados. Os nomes dos subdiretórios e arquivos seguem a sintaxe do pacote padrão do Go.

Este padrão cria a pasta do projeto de pacote com base no nome do projeto fornecido:

sh
mkdir -p "template/{{.project_name}}"

Agora crie os subdiretórios resources e src para os arquivos do pacote:

sh
mkdir -p "template/{{.project_name}}/resources"
mkdir -p "template/{{.project_name}}/src"

Adicionar padrão de configuração YAML

Na pasta template/{{.project_name}} , crie um arquivo chamado databricks.yml.tmpl:

sh
touch template/{{.project_name}}/databricks.yml.tmpl

Adicione o seguinte YAML a databricks.yml.tmpl. Este exemplo utiliza os auxiliares do pacote padrão.

YAML
# This is a 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 :re[LDP].
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
# /Workspace/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 na pasta template/{{.project_name}}/resources . Este novo arquivo YAML contém a definição da tarefa.

sh
touch template/{{.project_name}}/resources/{{.project_name}}_job.yml.tmpl

Adicione o seguinte YAML a este arquivo para descrever o Job padrão, que contém uma tarefa Python a ser executada em um cluster de Jobs usando uma imagem de contêiner Docker específica. Este exemplo usa uma imagem de contêiner Docker default Databricks , mas você pode especificar sua própria imagem personalizada.

YAML
# 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/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

Adicione arquivos referenciados em sua configuração

Em seguida, crie o arquivo de tarefa Python referenciado pelo Job no padrão:

sh
touch template/{{.project_name}}/src/task.py

Agora, adicione o seguinte a task.py:

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

Verificar a estrutura padrão do pacote

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

dab-container-template
├── databricks_template_schema.json
└── template
├── {{.project_name}}
├── databricks.yml.tmpl
├── resources
│ └── {{.project_name}}_job.yml.tmpl
└── src
└── 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. Da pasta raiz do seu pacote de projetos:

sh
databricks bundle init dab-container-template

Próximas etapas

recurso