将 PowerShell 与 Azure Data Lake Storage Gen1 配合使用的性能优化指南

本文介绍在使用 PowerShell 处理 Data Lake Storage Gen1 时可以优化以获得更好的性能的属性。

注释

建议使用 Azure Az PowerShell 模块与 Azure 交互。 请参阅安装 Azure PowerShell 以开始使用。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

财产 违约 说明
PerFileThreadCount 10 通过此参数,可以选择用于上传或下载每个文件的并行线程数。 此数字表示每个文件可以分配的最大线程数,但根据方案,可能会得到较少的线程(例如,如果要上传 1 KB 文件,即使请求 20 个线程),也会获得一个线程。
并行文件计数 10 此参数专门用于上传或下载文件夹。 此参数确定可以上传或下载的并发文件数。 此数字表示一次可以上传或下载的最大并发文件数,但根据你的方案,你可能会获得更少的并发性(例如,如果要上传两个文件,即使你要求 15,也会获得两个并发文件上传)。

示例:

此命令使用每个文件 20 个线程和 100 个并发文件将 Data Lake Storage Gen1 中的文件下载到用户的本地驱动器。

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

    示例:

    假设从具有 16 个核心的 D14 VM 运行 PowerShell 命令

    Total thread count = 16 cores * 6 = 96 threads

  • 步骤 2:计算 PerFileThreadCount - 我们基于文件大小计算 PerFileThreadCount。 对于小于 2.5 GB 的文件,无需更改此参数,因为默认值为 10 已足够。 对于大于 2.5 GB 的文件,应使用 10 个线程作为前 2.5 GB 的基础,并为每个增加 256 MB 的文件大小添加 1 个线程。 如果要复制具有大量文件大小的文件夹,请考虑将它们分组为类似的文件大小。 具有不同的文件大小可能会导致性能不佳。 如果无法对类似的文件大小进行分组,则应根据最大文件大小设置 PerFileThreadCount。

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

    示例:

    假设有 100 个文件,范围从 1 GB 到 10 GB,我们将 10 GB 用作公式的最大文件大小,如下所示。

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

  • 步骤 3:计算 ConcurrentFileCount - 使用线程总数和 PerFileThreadCount,根据以下公式计算 ConcurrentFileCount:

    Total thread count = PerFileThreadCount * ConcurrentFileCount

    示例:

    根据我们一直在使用的这些示例值

    96 = 40 * ConcurrentFileCount

    因此, ConcurrentFileCount2.4,我们可以将它舍入到 2

进一步优化

可能需要进一步调整,因为需要处理各种不同大小的文件。 如果所有文件或大部分文件都较大且更接近 10 GB 范围,则上述计算效果良好。 如果相反,有许多不同的文件大小,其中许多文件较小,则可以减少 PerFileThreadCount。 通过减少 PerFileThreadCount,我们可以增加 ConcurrentFileCount。 因此,如果我们假设大部分文件在 5 GB 范围内较小,则可以重做计算:

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

因此,ConcurrentFileCount 变为 96/20,即 4.8,取整为 4

可以根据文件大小的分布上调或下调 PerFileThreadCount 来继续调整这些设置。

限度

  • 文件数小于 ConcurrentFileCount:如果要上传的文件数小于计算的 ConcurrentFileCount ,则应将 ConcurrentFileCount 减少为等于文件数。 可以使用任何剩余线程来增加 PerFileThreadCount

  • 线程过多:如果在不增加群集大小的情况下增加线程计数过多,则会面临性能下降的风险。 在 CPU 上进行上下文切换时,可能会存在争用问题。

  • 并发不足:如果并发不足,群集可能太小。 可以增加群集中的节点数,从而提供更多并发性。

  • 限制错误:如果并发过高,你可能会看到限制错误。 如果您看到限速错误,应减少并发或联系我们。

后续步骤