次の方法で共有


Azure Data Lake Storage Gen1 で PowerShell を使用するためのパフォーマンス チューニング ガイダンス

この記事では、PowerShell を使用して Data Lake Storage Gen1 を操作するときにパフォーマンスを向上させるために調整できるプロパティについて説明します。

Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を開始するには、Azure PowerShell のインストールに関する記事を参照してください。 Az PowerShell モジュールに移行する方法については、「Azure PowerShell を AzureRM から Azに移行する」を参照してください。

プロパティ 既定値 説明
PerFileThreadCount 10 このパラメーターを使用すると、各ファイルをアップロードまたはダウンロードするための並列スレッドの数を選択できます。 この数は、ファイルごとに割り当てることができる最大スレッド数を表しますが、シナリオによってはスレッドが少なくなる場合があります (たとえば、1 KB のファイルをアップロードする場合は、20 スレッドを要求した場合でも 1 つのスレッドを取得します)。
同時ファイル数 10 このパラメーターは、フォルダーのアップロードまたはダウンロード専用です。 このパラメーターは、アップロードまたはダウンロードできる同時ファイルの数を決定します。 この数は、一度にアップロードまたはダウンロードできる同時ファイルの最大数を表しますが、シナリオによってはコンカレンシーが少なくなる場合があります (たとえば、2 つのファイルをアップロードする場合は、15 個を要求しても 2 つの同時ファイルのアップロードが発生します)。

例:

このコマンドは、ファイルあたり 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: 合計スレッド数を決定する - 使用するスレッド数の合計を計算して開始します。 一般的なガイドラインとして、物理コアごとに 6 つのスレッドを使用する必要があります。

    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 を超えるファイルの場合は、最初の 2.5 GB のベースとして 10 個のスレッドを使用し、ファイル サイズを増やすごとに 1 つのスレッドを追加する必要があります。 ファイル サイズの範囲が広いフォルダーをコピーする場合は、それらを同様のファイル サイズにグループ化することを検討してください。 ファイル サイズが異なると、パフォーマンスが最適でない可能性があります。 同様のファイル サイズをグループ化できない場合は、最大ファイル サイズに基づいて PerFileThreadCount を設定する必要があります。

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

    例:

    1 GB から 10 GB までの 100 個のファイルがあると仮定すると、数式の最大ファイル サイズとして 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 のコンテキスト切り替え時に競合の問題が発生する可能性があります。

  • コンカレンシーのが不十分: コンカレンシーが十分でない場合は、クラスターが小さすぎる可能性があります。 クラスター内のノードの数を増やして、コンカレンシーを増やすことができます。

  • スロットリングエラー: 同時実行数が高すぎると、スロットリングエラーが発生する可能性があります。 スロットリングエラーが発生する場合は、同時実行数を減らすか、ご連絡ください。

次のステップ