result=0
for var in"V1""V2""V3"; doiftest -z "${!var}"; thenecho"Variable $var is not defined"
result=1
fidonetest$result = 0 || exit 1
spark-submit # args here
Но зачем 12 факторов?
Практически любые задачи (ETL и DS) надо запускать периодически
dag {
name = "somename"
image = "docker-image-base"${dag.name}
connections = [some, another]
}
Его отлично умеет Scala и хорошо умеет Python.
И читать просто
Что мы храним в конфиге?
Подключения
БД
GC/AWS/Azure etc
Ceph
Переменные окружения
Расписания
0 2 * * */13 → 0_2_A_A_AD13 (потому что новое расписание — новый DAG)
Запустить
Альтернативы Docker'у
Для Spark существует несколько решений:
Zeppelin
spark-jobserver
livy
Теоретически Zeppelin — альтернатива JupyterHub.
И с ним интегрируются Big Data Tools by JetBrains
Zeppelin
Интерактивный блокнот, который может всё:
Scala
Java
Плагины
Внешний API
Но не смогли настроить так, чтобы работало для всех
spark-jobserver
is:issue is:open sort:updated-desc label:bug
На момент написания там 20 багов открытых багов, 3 из которых были для нас критичны.
В том числе баг работы с HOCON конфигурацией
Livy
Livy enables programmatic, fault-tolerant, multi-tenant submission of Spark jobs from web/mobile apps (no Spark client needed). So, multiple users can interact with your Spark cluster concurrently and reliably.
Эту штуку неудобно использовать дата саентистам:
Нужна джава
Чтобы использовать сторонние библиотеки нужно укладывать их на HDFS
И всё хорошо пока всего хватает
Однако со временем призводят они.
Мне надо запустить расчёт, на который на моём ноуте не хватает памяти
Что делать?
Запустить на кластере руками
Запустить спарк, который в себе запустит приложение
Написать драйвер для YARN
или…
Skein
A quantity of yarn, thread, or the like, put up together, after it is taken from the reel.