Compartir a través de


Ejemplos de configuración de paquetes

En este artículo se proporciona una configuración de ejemplo para las características de Agrupaciones de recursos de Databricks y los casos de uso comunes de agrupación.

Los ejemplos de agrupación completos, descritos en la tabla siguiente, están disponibles en el repositorio de GitHub bundle-examples:

Nombre del lote Descripción
app_with_database Un paquete con una aplicación de Databricks respaldada por una base de datos Postgres OLTP
dashboard_nyc_taxi Un paquete con un panel de IA/BI y una tarea que captura una instantánea del panel y envía por correo electrónico a un suscriptor.
database_with_catalog Conjunto que define una instancia de base de datos OLTP y un catálogo de bases de datos
databricks_app Un paquete que define una aplicación de Databricks
development_cluster Paquete que define y usa un clúster para desarrollo (multiuso)
job_read_secret Agrupación que define un ámbito secreto y un trabajo con una tarea que lee en él
job_with_multiple_wheels Una agrupación que define y usa un trabajo con dependencias de varias ruedas
job_with_run_job_tasks Una agrupación con varios trabajos con tareas de ejecución
job_with_sql_notebook Una agrupación con un trabajo que usa una tarea de cuaderno de SQL
pipeline_with_schema Un paquete que define un esquema de Catálogo de Unity y una tubería que lo usa
private_wheel_packages Una agrupación que usa un paquete de rueda privado de un trabajo
python_wheel_poetry Una agrupación que construye un whl con Poetry
trabajo_sin_servidor Un paquete que utiliza computación sin servidor para ejecutar una tarea
compartir_archivos_a_través_de_paquetes Lote que incluye archivos ubicados fuera del directorio raíz del lote.
spark_jar_task Agrupación que define y usa una tarea JAR de Spark
write_from_job_to_volume Un paquete que escribe un archivo en un volumen del Catálogo Unity

Escenarios de paquetes

Esta sección contiene ejemplos de configuración que muestran el uso de mapeos de paquetes de nivel superior. Consulte Referencia de configuración.

paquete que carga un archivo JAR en el catálogo de Unity

Puede especificar volúmenes de Unity Catalog como una ruta de acceso de artefacto para que todos los artefactos, como archivos JAR y archivos de rueda, se carguen en volúmenes del Unity Catalog. En el siguiente paquete de ejemplo se compila y carga un archivo JAR en el catálogo de Unity. Para obtener información sobre la asignación de artifact_path, vea artifact_path. Para obtener información sobre artifacts, consulte artefactos.

bundle:
  name: jar-bundle

workspace:
  host: https://myworkspace.cloud.databricks.com
  artifact_path: /Volumes/main/default/my_volume

artifacts:
  my_java_code:
    path: ./sample-java
    build: 'javac PrintArgs.java && jar cvfm PrintArgs.jar META-INF/MANIFEST.MF PrintArgs.class'
    files:
      - source: ./sample-java/PrintArgs.jar

resources:
  jobs:
    jar_job:
      name: 'Spark Jar Job'
      tasks:
        - task_key: SparkJarTask
          new_cluster:
            num_workers: 1
            spark_version: '14.3.x-scala2.12'
            node_type_id: 'i3.xlarge'
          spark_jar_task:
            main_class_name: PrintArgs
          libraries:
            - jar: ./sample-java/PrintArgs.jar

Configuración del trabajo

Esta sección contiene ejemplos de configuración de trabajos. Para obtener más información sobre la configuración del trabajo, consulte trabajo.

Trabajo que usa cómputo sin servidor

Las agrupaciones de recursos de Databricks admiten trabajos que se ejecutan en proceso sin servidor. Consulte Ejecute sus trabajos de Lakeflow con computación sin servidor para flujos de trabajo. Para configurarlo, puede omitir la configuración de clusters para un trabajo con una tarea de cuaderno, o bien puede especificar un entorno como se muestra en los ejemplos siguientes. En el caso de las tareas de script de Python, de wheel de Python y de dbt, se requiere environment_key para el proceso sin servidor. Consulte environment_key.

# A serverless job (no cluster definition)
resources:
  jobs:
    serverless_job_no_cluster:
      name: serverless_job_no_cluster

      email_notifications:
        on_failure:
          - someone@example.com

      tasks:
        - task_key: notebook_task
          notebook_task:
            notebook_path: ../src/notebook.ipynb
# A serverless job (environment spec)
resources:
  jobs:
    serverless_job_environment:
      name: serverless_job_environment

      tasks:
        - task_key: task
          spark_python_task:
            python_file: ../src/main.py

          # The key that references an environment spec in a job.
          # https://docs.databricks.com/api/workspace/jobs/create#tasks-environment_key
          environment_key: default

      # A list of task execution environment specifications that can be referenced by tasks of this job.
      environments:
        - environment_key: default

          # Full documentation of this spec can be found at:
          # https://docs.databricks.com/api/workspace/jobs/create#environments-spec
          spec:
            environment_version: '2'
            dependencies:
              - my-library

Trabajo con archivos de varias ruedas

En las configuraciones de ejemplo siguientes se define una agrupación que contiene un trabajo con varios *.whl archivos.

# job.yml
resources:
  jobs:
    example_job:
      name: 'Example with multiple wheels'
      tasks:
        - task_key: task

          spark_python_task:
            python_file: ../src/call_wheel.py

          libraries:
            - whl: ../my_custom_wheel1/dist/*.whl
            - whl: ../my_custom_wheel2/dist/*.whl

          new_cluster:
            node_type_id: i3.xlarge
            num_workers: 0
            spark_version: 14.3.x-scala2.12
            spark_conf:
              'spark.databricks.cluster.profile': 'singleNode'
              'spark.master': 'local[*, 4]'
            custom_tags:
              'ResourceClass': 'SingleNode'
# databricks.yml
bundle:
  name: job_with_multiple_wheels

include:
  - ./resources/job.yml

workspace:
  host: https://myworkspace.cloud.databricks.com

artifacts:
  my_custom_wheel1:
    type: whl
    build: poetry build
    path: ./my_custom_wheel1

  my_custom_wheel2:
    type: whl
    build: poetry build
    path: ./my_custom_wheel2

targets:
  dev:
    default: true
    mode: development

Trabajo con parámetros

La siguiente configuración de ejemplo define un trabajo con parámetros. Para obtener más información sobre cómo parametrizar trabajos, vea Parametrizar trabajos.

resources:
  jobs:
    job_with_parameters:
      name: job_with_parameters

      tasks:
        - task_key: task_a
          spark_python_task:
            python_file: ../src/file.py
            parameters:
              - '--param1={{ job.parameters.param1 }}'
              - '--param2={{ job.parameters.param2 }}'

          new_cluster:
            node_type_id: i3.xlarge
            num_workers: 1
            spark_version: 14.3.x-scala2.12

      parameters:
        - name: param1
          default: value1
        - name: param2
          default: value1

Estos parámetros se pueden establecer en tiempo de ejecución pasando parámetros de trabajo a bundle run, por ejemplo:

databricks bundle run -- --param1=value2 --param2=value2

Trabajo que usa un archivo requirements.txt

En la siguiente configuración de ejemplo se define un trabajo que usa un archivo requirements.txt.

resources:
  jobs:
    job_with_requirements_txt:
      name: 'Example job that uses a requirements.txt file'
      tasks:
        - task_key: task
          job_cluster_key: default
          spark_python_task:
            python_file: ../src/main.py
          libraries:
            - requirements: /Workspace/${workspace.file_path}/requirements.txt

Trabajo según una programación

En los ejemplos siguientes se muestra la configuración de los trabajos que se ejecutan según una programación. Para obtener información sobre las programaciones y desencadenadores de tareas, consulte Tareas automatizadas con programaciones y desencadenadores.

Esta configuración define un trabajo que se ejecuta diariamente en un momento especificado:

resources:
  jobs:
    my-notebook-job:
      name: my-notebook-job
      tasks:
        - task_key: my-notebook-task
          notebook_task:
            notebook_path: ./my-notebook.ipynb
      schedule:
        quartz_cron_expression: '0 0 8 * * ?' # daily at 8am
        timezone_id: UTC
        pause_status: UNPAUSED

En esta configuración, el trabajo se ejecuta una semana después de la última ejecución del trabajo:

resources:
  jobs:
    my-notebook-job:
      name: my-notebook-job
      tasks:
        - task_key: my-notebook-task
          notebook_task:
            notebook_path: ./my-notebook.ipynb
      trigger:
        pause_status: UNPAUSED
        periodic:
          interval: 1
          unit: WEEKS

Configuración de canalización

Esta sección contiene ejemplos de configuración de canalización. Para obtener información sobre la configuración de la canalización, consulte canalización.

Canalización que usa proceso sin servidor

Las agrupaciones de recursos de Databricks admiten canalizaciones que se ejecutan en proceso sin servidor. Para definir esta configuración, establezca la configuración serverless de la canalización en true. La siguiente configuración de ejemplo define una canalización que se ejecuta en un proceso sin servidor con dependencias instaladas y un trabajo que desencadena una actualización de la canalización cada hora.

# A pipeline that runs on serverless compute
resources:
  pipelines:
    my_pipeline:
      name: my_pipeline
      target: ${bundle.environment}
      serverless: true
      environment:
        dependencies:
          - 'dist/*.whl'
      catalog: users
      libraries:
        - notebook:
            path: ../src/my_pipeline.ipynb

      configuration:
        bundle.sourcePath: /Workspace/${workspace.file_path}/src
# This defines a job to refresh a pipeline that is triggered every hour
resources:
  jobs:
    my_job:
      name: my_job

      # Run this job once an hour.
      trigger:
        periodic:
          interval: 1
          unit: HOURS

      email_notifications:
        on_failure:
          - someone@example.com

      tasks:
        - task_key: refresh_pipeline
          pipeline_task:
            pipeline_id: ${resources.pipelines.my_pipeline.id}