Поделиться через


Руководство по настройке производительности для использования PowerShell с Azure Data Lake Storage 1-го поколения

В этой статье описываются свойства, которые можно настроить для повышения производительности при использовании PowerShell для работы с Data Lake Storage 1-го поколения.

Примечание.

Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Чтобы узнать, как осуществить переход на модуль Az PowerShell, см. статью Перенос Azure PowerShell с AzureRM на Az.

Недвижимость По умолчанию Описание
PerFileThreadCount 10 Этот параметр позволяет выбрать количество параллельных потоков для отправки или скачивания каждого файла. Это число представляет максимальные потоки, которые можно выделить для каждого файла, но вы можете получить меньше потоков в зависимости от вашего сценария (например, если вы отправляете 1 КБ-файл, вы получите один поток, даже если вы запрашиваете 20 потоков).
КоличествоОдновременныхФайлов 10 Этот параметр предназначен специально для отправки или скачивания папок. Этот параметр определяет количество одновременных файлов, которые можно загрузить или скачать. Это число представляет максимальное количество файлов, которые можно отправлять или загружать одновременно, но в зависимости от вашего сценария фактическое количество может быть меньше (например, если вы отправляете два файла, вы получите два одновременных отправки, даже если запрашиваете 15).

Пример:

Эта команда загружает файлы из Data Lake Storage 1-го поколения на локальный диск пользователя с помощью 20 потоков на файл и 100 параллельных файлов.

Export-AzDataLakeStoreItem -AccountName "Data Lake Storage Gen1 account name" `
    -PerFileThreadCount 20 `
	-ConcurrentFileCount 100 `
	-Path /Powershell/100GB `
	-Destination C:\Performance\ `
	-Force `
	-Recurse

Определение значений свойств

Следующий вопрос, который может возникнуть, заключается в том, как определить, какое значение необходимо указать для свойств, связанных с производительностью. Ниже представлены некоторые полезные рекомендации.

  • Шаг 1. Определение общего количества потоков . Начните с вычисления общего количества потоков для использования. В общем, рекомендуется использовать шесть потоков на каждое физическое ядро.

    Total thread count = total physical cores * 6

    Пример:

    Предположим, что вы выполняете команды PowerShell из виртуальной машины D14 с 16 ядрами

    Total thread count = 16 cores * 6 = 96 threads

  • Шаг 2. Вычисление PerFileThreadCount . Мы вычисляем perFileThreadCount на основе размера файлов. Для файлов меньше 2,5 ГБ этот параметр не требуется изменять, так как по умолчанию достаточно 10. Для файлов размером более 2,5 ГБ следует использовать 10 потоков в качестве базы для первых 2,5 ГБ и добавить 1 поток для каждого дополнительного увеличения размера файла в 256 МБ. Если вы копируете папку с большим диапазоном размеров файлов, рассмотрите возможность группировки их в аналогичные размеры файлов. Наличие непохожих размеров файлов может привести к неоптимальным производительности. Если это невозможно сгруппировать аналогичные размеры файлов, следует задать PerFileThreadCount на основе самого большого размера файла.

    PerFileThreadCount = 10 threads for the first 2.5 GB + 1 thread for each additional 256 MB increase in file size

    Пример:

    Если у вас есть 100 файлов от 1 ГБ до 10 ГБ, мы используем 10 ГБ в качестве наибольшего размера файла для уравнения, который будет читаться следующим образом.

    PerFileThreadCount = 10 + ((10 GB - 2.5 GB) / 256 MB) = 40 threads

  • Шаг 3. Вычисление concurrentFilecount . Используйте общее число потоков и PerFileThreadCount для вычисления ConcurrentFileCount на основе следующего уравнения:

    Total thread count = PerFileThreadCount * ConcurrentFileCount

    Пример:

    На основе примеров значений, которые мы использовали

    96 = 40 * ConcurrentFileCount

    Таким образом, ConcurrentFileCount составляет 2.4, что можно округить до 2.

Дальнейшая настройка

Вам может потребоваться дополнительная настройка, так как существует диапазон размеров файлов для работы. Предыдущий расчет работает хорошо, если все или большинство файлов больше и ближе к диапазону 10 ГБ. Если, наоборот, существует множество файлов разного размера, и многие из них небольшие, то можно уменьшить PerFileThreadCount. Снизив PerFileThreadCount, мы можем увеличить значение ConcurrentFileCount. Таким образом, если предположим, что большинство наших файлов меньше в диапазоне 5 ГБ, мы можем повторить вычисление:

PerFileThreadCount = 10 + ((5 GB - 2.5 GB) / 256 MB) = 20

Таким образом, ConcurrentFileCount становится 96/20, что составляет 4,8, округляется до 4.

Вы можете продолжить настройку этих параметров, изменив PerFileThreadCount вверх и вниз в зависимости от распределения размеров файлов.

Ограничение

  • Число файлов меньше, чем ConcurrentFileCount: если количество файлов, которые вы загружаете, меньше, чем вычисленное ConcurrentFileCount, необходимо уменьшить ConcurrentFileCount до количества файлов. Чтобы увеличить PerFileThreadCount, можно использовать любые оставшиеся потоки.

  • Слишком много потоков: если увеличить количество потоков слишком много, не увеличивая размер кластера, вы рискуете снизить производительность. При переключении контекста на ЦП могут возникнуть конфликты.

  • Недостаточно параллелизма. Если параллелизм недостаточно, кластер может быть слишком мал. Вы можете увеличить количество узлов в кластере, что дает больше параллелизма.

  • Ошибки ограничения: могут возникнуть ошибки ограничения, если конкурентность слишком велика. Если вы видите ошибки ограничения скорости, стоит либо уменьшить параллелизм, либо связаться с нами.

Дальнейшие действия