Azure Data Lake Storage Gen1 にアクセスできる HDInsight クラスターがある場合は、DistCp などの Hadoop エコシステム ツールを使用して、HDInsight クラスター ストレージ (WASB) との間でデータを Data Lake Storage Gen1 アカウントにコピーできます。 この記事では、DistCp ツールの使用方法について説明します。
[前提条件]
- Azure サブスクリプション。 Azure 無料試用版の取得に関するページを参照してください。
- Azure Data Lake Storage Gen1 アカウント。 作成方法については、「Azure Data Lake Storage Gen1 を開始する」を参照してください。
- Azure HDInsight クラスター は、Data Lake Storage Gen1 アカウントにアクセスできます。 Data Lake Storage Gen1 を使用した HDInsight クラスターの作成に関する記事を参照してください。 クラスターのリモート デスクトップが有効になっていることを確認します。
HDInsight Linux クラスターから DistCp を使用する
HDInsight クラスターには DistCp ツールが付属しています。このツールを使用すると、さまざまなソースから HDInsight クラスターにデータをコピーできます。 Data Lake Storage Gen1 を追加のストレージとして使用するように HDInsight クラスターを構成した場合は、DistCp をすぐに使用して、Data Lake Storage Gen1 アカウントとの間でデータをコピーできます。 このセクションでは、DistCp ツールの使用方法について説明します。
デスクトップから、SSH を使用してクラスターに接続します。 Linux ベースの HDInsight クラスターへの接続を参照してください。 SSH プロンプトからコマンドを実行します。
Azure Storage BLOB (WASB) にアクセスできるかどうかを確認します。 次のコマンドを実行します。
hdfs dfs –ls wasb://<container_name>@<storage_account_name>.blob.core.windows.net/
出力には、ストレージ BLOB 内のコンテンツの一覧が表示されます。
同様に、クラスターから Data Lake Storage Gen1 アカウントにアクセスできるかどうかを確認します。 次のコマンドを実行します。
hdfs dfs -ls adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/
出力には、Data Lake Storage Gen1 アカウント内のファイルとフォルダーの一覧が表示されます。
DistCp を使用して、WASB から Data Lake Storage Gen1 アカウントにデータをコピーします。
hadoop distcp wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder
このコマンドは、WASB の /example/data/gutenberg/ フォルダーの内容を Data Lake Storage Gen1 アカウントの /myfolder にコピーします。
同様に、DistCp を使用して Data Lake Storage Gen1 アカウントから WASB にデータをコピーします。
hadoop distcp adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg
このコマンドは、Data Lake Storage Gen1 アカウントの /myfolder の内容を WASB の /example/data/gutenberg/ フォルダーにコピーします。
DistCp を使用するときのパフォーマンスに関する考慮事項
DistCp ツールの最小粒度は 1 つのファイルであるため、同時コピーの最大数を設定することが、Data Lake Storage Gen1 に対して最適化するための最も重要なパラメーターです。 コマンド ラインでマッパー ('m') パラメーターの数を設定することで、同時コピーの数を制御できます。 このパラメーターで、データをコピーするときに使用されるマッパーの最大数を指定します。 既定値は 20 です。
例:
hadoop distcp wasb://<container_name>@<storage_account_name>.blob.core.windows.net/example/data/gutenberg adl://<data_lake_storage_gen1_account>.azuredatalakestore.net:443/myfolder -m 100
使用するマッパーの数を決定する方法
使用できるガイダンスがいくつかあります。
手順 1: YARN メモリの合計を決定 する - 最初の手順では、DistCp ジョブを実行するクラスターで使用可能な YARN メモリを決定します。 この情報は、クラスターに関連付けられている Ambari ポータルで確認できます。 YARN に移動し、[ Configs ] タブを表示して YARN メモリを確認します。 YARN メモリの合計を取得するには、ノードあたりの YARN メモリとクラスター内のノード数を乗算します。
手順 2:マッパーの数を計算する - m の値は、合計 YARN メモリを YARN コンテナーのサイズで割った値と等しくなります。 YARN コンテナーのサイズ情報は、Ambari ポータルでも入手できます。 YARN に移動し、[ 構成] タブを 表示します。YARN コンテナーのサイズがこのウィンドウに表示されます。 マッパーの数 (m) に到達する式は次のとおりです。
m = (number of nodes * YARN memory for each node) / YARN container size
例:
クラスターに 4 つの D14v2s ノードがあり、10 個の異なるフォルダーから 10 TB のデータを転送するとします。 各フォルダーに含まれるデータ量はさまざまです。また、各フォルダー内のファイル サイズも異なります。
YARN メモリの合計 - Ambari ポータルから、YARN メモリが D14 ノードに対して 96 GB であると判断します。 したがって、4 ノード クラスターの合計 YARN メモリは次のとおりです。
YARN memory = 4 * 96GB = 384GB
マッパーの数 - Ambari ポータルから、D14 クラスター ノードの YARN コンテナー サイズが 3072 であると判断します。 したがって、マッパーの数は次のとおりです。
m = (4 nodes * 96GB) / 3072MB = 128 mappers
他のアプリケーションがメモリを使用している場合は、DistCp にクラスターの YARN メモリの一部のみを使用するように選択できます。
大規模なデータセットのコピー
移動するデータセットのサイズが大きい場合 (たとえば、 > 1 TB)、またはフォルダーが異なる場合は、複数の DistCp ジョブを使用することを検討してください。 パフォーマンスは向上しない可能性がありますが、ジョブが分散されるため、ジョブが失敗した場合は、ジョブ全体ではなく、その特定のジョブのみを再起動する必要があります。
制限事項
DistCp では、パフォーマンスを最適化するために、同じようなサイズのマッパーを作成しようとします。 マッパー数を増やしても、必ずしもパフォーマンスが向上するとは限りません。
DistCp では、ファイルあたりのマッパーの数が 1 つに制限されています。 したがって、ファイル数よりも多くのマッパーを持つことはできません。 DistCp では 1 つのファイルに割り当てることができるマッパーが 1 つだけであるため、これにより、大きなファイルのコピーに使用できるコンカレンシーの量が制限されます。
大きなファイルの数が少ない場合は、256 MB のファイル チャンクに分割して、コンカレンシーの可能性を高めます。
Azure Blob Storage アカウントからコピーする場合は、Blob Storage 側でコピー ジョブが調整される可能性があります。 これにより、コピー ジョブのパフォーマンスが低下します。 Azure Blob Storage の制限の詳細については、Azure サブスクリプションでの Azure Storage の制限 とサービスの制限に関するページを参照してください。