Drill - проблемы производительности ввода-вывода Parquet с BLOB-объектами Azure или файлами Azure - PullRequest
1 голос
/ 29 июня 2019

Проблема:

  • При чтении из хранилища Azure производительность чтения паркета в Drill, по-видимому, в 5–10 раз ниже, что делает его непригодным для больших рабочих нагрузок.
  • Появляетсябыть только проблемой при чтении паркетов.Чтение CSV, с другой стороны, проходит нормально.

Давайте иметь:

  • учетная запись хранилища BLOB-объектов Azure с ~ 1 ГБ source.csv и паркетами с теми же данными.
  • Azure Premium Файловое хранилище с теми же файлами
  • Локальная папка на диске, содержащая те же файлы
  • Дрель, работающая на виртуальной машине Azure в одиночном режиме

Конфигурация детализации:

  • Плагин хранилища BLOB-объектов Azure, работающий в качестве пространства имен blob
  • Файлы Azure, смонтированные с SMB в / data / dfs, используемые в качестве пространства имен dfs
  • Папка локального диска, используемая в качестве пространства имен local

ВМ

  • Стандартный E4s v3 (4 vcpus, память 32 ГиБ)
  • 256 ГБ SSD
  • NIC 2 Гбит / с
  • 6400 IOPS / 96 МБ / с

Общий доступ к файлам Azure Premium

  • 1000 ГБ
  • 1000 IOPS base / 3000 IOPS Burst * Пропускная способность 1054 *
  • 120 МБ / с

Тесты хранилища

  • Измерено с dd, 1 ГБ данных, различные размеры блоков, conv = fdatasync
  • Кэш FS сбрасывается перед каждым тестом чтения (sudo sh -c "echo 3 > /proc/sys/vm/drop_caches")

Локальный диск

+-------+------------+--------+
| Mode  | Block size | Speed  |
+-------+------------+--------+
| Write |       1024 | 37MB/s |
| Write |         64 | 16MBs  |
| Read  |       1024 | 70MB/s |
| Read  |         64 | 44MB/s |
+-------+------------+--------+

СХД Azure Premium для хранения файлов SMB

+-------+------------+---------+
| Mode  | Block size |  Speed  |
+-------+------------+---------+
| Write |       1024 | 100MB/s |
| Write |         64 | 23MBs   |
| Read  |       1024 | 88MB/s  |
| Read  |         64 | 40MB/s  |
+-------+------------+---------+

BLOB-объект Azure

Максимальная известная пропускная способность BLOB-объектов Azure составляет 60 МБ / с.Скорость загрузки / выгрузки привязана к целевой скорости чтения / записи в хранилище.


Тесты детализации

  • Кэш файловой системы очищался перед каждым тестом чтения.
  • Производительность ввода-вывода, наблюдаемая при iotop
  • Запросы были выбраны просто только для демонстрации.Увеличение времени выполнения для более сложных запросов является линейным.

Примеры запросов:

-- Query A: Reading parquet
select sum(`Price`) as test from namespace.`Parquet/**/*.parquet`;

-- Query B: Reading CSV
select sum(CAST(`Price` as DOUBLE)) as test from namespace.`sales.csv`;

Результаты

+-------------+--------------------+----------+-----------------+
|    Query    | Source (namespace) | Duration | Disk read usage |
+-------------+--------------------+----------+-----------------+
| A (Parquet) | dfs(smb)           | 14.8s    | 2.8 - 3.5 MB/s  |
| A (Parquet) | blob               | 24.5s    | N/A             |
| A (Parquet) | local              | 1.7s     | 40 - 80 MB/s    |
| ---         | ---                | ---      | ---             |
| B (CSV)     | dfs(smb)           | 22s      | 30 - 60 MB/s    |
| B (CSV)     | blob               | 29s      | N/A             |
| B (CSV)     | local              | 18s      | 68 MB/s         |
+-------------+--------------------+----------+-----------------+

Наблюдения

  • При чтении паркета будет создано больше потоков, но только процесс cisfd отнимает производительность ввода-вывода.
  • Попытка настроить производительность считывателя паркета, как описано здесь , но без каких-либо существенных результатов.
  • Существует большой пик выходных данных во время запроса паркетов из хранилища Azure, который в несколько раз превышает размер паркетных данных.Паркет имеет размер ~ 300 МБ, но выходной пик для одного запроса на чтение составляет около 2,5 ГБ.

Заключение

  • Чтение паркетов из файлов Azure предназначено длянекоторые причины замедлились до невероятных скоростей.
  • Чтение паркетов из BLOB-объекта Azure даже немного медленнее.
  • Чтение паркетов из локальной файловой системы довольно быстрое, но не подходит для реального использования.
  • Чтение CSV из любого источника обычно использует пропускную способность хранилища, поэтому я предполагаю некоторую проблему / неправильную конфигурацию считывателя паркета.

Вопросы

  • По каким причинам производительность чтения паркета из хранилища Azure так резко снижается?
  • Есть ли способ оптимизировать его?

1 Ответ

0 голосов
/ 01 июля 2019

Я предполагаю, что вы бы перепроверили проблему производительности ввода-вывода с помощью Azure Monitor, и если проблема все еще будет сохраняться, я бы хотел тесно поработать над этой проблемой. Это может потребовать более глубокого расследования, поэтому, если у вас есть план поддержки, я прошу вас подать заявку на поддержку, в противном случае, пожалуйста, сообщите нам, мы постараемся помочь вам получить разовую бесплатную техническую поддержку. В этом случае, не могли бы вы отправить электронное письмо в AzCommunity [at] Microsoft [точка] com, ссылаясь на эту тему. Пожалуйста, укажите «ATTN subm» в поле «Тема». Благодарим Вас за сотрудничество по этому вопросу и ждем Вашего ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...