Сокращения
- ADLA: аналитика озера данных Azure
- ADLS: хранилище озера данных Azure
Я пытался выяснить, как лучше всего сохранить входные данные для задания ADLA U-SQL в ADLS (поколение 1) или в контейнере больших двоичных объектов хранилища, и обнаружил, что извлечение задания ADLA производительность ужасна при чтении из ADLS.
Для одного теста я загрузил один и тот же набор данных в ADLS Gen 1 и контейнер BLOB-объектов общего назначения и выполнил одно и то же задание ADLS U-SQL, которое варьировалось только в том месте, где они получали свои входные данные. Исключение входного набора файлов (по дате) сократило входной набор до 67 входных файлов, общим объемом 1,59 МБ (да, МБ - много маленьких файлов в этом синтетическом наборе данных)
Задания ADLA получают свои данные из ADLS (либо adl: или swebhdfs: протоколы - почти ничего не изменилось), либо из хранилища больших двоичных объектов общего назначения ( wasb: protocol ).
Из ADLS этап извлечения занял почти 13 минут, в то время как учетная запись BLOB общего назначения заняла всего 18 секунд. Остальная часть рабочего времени была практически одинаковой для всех источников ввода (как и следовало ожидать).
Должен ли я видеть такую разницу в производительности, когда мой входной набор данных находится в ADLS, а не в учетной записи общего назначения?
Мой скрипт ADLA выглядит так - в этом нет ничего экзотического:
//General purpose blob wasb: protocol
DECLARE @InputPath = @"wasb://{container}@{account}.blob.core.windows.net/events/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}_{*}";
//ADLS adl: protocol
//DECLARE @InputPath = @"adl://{adls-account}.azuredatalakestore.net/events/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}_{*}";
//ADLS swebhdfs: protocol
//DECLARE @InputPath = @"swebhdfs://{adls-account}.azuredatalakestore.net/events/{date:yyyy}/{date:MM}/{date:dd}/{date:HH}_{*}";
DECLARE @StartDate = DateTime.Parse("2018-02-25T00:00:00+00:00");
DECLARE @EndDate = DateTime.Parse("2018-02-27T23:59:59+00:00");
@tsvArchiveRecords =
EXTRACT
TenantId int?,
UserId long?,
// Snip more fields for brevity
date DateTime //virtual column
FROM @InputPath
USING Extractors.Tsv(skipFirstNRows: 1);
@logs =
SELECT TenantId,
UserId,
// Snip more fields for brevity
FROM @tsvArchiveRecords
WHERE date BETWEEN @StartDate AND @EndDate;
//snip more processing and outputs for brevity