Планирование заданий cron в Google Cloud DataProc

В настоящее время у меня есть задание PySpark, развернутое в кластере DataProc (1 главный и 4 рабочих узла с достаточным количеством ядер и памяти). Это задание выполняется с миллионами записей и выполняет дорогостоящие вычисления (точка в многоугольнике). Я могу успешно выполнить эту работу самостоятельно. Однако я хочу запланировать выполнение задания на 7-е число каждого месяца.

Я ищу наиболее эффективный способ создания заданий cron в кластере DataProc. Я попытался почитать об Cloud Scheduler, но он точно не объясняет, как его можно использовать в сочетании с кластером DataProc. Было бы действительно полезно увидеть либо пример задания cron в DataProc, либо некоторую документацию по DataProc, работающую исключительно вместе с Scheduler.

Заранее спасибо!


person Alabhya Mishra    schedule 18.11.2019    source источник


Ответы (2)


Для запланированных взаимодействий Dataproc (создание кластера, отправка задания, ожидание задания, удаление кластера, а также обработка ошибок) API шаблонов рабочего процесса Dataproc является лучшим выбором, чем попытки организовать их самостоятельно. Ключевым преимуществом является то, что рабочие процессы работают по принципу «запустил и забыл», и любые созданные кластеры также будут удалены по завершении.

Если ваш шаблон рабочего процесса относительно прост и его параметры не меняются между вызовами, более простым способом планирования было бы использование Cloud Scheduler. Cloud Functions - хороший выбор, если вам нужно запустить рабочий процесс в ответ на файлы в GCS или события в PubSub. Наконец, Cloud Composer отлично подходит, если параметры вашего рабочего процесса динамические или есть другие продукты GCP.

Предполагая, что вашими вариантами использования являются простой рабочий процесс с одинаковыми параметрами, я продемонстрирую использование Cloud Scheduler:

В моем проекте я создал рабочий процесс под названием terasort-example.

Затем я создал новую учетную запись службы в моем проекте под названием [email protected] и дал ей роль Dataproc Editor; однако чего-то более ограниченного с использованием всего dataproc.workflows.instantiate также достаточно.

После включения Cloud Scheduler API я перешел к Cloud Scheduler в консоли разработчика. Я создал такую ​​работу:

Цель: HTTP

URL: https://dataproc.googleapis.com/v1/projects/example/regions/global/workflowTemplates/terasort-example:instantiate?alt=json

Метод HTTP: POST

Тело: {}

Заголовок аутентификации: токен OAuth

Учетная запись службы: [email protected]

Область: (оставлено пустым)

Вы можете проверить это, нажав Run Now.

Обратите внимание, что вы также можете скопировать все содержимое рабочего процесса в тело как полезную нагрузку JSON. Последняя часть URL-адреса станет workflowTemplates:instantiateInline?alt=json

Просмотрите этот официальный документ, в котором обсуждаются другие варианты планирования. .

person tix    schedule 12.12.2019

См. другой ответ для более полного решения

Что вам нужно сделать, так это опубликовать событие в теме pubsub из Cloud Scheduler, а затем заставить облачную функцию реагировать на это событие.

Вот полный пример использования облачной функции для запуска Dataproc: Как я могу запустить создание кластера Dataproc, запустить задание, удалить кластер из облачной функции

person tix    schedule 18.11.2019
comment
Спасибо! Это очень полезно. Однако время выполнения облачных функций ограничено. Предлагаемое максимальное время выполнения составляет 9 минут. Если время выполнения создания кластера, выполнения задания в кластере и последующего удаления кластера превышает 9 минут, весь процесс потенциально может потерпеть неудачу. Решение, которое я могу придумать, - это использовать несколько облачных функций на каждом этапе (создать кластер, запустить задание, следить за статусом задания и, наконец, удалить кластер после его завершения). Имеет ли это смысл? - person Alabhya Mishra; 19.11.2019
comment
Вот почему я предлагаю использовать WorkflowTemplate. После запуска Dataproc API позаботится об отправке заданий и удалении кластера. Он также реагирует на любые ошибки в процессе, поэтому, когда он завершает, ресурсы (кластеры) всегда. убрано. - person tix; 19.11.2019