Запуск задания Databricks из Airflow без запуска нового кластера - PullRequest
0 голосов
/ 06 февраля 2019

Я использую поток воздуха для запуска заданий на кирпичах данных.У меня есть много групп DAG, выполняющих задания для блоков данных, и я хочу использовать только один кластер вместо многих, поскольку, насколько я понимаю, это сократит затраты, которые сгенерирует эта задача.

При использовании DatabricksSubmitRunOperator существует два способазапустить работу на кирпичи данных.Либо используя работающий кластер, вызывающий его по идентификатору

'existing_cluster_id' : '1234-567890-word123',

, либо запуская новый кластер

'new_cluster': {
    'spark_version': '2.1.0-db3-scala2.11',
    'num_workers': 2
  },

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

1) Есть ли способ получитькластер вызывается по идентификатору, даже когда он выключен?

2) Люди просто поддерживают кластеры живыми?

3) Или я совершенно не прав, и запуск кластеров для каждой задачи не приведет к увеличению затрат?

4) Есть ли что-то, что я полностью пропустил?

1 Ответ

0 голосов
/ 07 февраля 2019

Обновления на основе ответа на комментарий @ YannickSSE
Я не использую блоки данных;Можете ли вы запустить новый кластер с тем же идентификатором, что и кластер, который вы можете ожидать или не ожидать, и он будет неактивным в том случае, если он работает?Может быть, нет, или вы, вероятно, не спрашивали бы об этом. Ответ: нет, при запуске нового кластера вы не можете дать идентификатор.

Не могли бы вы написать оператор python или bash, который проверяет наличие кластера?( Ответ: Это будет отправка тестового задания ... не самый лучший подход. ) Если он найдет его и успешно выполнит, последующая задача вызовет вашу работу с существующим идентификатором кластера, но если это не произойдет в другой последующей передаче.Задача может использовать trigger_rule all_failed для выполнения той же задачи, но с новым кластером.Тогда обе эти задачи DatabricksSubmitRunOperator могут иметь одну последующую задачу с trigger_rule one_success.( Ответ: Или используйте оператор ветвления для определения выполненного оператора. )

Это может быть не идеальным, потому что я представляю, что идентификатор вашего кластера время от времени меняется, вызывая у васподдерживать.… Является ли кластер частью соединения хуков блоков данных для этого оператора, и что-то, что можно обновить?Возможно, вы захотите указать его в задачах, которым он нужен, как {{ var.value.<identifying>_cluster_id }} и сохранить его в качестве переменной воздушного потока.( Ответ: идентификатор кластера не находится в ловушке, поэтому переменная или файл DAG должны обновляться при каждом изменении. )

...