Последние несколько месяцев я использовал Databricks Autoloader для моего Delta Lake. Для начала я расскажу, что значит каждое слово:
-
Databricks - это коммерческий продукт, в сердце которого Apache Spark. Так же у вас есть удобный интерфейс с ноутбуками - Workspace. Поэтому мы можем писать код, трансформации и Databricks будет делать data processing. Единица трансформации обычно data frame. Можно использоать PySpark, Scala, SparkSQL. Все достаточно удобно и быстро. Данные как правило хранятся в облачном сторадже AWS S3, Azure Storage.
-
Delta Lake - это опен сорс продукт, который уже неразрывно связан со Spark. Мы использовали его еще в Amazon для AWS EMR+Spark, чтобы решать задачи GDPR (Удаление customer id). Данные хранятся так же в озере данных в формате Parquet. Но есть дополнительные фичи - transaction log (метаданные о данных), и у нас теперь не просто External Table в Hive Metastore, но Delta Table. Есть и аналоги на рынке Iceberg и Hudi (как правило для Hadoop). Проблем пока не заметил, только операция MERGE тормозная на большом объеме, но много хороших фич, которые позволяют сделать хранилище данных из вашего озера данных (то есть Lake house).
-
Autoloader - это фича Databricks, которая использует Spark Structured Streaming. Databricks сам создает всю необходимую инфраструктуру в AWS/Azure, чтобы стримить непрерывно файлы к вам в DW. И Вместе с Delta Lake вы можете сделать streaming ETL для всего. Конечно на практике это работает не так прекрасно. Условно Autoloader это черный ящик, которые все делает сам – находит только новые файлы и грузит их. Где-то глубоко он использует базу RocksDB, которые ведет учет всего что вы загрузили.
Я решил сделать ставку на инновации, но что-то пошло не так. Autoloader уже второй раз дает сбой по непонятным причинам и пишет, что не может найти путь к checkpoint. То есть, он не знает, чего было загружено, а чего нет. И мне как разработчику это ни о чем не говорит, так как это сервис и black box. Я уже потратил много времени с support в прошлый раз, они попросили добавить опцию в настройки кластера "spark.databricks.cloudFiles.missingMetadataFile.writeNew true" но на мой вопрос так и не ответили, "Почему это случилось?".
Выглядит как заплатка. Но опять все сломалось и хз чего там.
Мораль истории проста – все эти замечательные сервисы, которые будут делать работу за вас, все эти красивые слова вендоров, их презентацию, все это, как говорят на западе bullshit.
Ну а мне придется переделывать все на классический batch процесс, в котором я могу запускать data factory job каждый час и переписывать или добавлять партицию, как делали лет 5-10 назад при использовании Hive и Hadoop.
PS Но тем не менее я добавлю delta lake, autoloader и Databricks в data learn.