Поделиться через


Автоматизация создания заданий и управления

В этой статье показано, как приступить к работе с средствами разработчика для автоматизации создания заданий и управления ими. В ней представлены интерфейс командной строки Databricks, пакеты SDK Databricks и REST API.

Заметка

В этой статье приведены примеры создания заданий и управления ими с помощью интерфейса командной строки Databricks, пакета SDK для Python Databricks и REST API в качестве простого введение в эти средства. Для программного управления заданиями в рамках CI/CD используют декларативные пакеты автоматизации или поставщик Databricks Terraform.

Средства сравнения

В следующей таблице сравниваются интерфейс командной строки Databricks, пакеты SDK Databricks и REST API для программного создания заданий и управления ими. Для получения сведений обо всех доступных средствах разработчика см. Местные средства разработки.

Инструмент Описание
Интерфейс командной строки Databricks Доступ к функциям Databricks с помощью интерфейса командной строки Databricks, который упаковывает REST API. Используйте интерфейс командной строки для разовых задач, таких как экспериментирование, оболочечные скрипты и вызов REST API напрямую
пакеты SDK Databricks Разработка приложений и создание пользовательских рабочих процессов Databricks с помощью пакета SDK Databricks, доступного для Python, Java, Go или R. Вместо отправки вызовов REST API непосредственно с помощью curl или Postman можно использовать пакет SDK для взаимодействия с Databricks.
Databricks REST API Если ни один из описанных выше параметров не подходит для конкретного варианта использования, можно напрямую использовать REST API Databricks. Используйте REST API непосредственно для вариантов использования, таких как автоматизация процессов, в которых пакет SDK на предпочитаемом языке программирования в настоящее время недоступен.

Начало работы с интерфейсом командной строки Databricks

Чтобы установить и настроить аутентификацию для интерфейса командной строки Databricks, см. Установка или обновление интерфейса командной строки Databricks и Аутентификация для интерфейса командной строки Databricks.

Интерфейс командной строки Databricks содержит группы команд для функций Databricks, включая один для заданий, содержащий набор связанных команд, которые также могут содержать вложенные команды. Группа команд jobs позволяет управлять заданиями и выполнением заданий с такими действиями, как create, delete и get. Поскольку интерфейс командной строки оборачивает REST API Databricks, большинство команд CLI соответствуют запросу REST API. Например, databricks jobs get сопоставляется с GET/api/2.2/jobs/get.

Чтобы вывести более подробные сведения об использовании и синтаксисе для группы команд заданий, отдельной команды или подкоманда, используйте флаг h:

  • databricks jobs -h
  • databricks jobs <command-name> -h
  • databricks jobs <command-name> <subcommand-name> -h

Пример. Получение задания с помощью интерфейса командной строки

Чтобы распечатать сведения о отдельном задании в рабочей области, выполните следующую команду:

$ databricks jobs get <job-id>

databricks jobs get 478701692316314

Эта команда возвращает JSON:

{
  "created_time": 1730983530082,
  "creator_user_name": "someone@example.com",
  "job_id": 478701692316314,
  "run_as_user_name": "someone@example.com",
  "settings": {
    "email_notifications": {
      "no_alert_for_skipped_runs": false
    },
    "format": "MULTI_TASK",
    "max_concurrent_runs": 1,
    "name": "job_name",
    "tasks": [
      {
        "email_notifications": {},
        "notebook_task": {
          "notebook_path": "/Workspace/Users/someone@example.com/directory",
          "source": "WORKSPACE"
        },
        "run_if": "ALL_SUCCESS",
        "task_key": "success",
        "timeout_seconds": 0,
        "webhook_notifications": {}
      },
      {
        "depends_on": [
          {
            "task_key": "success"
          }
        ],
        "disable_auto_optimization": true,
        "email_notifications": {},
        "max_retries": 3,
        "min_retry_interval_millis": 300000,
        "notebook_task": {
          "notebook_path": "/Workspace/Users/someone@example.com/directory",
          "source": "WORKSPACE"
        },
        "retry_on_timeout": false,
        "run_if": "ALL_SUCCESS",
        "task_key": "fail",
        "timeout_seconds": 0,
        "webhook_notifications": {}
      }
    ],
    "timeout_seconds": 0,
    "webhook_notifications": {}
  }
}

Пример. Создание задания с помощью интерфейса командной строки

В следующем примере для создания задания используется интерфейс командной строки Databricks. Это задание содержит одну задачу, которая запускает указанный ноутбук. Эта записная книжка зависит от определенной версии пакета pyPI wheel. Для выполнения этой задачи задание временно создает кластер, который экспортирует переменную среды с именем PYSPARK_PYTHON. После выполнения задания кластер завершается.

  1. Скопируйте и вставьте следующий код JSON в файл. Вы можете получить доступ к формату JSON любого существующего задания, выбрав параметр Просмотреть json в пользовательском интерфейсе страницы задания.

    {
      "name": "My hello notebook job",
      "tasks": [
        {
          "task_key": "my_hello_notebook_task",
          "notebook_task": {
            "notebook_path": "/Workspace/Users/someone@example.com/hello",
            "source": "WORKSPACE"
          }
        }
      ]
    }
    
  2. Выполните следующую команду, заменив <file-path> путем и именем только что созданного файла.

    databricks jobs create --json @<file-path>
    

Выполнение задания с помощью интерфейса командной строки

При использовании командной строки существует три способа выполнения задания yoaur.

  • Запланировано. Если определение задания (в ФОРМАТЕ JSON) содержит расписание, например в следующем примере, задание будет автоматически выполняться в расписании.

      "schedule": {
      "quartz_cron_expression": "46 0 9 * * ?",
      "timezone_id": "America/Los_Angeles",
      "pause_status": "UNPAUSED"
    },
    "max_concurrent_runs": 1,
    
  • Триггер с run-now. Команда databricks jobs run-now CLI активирует запуск для уже созданного задания.

  • Триггер с submit. Команда databricks jobs submit CLI принимает определение задания и запускает задание.

    При submitэтом задание не сохраняется и не отображается в пользовательском интерфейсе. Он запускается один раз, и когда он будет выполнен, он больше не существует как задание.

    Так как они не сохраняются, отправленные задания не могут быть автоматически оптимизированы для бессерверных вычислений в случае сбоя. Если задание завершается ошибкой, может потребоваться использовать классические вычисления, чтобы указать потребности вычислений для задания. Или используйте jobs create и jobs run-now, чтобы создать и запустить задание.

Начало работы с пакетом SDK Databricks

Databricks предоставляет пакеты SDK, которые позволяют автоматизировать операции с помощью популярных языков программирования, таких как Python, Java и Go. В этом разделе показано, как приступить к работе с пакетом SDK для Python для создания заданий и управления ими в Databricks.

Пакет SDK Databricks можно использовать из ноутбука Databricks или на локальной машине разработки. Если вы используете локальный компьютер для разработки, убедитесь, что вы завершили этап подготовки к работе с SDK Databricks для Python.

Заметка

Если вы разрабатываете из записной книжки Databricks и используете кластер с Databricks Runtime 12.2 LTS и ниже, сначала необходимо установить Databricks SDK для Python. См. раздел по установке или обновлению Databricks SDK для Python.

Пример. Создание задания с помощью пакета SDK для Python

В следующем примере кода записной книжки создается задание, которое запускает существующую записную книжку. Он извлекает путь к существующей записной книжке и связанные с ней параметры задания с подсказками.

Сначала убедитесь, что установлена правильная версия пакета SDK:

%pip install --upgrade databricks-sdk==0.74.0
%restart_python

Затем, чтобы создать задание с задачей для блокнота, выполните следующее, ответив на вопросы:

from databricks.sdk.service.jobs import JobSettings as Job
from databricks.sdk import WorkspaceClient

job_name            = input("Provide a short name for the job, for example, my-job: ")
notebook_path       = input("Provide the workspace path of the notebook to run, for example, /Users/someone@example.com/my-notebook: ")
task_key            = input("Provide a unique key to apply to the job's tasks, for example, my-key: ")

test_sdk = Job.from_dict(
   {
       "name": job_name ,
       "tasks": [
           {
               "task_key": task_key,
               "notebook_task": {
                   "notebook_path": notebook_path,
                   "source": "WORKSPACE",
               },
           },
       ],
   }
)

w = WorkspaceClient()
j = w.jobs.create(**test_sdk.as_shallow_dict())

print(f"View the job at {w.config.host}/#job/{j.job_id}\n")

Выполнение задания с помощью пакета SDK для Python

При использовании API можно запустить задание тремя способами.

  • Запланировано. Если определение задания (в ФОРМАТЕ JSON) содержит расписание, например в следующем примере, задание будет автоматически выполняться в расписании.

      "schedule": {
      "quartz_cron_expression": "46 0 9 * * ?",
      "timezone_id": "America/Los_Angeles",
      "pause_status": "UNPAUSED"
    },
    "max_concurrent_runs": 1,
    
  • Триггер с run-now. jobs.run_now API запускает выполнение уже созданного задания.

  • Триггер с submit. jobs.runs.submit API принимает определение задания и запускает выполнение задания.

    При submitэтом задание не сохраняется и не отображается в пользовательском интерфейсе. Он запускается один раз, и когда он будет выполнен, он больше не существует как задание.

    Так как они не сохраняются, отправленные задания не могут быть автоматически оптимизированы для бессерверных вычислений в случае сбоя. Если задание завершается ошибкой, может потребоваться использовать классические вычисления, чтобы указать потребности вычислений для задания. Или используйте jobs.create и jobs.run_now, чтобы создать и запустить задание.

Начало работы с REST API Databricks

Заметка

Databricks рекомендует использовать Интерфейс командной строки Databricks и пакет SDK Databricks, если только вы не используете такой язык программирования, для которого нет соответствующего пакета SDK Databricks.

В следующем примере выполняется запрос к REST API Databricks для получения сведений об одном задании. Предполагается, что переменные среды DATABRICKS_HOST и DATABRICKS_TOKEN заданы, как описано в разделе "Выполнение проверки подлинности личного маркера доступа".

$ curl --request GET "https://${DATABRICKS_HOST}/api/2.2/jobs/get" \
     --header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
     --data '{ "job": "11223344" }'

Сведения об использовании REST API см. в справочной документации по REST API Databricks .

Просмотр заданий в виде кода

В рабочей области Databricks можно просмотреть представление задания JSON, YAML или Python.

  1. На боковой панели рабочей области Azure Databricks щелкните "Задания и конвейеры " и выберите задание.

  2. Нажмите кебаб слева от кнопки "Запустить сейчас ", а затем нажмите кнопку "Вид как код":

    Просмотр в виде элемента меню кода

  3. Щелкните YAML, Python или JSON , чтобы просмотреть задание как код на этом языке.

Убирать

Чтобы удалить только что созданные задания, запустите databricks jobs delete <job-id> из интерфейса командной строки Databricks или удалите задание непосредственно из пользовательского интерфейса рабочей области Databricks.

Дальнейшие действия