Обзор Spark ADB Connector
Spark ADB Connector предоставляет возможность высокоскоростного параллельного обмена данными между Apache Spark и Arenadata DB.
|
ПРИМЕЧАНИЕ
Начиная с версии ADH 4.3.0 Spark ADB Connector поддерживает ADB 7 (Greengage DB 7).
Также имя коннектора было изменено с
Старое значение |
Архитектура
Каждое приложение Spark состоит из контролирующего процесса (driver) и некоторого количества распределённых worker-процессов (executors). Схема взаимодействия представлена ниже.
Алгоритмы работы
Чтение данных
Spark ADB Connector инициализирует драйвер, чтобы загрузить таблицу ADB в Spark. Этот драйвер устанавливает соединение с ADB master через JDBC, чтобы получить необходимые метаданные о таблице. Метаданные содержат информацию о типе, структурах таблиц и ключе дистрибуции. Ключ дистрибуции позволяет вам распределить данные из таблицы на существующие ноды Spark.
Данные хранятся в сегментах ADB. Приложение Spark, которое использует коннектор, может перемащать данные из каждого сегмента в одну или несколько партиций Spark. Существует пять режимов партиционирования:
-
В соответствии с gp_segment_id. Данные из таблиц ADB прочитываются и распределяются между партициями Spark в зависимости от сегмента. Количество партиций Spark соответствует количеству активных сегментов ADB. Этот режим партиционирования не требует дополнительных параметров и используется по умолчанию.
-
В соответствии с указанными столбцом и количеством партиций. Данные распределяются между партициями Spark внутри столбцевого диапазона согласно указанному количеству партиций. Количество партиций Spark соответствует количеству рядов. Необходимо установить подходящие параметры (см. Опции Spark ADB Connector). У этого режима партиционирования есть ограничения: в качестве столбца могут использоваться только поля таблицы типа
integerилиdate/time. -
В соответствии с указанным столбцом. Данные распределяются между партициями Spark в зависимости от уникальных значений в указанном столбце. Количество партиций Spark соответствует количеству уникальных значений в указанном столбце. Необходимо установить подходящие параметры (см. Опции Spark ADB Connector). Этот режим рекомендуется для случая малого и ограниченного набора значений.
-
В соответствии с указанным количеством партиций. Данные распределяются между партициями Spark в зависимости от указанного количества партиций. Необходимо установить подходящие параметры (см. Опции Spark ADB Connector).
-
В соответствии с указанными хеш-функцией и количеством партиций. Данные распределяются между партициями Spark в зависимости от указанной хеш-функции и указанного количества партиций. Необходимо указать подходящие параметры (см. Опции Spark ADB Connector). У этого режима партиционирования есть ограничения: только выражение, возвращающее целое число, может использоваться в качестве хеш-функции.
Некоторые задачи обработки данных распределяются между всеми executor-нодами Spark вместе с соответствующими партициями, которые были созданы ранее. Обмен данными выполняется в параллельном режиме с использованием внешних writable-таблиц для каждой партиции.
Запись данных
Spark ADB Connector инициализирует драйвер для загрузки таблицы из Spark в ADB. После этого драйвер устанавливает соединение с ADB master через JDBC и готовит загрузку ADB. Метод загрузки зависит от режима записи.
Доступны следующие режимы записи:
-
overwrite. В зависимости отspark.db.table.truncateцелевая таблица либо удаляется полностью, либо все данные очищаются (cleaned up) перед процессом записи. -
append. Дополнительные данные записываются в целевую таблицу. -
errorIfExists. Если целевая таблица существует, появляется ошибка.
Также доступно несколько опций для spark.db.create.table. Это позволяет определять дополнительные настройки, когда вы создаёте целевую таблицу (см. Опции Spark ADB Connector).
Задача загрузки данных создаётся для каждой партиции Spark. Обмен данными происходит параллельно через внешние readable-таблицы для каждого сегмента.
Поддерживаемые типы данных
Соответствия типов данных при их перемещениях представлены в таблицах ниже.
| ADB | Spark |
|---|---|
bigint |
LongType |
bigSerial |
LongType |
bit |
StringType |
bytea |
BinaryType |
boolean |
BooleanType |
char |
StringType |
date |
DateType |
decimal |
DecimalType |
float4 |
FloatType |
float8 |
DoubleType |
int |
IntegerType |
interval |
CalendarIntervalType |
serial |
IntegerType |
smallInt |
ShortType |
text |
StringType |
time |
TimeStampType |
timestamp |
TimeStampType |
timestamptz |
TimeStampType |
timetz |
TimeStampType |
varchar |
StringType |
| Spark | ADB |
|---|---|
BinaryType |
byte |
BooleanType |
boolean |
CalendarIntervalType |
interval |
DateType |
date |
DecimalType |
numeric |
DoubleType |
float8 |
FloatType |
float4 |
IntegerType |
int |
LongType |
bigint |
ShortType |
smallint |
StringType |
text |
TimeStampType |
timestamp |
Поддерживаемые драйверы JDBC
Для взаимодействия Spark ADB Connector и ADB используется JDBC-соединение. Драйвер PostgreSQL JDBC driver поставляется вместе с коннектором.
Строка подключения JDBC для стандартного драйвера имеет следующую структуру:
jdbc:postgresql://<master_ip>[:<port>]/<database_name>
где:
-
<master_ip>— IP-адрес master-хоста ADB. -
<port>— номер порта для подключения (5432по умолчанию). -
<database_name>— название БД в ADB для подключения.
Дополнительно Spark ADB Connector поддерживает использование сторонних драйверов JDBC. Чтобы использовать сторонний драйвер, выполните следующее:
-
Подготовьте строку для подключения ODBC к master-хосту ADB.
-
Загрузите JAR-файл со сторонним драйвером JDBC одним из следующих способов:
-
Используйте переменную окружения
--jarsпри вызове spark-shell или spark-submit. -
Выполните билд файла uber-jar со всеми зависимостями.
-
Установите JAR-файл со сторонним драйвером на всех нодах Spark.
-
-
Укажите полный путь к Java-классу драйвера, используя опцию коннектора
spark.adb.driver.
Использование коннектора
Для передачи данных между Spark и ADB с помощью Spark ADB Connector можно использовать стандартные утилиты spark-shell и spark-submit. Примеры использования spark3-shell приведены в статье Примеры использования Spark ADB Connector.
При разработке standalone-приложения Spark необходимо предварительно указать JAR-файл коннектора (/usr/lib/spark<version>/jars/adb-spark-connector-assembly-release-<connector_version>-spark-<spark_version>.jar) наряду с другими зависимостями приложения в файле uber-jar. Дополнительную информацию можно получить в статье Submitting Applications документации Spark.