Как записать данные в озеро Дельта из Кубернетеса

#python #kubernetes #databricks #delta-lake

Вопрос:

Наша организация запускает базы данных в Azure, которые используются специалистами по обработке данных и аналитиками в основном для ноутбуков для проведения специального анализа и исследований.

Мы также запускаем кластеры Kubernetes для рабочих процессов ETL, не требующих искры.

Мы хотели бы использовать Дельта-озера в качестве нашего уровня хранения, где как базы данных, так и Kubernetes могут читать и писать как граждане первого класса.
В настоящее время наши задания Kubernetes записывают паркеты непосредственно в хранилище больших двоичных объектов с дополнительным заданием, которое запускает кластер databricks для загрузки данных паркета в формат таблицы Databrick. Это медленно и дорого.

Что я хотел бы сделать, так это написать в Delta lake напрямую с python Kubernetes, в отличие от первого сброса файла parquet в хранилище больших двоичных объектов, а затем запустить дополнительное задание Databricks для загрузки его в формат Delta lake.
И наоборот, я хотел бы также использовать Delta lake для запросов от Kubernetes.


Короче говоря, как мне настроить свою среду python Kubernetes таким образом, чтобы она имела равный доступ к существующим базам данных Delta Lake для записи и запросов?
Код был бы признателен.

Ответ №1:

Обычно вы можете записывать данные в дельта-таблицу, используя Дельта-коннектор для Spark. Просто запустите задание Spark с необходимыми пакетами и параметрами конфигурации:

 spark-submit --packages io.delta:delta-core_2.12:1.0.0 
  --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" 
  --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" 
...
 

и пишите так же, как и в базах данных:

 df.write.format("delta").mode("append").save("some_location")
 

Но, используя версию Delta для операционной системы, вы можете потерять некоторые из оптимизаций, которые доступны только в базах данных, например, Пропуск данных и т. Д. — В этом случае производительность для данных, записанных из Kubernetes, Может быть ниже (действительно зависит от того, как вы получаете доступ к данным).

Может быть случай, когда вы не смогли записать в дельта — таблицу, созданную с помощью Databricks, — когда таблица была написана с помощью writer с версией writer выше, поддерживаемой OSS Delta connector (см. Документацию по протоколу Delta). Например, это происходит, когда вы включаете канал изменения данных в Дельта-таблице, который выполняет дополнительные действия при записи данных.

За пределами Spark существуют планы по внедрению так называемого автономного средства записи для языков на основе JVM (в дополнение к существующему автономному средству чтения). И есть проект delta-rs, реализованный в Rust (с привязками для Python и Ruby), который должен иметь возможность записывать в таблицу Delta (но я сам это не проверял).