Перейти к содержимому
Последнее обновление

Рекомендации по экспорту данных

В этой статье объясняется, как оценить рациональность использования ресурсов при экспорте данных из Doris и повысить эффективность экспорта за счёт настройки параллелизма и других параметров. Рассматриваются два распространённых способа экспорта:

Способ экспортаСценарии примененияУправление параллелизмом
SELECT INTO OUTFILEЭкспорт результата одного SQL-запроса с гибкими возможностями настройкиПеременная сеанса enable_parallel_outfile
EXPORTМассовый экспорт больших таблиц или разделов с автоматическим разбиением на несколько задач Outfileparallelism, 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 = 12 Writers.

Ограничения: Следующие запросы не поддерживают параллельный экспорт даже при включённом enable_parallel_outfile:

  • Запросы с глобальной сортировкой, например SELECT * FROM table ORDER BY id;
  • Запросы с глобальной агрегацией, например SELECT SUM(cost) FROM table;

2. Оценка скорости экспорта​

Цель: Определить, ограничена ли скорость экспорта пропускной способностью диска или сети.

Порядок действий:

  1. Посмотрите время записи (в секундах) и скорость (в KB/s) каждого Writer в строках, возвращаемых SELECT INTO OUTFILE.
  2. Сложите скорости нескольких Writers на одном узле, чтобы получить скорость записи этого узла.
  3. Сравните полученную скорость с предельной пропускной способностью:
    • При экспорте на локальный диск сравните её с пропускной способностью диска.
    • При экспорте в объектное хранилище сравните её с пропускной способностью сети.

Если фактическая скорость близка к предельной пропускной способности, ресурсы уже используются полностью. В противном случае можно продолжить настройку параллелизма.

Настройка 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Команда ExportpartitionОпределяет, нужно ли дополнительно разбивать команды Outfile в пределах одного раздела
async_task_consumer_thread_numКонфигурация FE64Общее количество задач 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.

Рекомендуемый порядок настройки​

Если производительность экспорта не соответствует ожиданиям, выполните проверку в следующем порядке:

  1. Проверьте параллелизм: По возвращённому результату (количеству строк SELECT INTO OUTFILE или JSON из SHOW EXPORT) определите фактическое количество параллельно работающих Writers.
  2. Оцените использование пропускной способности: Сложите скорости Writer на одном узле, сравните результат с пропускной способностью диска или сети и определите, достигнут ли её предел.
  3. Настройте параметры параллелизма:
    • SELECT INTO OUTFILE: Включите enable_parallel_outfile и при необходимости измените parallel_pipeline_task_num.
    • EXPORT: Измените parallelism и при необходимости установите для data_consistency значение none.
  4. Настройте ограничения на уровне кластера: Если в кластере одновременно выполняется слишком много задач Export и их выполнение ограничивается, увеличьте значение параметра конфигурации FE async_task_consumer_thread_num и перезапустите FE.