将 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
因此, ConcurrentFileCount 为 2.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 上进行上下文切换时,可能会存在争用问题。
并发不足:如果并发不足,群集可能太小。 可以增加群集中的节点数,从而提供更多并发性。
限制错误:如果并发过高,你可能会看到限制错误。 如果您看到限速错误,应减少并发或联系我们。