Tutorial: Crie seu primeiro Databricks padrão de pacote ativo personalizado
Neste tutorial, o senhor criará um padrão de pacote ativo Databricks personalizado para criar pacotes que executam um trabalho com uma tarefa Python específica em um clustering 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.
Antes de começar
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
A primeira etapa na criação de um padrão de pacote é definir as variáveis de prompt do usuário databricks bundle init
. Na linha de comando:
-
Crie um diretório vazio chamado
dab-container-template
:shmkdir dab-container-template
-
Na raiz do diretório, crie um arquivo chamado
databricks_template_schema.json
:shcd dab-container-template
touch databricks_template_schema.json -
Adicione o conteúdo a seguir ao
databricks_template_schema.json
e salve o arquivo. Cada variável será traduzida em um prompt do usuário durante a criação 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, no diretório padrão, crie subdiretórios denominados resources
e src
. A pasta template
contém a estrutura de diretórios para seus pacotes gerados. Os nomes dos subdiretórios e arquivos seguirão a sintaxe do padrão Go pacote 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. Este exemplo usa os auxiliares padrão do bundle.
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 DLT 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
# /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
e coloque-o no diretório template/resources
. Esse novo arquivo YAML separa as definições de trabalho do projeto 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 de 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 default Databricks base Docker, mas pode especificar sua própria imagem personalizada.
Adicione arquivos referenciados em sua configuração
Em seguida, crie um diretório template/src/{{.project_name}}
e crie o arquivo Python tarefa 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. 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. Da pasta raiz do seu pacote de projetos:
mkdir my-new-container-bundle
cd my-new-container-bundle
databricks bundle init dab-container-template
Próximas etapas
- Crie um pacote que implante um Notebook em um Databricks workspace e, em seguida, execute esse Notebook implantado como um Job Databricks. Consulte Desenvolver um trabalho em Databricks usando Databricks ativo Bundles.
- Crie um pacote que implante um Notebook em um Databricks workspace e, em seguida, execute esse Notebook implantado como um DLT pipeline. Consulte Desenvolver pipeline DLT com Databricks ativo Bundles.
- Crie um pacote que implante e execute um MLOps Stack. Consulte Databricks ativo Bundles para MLOps Stacks.
- Adicionar um pacote a um fluxo de trabalho de CI/CD (integração contínua/implantação contínua) no GitHub. Veja a execução a CI/CD fluxo de trabalho com um Databricks ativo Bundle e GitHub Actions.