Azure Blob Storage — это высокомасштабируемое облачное хранилище от Microsoft, предназначенное для работы с огромными объёмами неструктурированных данных. Оно экономично и универсально, способно хранить любые данные — от текста и бинарных файлов до изображений и видео. Это отличный выбор для создания озёр данных или хранилищ, где можно хранить как сырые, так и предобработанные данные для дальнейшего анализа.
В этом посте мы разберём, как получить доступ к Azure Blob Storage с помощью PySpark — Python API для Apache Spark. Apache Spark — это мощная, быстрая и универсальная система кластерных вычислений для обработки больших данных. Благодаря возможности управлять параллелизмом данных и отказоустойчивостью в кластерах, Spark — критически важный инструмент в арсенале дата-инженера. Да, я уже давно пишу про Spark.
Что делает Azure Blob Storage особенным?
Прежде чем погрузиться в детали работы с Azure Blob Storage через PySpark, давайте разберём, чем оно выделяется. Оно использует специальные протоколы wasb/wasbs для доступа к данным. Протокол wasb (Windows Azure Storage Blob) — это расширение поверх API Hadoop Distributed File System (HDFS), обеспечивающее абстракцию, которая отделяет хранение от обработки. Для взаимодействия с Azure Blob Storage через Spark необходимо подключить файлы hadoop-azure.jar и azure-storage.jar в команде spark-submit.
Вот как можно запустить Spark-задачу с необходимыми зависимостями:
$ spark-submit --py-files src.zip \
--master yarn \
--deploy-mode=cluster \
--jars hadoop-azure.jar,azure-storage.jar
src/app.py
Альтернативно, если вы используете Docker или ваше приложение установлено на кластере, разместите JAR-файлы там, где PySpark сможет их найти:
$ wget -nc -nv -O /usr/local/lib/python3.5/site-packages/pyspark/jars/azure-storage-2.2.0.jar http://central.maven.org/maven2/com/microsoft/azure/azure-storage/2.2.0/azure-storage-2.2.0.jar
$ wget -nc -nv -O /usr/local/lib/python3.5/site-packages/pyspark/jars/hadoop-azure-2.7.3.jar http://central.maven.org/maven2/org/apache/hadoop/hadoop-azure/2.7.3/hadoop-azure-2.7.3.jar
Настройка Spark Session
Теперь, когда у нас есть необходимые библиотеки, создадим Spark Session — точку входа PySpark для взаимодействия с ресурсами кластера:
from pyspark.sql import SparkSession
session = SparkSession.builder.getOrCreate()
Доступ к данным в Azure Blob Storage
Для взаимодействия с Azure Blob Storage необходимо настроить сессию Spark с помощью ключа доступа к аккаунту или токена Shared Access Signature (SAS).
С использованием ключа аккаунта:
session.conf.set(
"fs.azure.account.key.<storage-account-name>.blob.core.windows.net",
"<your-storage-account-access-key>"
)
Или с использованием SAS-токена:
session.conf.set(
"fs.azure.sas.<container-name>.blob.core.windows.net",
"<sas-token>"
)
После настройки сессии Spark и ключа доступа или SAS-токена можно начинать читать и записывать данные из Azure Blob Storage с помощью PySpark.
Чтение данных из Azure Blob Storage
После настройки сессии Spark можно читать данные из Azure Blob Storage. Метод read объекта сессии Spark возвращает DataFrame, а путь к данным должен начинаться с wasbs:// (для безопасного доступа) или wasb:// (для небезопасного).
Пример чтения Parquet-файла из Azure Blob Storage:
sdf = session.read.parquet(
"wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<prefix>"
)
В этом пути:
<container-name>— имя вашего контейнера в Azure Blob Storage.<storage-account-name>— имя вашего аккаунта хранилища.<prefix>— необязательный путь к файлу или папке.
Запись данных в Azure Blob Storage
Записывать данные обратно в Azure Blob Storage тоже можно с помощью PySpark:
df.write.csv(
"wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/<prefix>"
)
Вы можете дополнительно настроить операцию write, указав опции формата, сжатия, партиционирования и другие.
За пределами чтения и записи
Помимо базового чтения и записи, PySpark предлагает множество инструментов для работы с данными в Azure Blob Storage. Можно использовать PySpark SQL для выполнения SQL-запросов или PySpark MLlib для задач машинного обучения.
В целом, Azure Blob Storage вместе с PySpark — это мощная комбинация для построения пайплайнов данных и аналитических решений в облаке.
Заключение
Сочетание Azure Blob Storage с PySpark предлагает мощную платформу для построения масштабируемых пайплайнов данных и аналитических решений в облаке. Будь то обработка больших датасетов, выполнение сложных запросов или обучение моделей машинного обучения — эта комбинация обеспечивает гибкость и производительность, необходимые для современных задач дата-инженерии.