В прошлый раз мы говорили про механизм распределения данных в Apache Spark. Сегодня рассмотрим механизм взаимодействия Spark с реляционными системами управления базами данных (СУБД). Читайте далее про особенности соединения и взаимодействия распределенного Big Data фреймворка Spark с реляционными СУБД для распределенной обработки больших массивов данных.
Особенности взаимодействия Spark с реляционными СУБД
Реляционные СУБД (Relational Database Management System, RDBMS) — системы управления базами данных, в которых базовой структурой данных являются таблицы (отношения), которые связаны друг с другом посредством ссылок (когда данные одной таблицы ссылаются на данные другой таблицы). Самыми известными реляционными СУБД считаются PostgreSQL, MySQL, MSSQL Server, SQLite. Фреймворк Spark взаимодействует с реляционными СУБД c помощью специального коннектора JDBC (Java Database Conneсtivity), который реализован на языке Java. JDBC позволяет получать соединение с базой данных по специальному URL (Uniform Resource Locator). В качестве URL коннектор JDBC принимает адрес сервера и порт (обычно 4 цифры), по которому он принимает все запросы [1].
Как начать взаимодействие с реляционными БД в Spark: несколько практических примеров
Для того, чтобы начать соединение, необходимо настроить базовую конфигурацию, в которую входят:
- количество исполнителей (executors) — параллельные процессы, ответственные за выполнение Spark-задач (Spark tasks);
- количество ядер для каждого исполнителя (executor cores) — максимальное количество задач для одного исполнителя;
- память для каждого исполнителя (executor memory) — количество оперативной памяти, выделяемое системой на одного исполнителя;
- память для драйвера (driver memory) — количество оперативной памяти, выделяемое для драйвера Spark. Драйвер Spark — это процесс, ответственный за распределение задач по исполнителям;
- RDBMS-драйвер (RDMS driver) — JDBC-коннектор, обеспечивающий соединение Spark и СУБД [1].
Следующий код на языке Python отвечает за настройку базовой конфигурации и запуск сессии Spark для взаимодействия с PostgreSQL:
spark = SparkSession.builder.config('spark.driver.extraClassPath', 'C:/spark/postgresql-42.2.19.jar')\ .config("spark.executor.instances", "4")\ .config("spark.executor.memory", "2g")\ .config('spark.executor.cores','2')\ .config("spark.driver.memory", "16g").getOrCreate()
Для того, чтобы считывать данные из реляционной таблицы, необходимо также задать набор свойств (properties), в который входят: URL сервера БД, имя пользователя и пароль для авторизации на сервер, а также таблица, из которой будут считываться данные. За соединение с БД отвечает метод jdbc()
, который в качестве параметров принимает набор свойств для входа на сервер:
url = 'jdbc:postgresql://localhost:5432/db_1' properties = {'user': 'postgres', 'password': 'root'} data = spark.read.option('partitionColumn','id_column')\ .option('numPartitions',500)\ .option("lowerBound", 0)\ .option("upperBound", 1000000)\ .jdbc(url= url, table= 'public.balances', properties= properties)
Как видно из вышерассмотренного фрагмента кода, для считывания данных указываются разделы (параметр numPartititons), а также верхняя и нижняя граница (параметры lowerBound и upperBound), так как при параллельном считывании данные разбиваются на разделы, состоящие из определенных диапазонов. Это позволяет фреймворку Spark весьма быстро вычитывать большие массивы данных.
Таким образом, благодаря удобному и гибкому механизму взаимодействия с реляционными базами данных, Spark может эффективно работать с Big Data затрачивая при этом минимум ресурсов кластера. Это делает фреймворк Apache Spark весьма полезным средством для Data Scientist’а и разработчика распределенных Big Data приложений. В следующей статье мы поговорим про работу с JSON в Spark.
Больше подробностей про применение Apache Spark в проектах анализа больших данных, разработки Big Data приложений и прочих прикладных областях Data Science вы узнаете на практических курсах по Spark в нашем лицензированном учебном центре обучения и повышения квалификации ИТ-специалистов в Москве:
- Графовые алгоритмы в Apache Spark
- Машинное обучение в Apache Spark
- Потоковая обработка в Apache Spark
- Основы Apache Spark для разработчиков
- Анализ данных с Apache Spark
Источники
- К.Харау, Э.Ковински, П.Венделл, М.Захария. Изучаем Spark: молниеносный анализ данных