Массовая загрузка данных с использованием Spark Load
Этот тип загрузки использует внешние ресурсы Apache Spark™ для предварительной обработки импортируемых данных, что улучшает производительность импорта и экономит вычислительные ресурсы. Он в основном используется для первоначальной миграции и импорта больших объемов данных в Selena (объемы данных до уровня TB).
Spark load является асинхронным методом импорта, который требует от пользователей создания заданий импорта типа Spark через протокол MySQL и просмотра результатов импорта с помощью SHOW LOAD.
ВНИМАНИЕ
- Только пользователи с привилегией INSERT на таблицу Selena могут загружать данные в эту таблицу. Вы можете следовать инструкциям, предоставленным в GRANT, чтобы предоставить необходимую привилегию.
- Spark Load нельзя использовать для загрузки данных в таблицу с Primary Key.
Объяснение терминологии
- Spark ETL: В основном отвечает за ETL данных в процессе импорта, включая построение глобального словаря (тип BITMAP), разбиение на разделы, сортировку, агрегацию и т.д.
- Broker: Broker — это независимый процесс без состояния. Он инкапсулирует интерфейс файловой системы и предоставляет Selena возможность чтения файлов из удаленных систем хранения.
- Global Dictionary: Сохраняет структуру данных, которая отображает данные от исходного значения к закодированному значению. Исходное значение может быть любого типа данных, в то время как закодированное значение является целым числом. Глобальный словарь в основном используется в сценариях, где точный подсчет distinct предварительно вычисляется.
Основы
Пользователь отправляет задание импорта типа Spark через клиент MySQL; FE записывает метаданные и возвращает результат отправки.
Выполнение задачи spark load разделено на следующие основные фазы.
- Пользователь отправляет задание spark load в FE.
- FE планирует отправку задачи ETL в кластер Apache Spark™ для выполнения.
- Кластер Apache Spark™ выполняет задачу ETL, которая включает построение глобального словаря (тип BITMAP), разбиение на разделы, сортировку, агрегацию и т.д.
- После завершения задачи ETL, FE получает путь к данным каждого предварительно обработанного среза и планирует соответствующий BE для выполнения задачи Push.
- BE читает данные через процесс Broker из HDFS и преобразует их в формат хранения Selena.
Если вы выбираете не использовать процесс Broker, BE читает данные из HDFS напрямую.
- FE планирует эффективную версию и завершает задание импорта.
Следующая диаграмма иллюстрирует основной поток spark load.

Global Dictionary
Применимые сценарии
В настоящее время столбец BITMAP в Selena реализован с использованием Roaringbitmap, который имеет только целое число в качестве входного типа данных. Поэтому, если вы хотите реализовать предварительное вычисление для столбца BITMAP в процессе импорта, то вам нужно преобразовать входной тип данных в целое число.
В существующем процессе импорта Selena структура данных глобального словаря реализована на основе таблицы Hive, которая сохраняет отображение от исходного значения к закодированному значению.
Процесс построения
- Прочитать данные из источника данных upstream и сгенерировать врем енную таблицу Hive с именем
hive-table. - Извлечь значения полей дедупликации из
hive-tableдля генерации новой таблицы Hive с именемdistinct-value-table. - Создать новую таблицу глобального словаря с именем
dict-tableс одним столбцом для исходных значений и одним столбцом для закодированных значений. - Выполнить левое соединение между
distinct-value-tableиdict-table, а затем использовать оконную функцию для кодирования этого набора. Наконец, как исходное значение, так и закодированное значение дедуплицированного столбца записываются обратно вdict-table. - Соединить
dict-tableиhive-tableдля завершения работы по замене исходного значения вhive-tableна целочисленное закодированное значение. hive-tableбудет прочитана при следующей предварительной обработке данных, а затем импортирована в Selena после вычисления.