Рекомендации по экспорту данных
В этой статье объясняется, как оценить рациональность использования ресурсов при экспорте данных из Doris и повысить эффективность экспорта за счёт настройки параллелизма и других параметров. Рассматриваются два распространённых способа экспорта:
| Способ экспорта | Сценарии применения | Управление параллелизмом |
|---|---|---|
SELECT INTO OUTFILE | Экспорт результата одного SQL-запроса с гибкими возможностями настройки | Переменная сеанса enable_parallel_outfile |
EXPORT | Массовый экспорт больших таблиц или разделов с автоматическим разбиением на несколько задач Outfile | parallelism, data_consistency и другие параметры |
Настройка SELECT INTO OUTFILE
SELECT INTO OUTFILE записывает данные параллельно с помощью Writers. Чем больше Writers, тем выше параллелизм экспорта, но тем больше файлов создаётся.
1. Включение параллельного экспорта
Цель: Повысить параллелизм SELECT INTO OUTFILE.
Как оценить: Количество строк, возвращаемых SELECT INTO OUTFILE, соответствует количеству параллельно работающих Writers. Если возвращается только 1 строка (один Writer), можно попробовать включить параллельный экспорт.
Команда:
SET enable_parallel_outfile = true;
Примечания:
- После включения этой настройки
SELECT INTO OUTFILEсоздаёт столько Writers, сколько предусмотрено степенью параллелизма запроса. - Параллелизм запроса управляется переменной сеанса
parallel_pipeline_task_num, значение которой по умолчанию равно половине числа ядер CPU одного BE. - Пример: В кластере с 3 узлами BE и 8 ядрами на каждом узле включение параллельного экспорта приводит к созданию
4 × 3 = 12Writers.
Ограничения: Следующие запросы не поддерживают параллельный экспорт даже при включённом enable_parallel_outfile:
- Запросы с глобальной сортировкой, например
SELECT * FROM table ORDER BY id; - Запросы с глобальной агрегацией, например
SELECT SUM(cost) FROM table;
2. Оценка скорости экспорта
Цель: Определить, ограничена ли скорость экспорта пропускной способностью диска или сети.
Порядок действий:
- Посмотрите время записи (в секундах) и скорость (в KB/s) каждого Writer в строках, возвращаемых
SELECT INTO OUTFILE. - Сложите скорости нескольких Writers на одном узле, чтобы получить скорость записи этого узла.
- Сравните полученную скорость с предельной пропускной способностью:
- При экспорте на локальный диск сравните её с пропускной способностью диска.
- При экспорте в объектное хранилище сравните её с пропускной способностью сети.
Если фактическая скорость близка к предельной пропускной способности, ресурсы уже используются полностью. В противном случае можно продолжить настройку параллелизма.
Настройка EXPORT
Команда EXPORT фактически разбивает одно задание экспорта на несколько операторов SELECT INTO OUTFILE для выполнения. Перед настройкой необходимо разобраться в этом механизме разбиения.
1. Анализ выполнения по возвращённому результату
Команда:
SHOW EXPORT;
Возвращённый результат содержит строку JSON со структурой двумерного массива:
- Первое измерение: Количество параллельных потоков Export, то есть количество операторов Outfile, запускаемых параллельно.
- Второе измерение: Результат, возвращаемый одним оператором Outfile (сведения о записи данных несколькими Writers).
Пример:
[
[
{
"fileNumber": "1",
"totalRows": "640321",
"fileSize": "350758307",
"url": "file:///127.0.0.1/mnt/disk2/ftw/tmp/export/exp_59fd917c43874adc-9b1c3e9cd6e655be_*",
"writeTime": "17.989",
"writeSpeed": "19041.66"
},
{...},
{...},
{...}
],
[
{
"fileNumber": "1",
"totalRows": "646609",
"fileSize": "354228704",
"url": "file:///127.0.0.1/mnt/disk2/ftw/tmp/export/exp_c75b9d4b59bf4943-92eb94a7b97e46cb_*",
"writeTime": "17.249",
"writeSpeed": "20054.64"
},
{...},
{...},
{...}
]
]
Пояснение: В приведённом примере запущены 2 команды Outfile, каждая из которых задействует 4 Writers для параллельной записи. Количество параллельно выполняемых команд Outfile, а значит и общий параллелизм, можно регулировать с помощью параметра parallelism в свойствах команды Export.
2. Параметры, влияющие на параллелизм
Общий параллелизм задания Export определяется совокупностью следующих параметров:
| Параметр | Область действия | По умолчанию | Описание |
|---|---|---|---|
parallelism | Команда Export | - | Задаёт максимальное количество команд Outfile, на которые можно разбить задание Export |
data_consistency | Команда Export | partition | Определяет, нужно ли дополнительно разбивать команды Outfile в пределах одного раздела |
async_task_consumer_thread_num | Конфигурация FE | 64 | Общее количество задач Export, которые кластер может выполнять параллельно; ограничение действует для всех задач Export в совокупности |
parallelism
Задаёт максимальное количество команд Outfile, на которые можно разбить одно задание Export, то есть верхний предел параллелизма внутри задания.
data_consistency
Определяет, нужно ли дополнительно разбивать команды Outfile в пределах одного раздела:
partition(по умолчанию): Дополнительное разбиение разделов не выполняется. Количество команд Outfile не превышает количество задействованных разделов.none: Разделы дополнительно разбиваются для повышения параллелизма. Однако если в раздел записываются данные, согласованность экспорта может нарушиться (разные команды Outfile для одного раздела могут экспортировать данные разных версий).
Подробнее см. в руководстве по команде EXPORT.
async_task_consumer_thread_num
Параметр конфигурации FE, задающий верхний предел количества задач Export, которые текущий кластер может выполнять параллельно. Значение по умолчанию — 64.
- Задание Export разбивается на несколько задач Export в соответствии с его степенью параллелизма.
- Это ограничение действует для всех задач Export в совокупности.
- Чтобы увеличить количество задач экспорта, которые кластер может выполнять параллельно, увеличьте значение этого параметра и перезапустите узлы FE.
Рекомендуемый порядок настройки
Если производительность экспорта не соответствует ожиданиям, выполните проверку в следующем порядке:
- Проверьте параллелизм: По возвращённому результату (количеству строк
SELECT INTO OUTFILEили JSON изSHOW EXPORT) определите фактическое количество параллельно работающих Writers. - Оцените использование пропускной способности: Сложите скорости Writer на одном узле, сравните результат с пропускной способностью диска или сети и определите, достигнут ли её предел.
- Настройте параметры параллелизма:
SELECT INTO OUTFILE: Включитеenable_parallel_outfileи при необходимости изменитеparallel_pipeline_task_num.EXPORT: Изменитеparallelismи при необходимости установите дляdata_consistencyзначениеnone.
- Настройте ограничения на уровне кластера: Если в кластере одновременно выполняется слишком много задач Export и их выполнение ограничивается, увеличьте значение параметра конфигурации FE
async_task_consumer_thread_numи перезапустите FE.