DistCp を使用して Azure Storage Blob と Azure Data Lake Storage の間でデータをコピーする
DistCp を使用して、汎用 V2 ストレージ アカウントと階層型名前空間が有効になっている汎用 V2 ストレージ アカウントとの間でデータをコピーすることができます。 この記事では、DistCp ツールの使用方法について説明します。
DistCp にはさまざまなコマンド ライン パラメーターが用意されており、その使用を最適化するため、この記事をお読みになることを強くお勧めします。 この記事では、階層型名前空間が有効になっているアカウントにデータをコピーする場合の使用方法に重点を置きつつ、基本的な機能を紹介します。
前提条件
- Azure サブスクリプション。 詳細については、Azure 無料試用版の取得に関するページを参照してください。
- Data Lake Storage の機能 (階層型名前空間) が有効になっていない既存の Azure Storage アカウント。
- Data Lake Storage の機能 (階層型名前空間) が有効になっている Azure Storage アカウント。 Azure Storage アカウントの作成方法については、「Azure Storage アカウントの作成」を参照してください
- 階層型名前空間が有効になっているストレージ アカウントで作成されたコンテナー。
- 階層型名前空間機能が有効になっているストレージ アカウントにアクセスできる Azure HDInsight クラスター。 詳しくは、「Azure HDInsight クラスターで Azure Data Lake Storage を使用する」をご覧ください。 クラスターのリモート デスクトップが有効になっていることを確認します。
HDInsight Linux クラスターから DistCp を使用する
HDInsight クラスターには DistCp ユーティリティが付属しています。これを使用してさまざまなソースから HDInsight クラスターにデータをコピーできます。 Azure Blob Storage と Azure Data Lake Storage を一緒に使用するように HDInsight クラスターが構成されている場合は、DistCp ユーティリティを使用して、両者の間で簡単にデータをコピーすることもできます。 このセクションでは、DistCp ユーティリティを使用する方法について説明します。
HDI クラスターに SSH セッションを作成します。 詳細については、Linux ベースの HDInsight クラスターへの接続に関する記事を参照してください。
(階層型名前空間が有効になっていない) 既存の汎用 V2 アカウントにアクセスできるかどうかを確認します。
hdfs dfs -ls wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/
出力には、コンテナーの内容の一覧が表示されます。
同様に、クラスターから階層型名前空間が有効になったストレージ アカウントにアクセスできるかどうかを確認します。 次のコマンドを実行します。
hdfs dfs -ls abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/
出力には、Data Lake Storage アカウントのファイル/フォルダーの一覧が表示されます。
DistCp を使用し、WASB から Data Lake Storage アカウントにデータをコピーします。
hadoop distcp wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
このコマンドを実行すると、Blob Storage の /example/data/gutenberg/ フォルダーの内容が Data Lake Storage アカウントの /myfolder にコピーされます。
同様に、DistCp を使用し、Data Lake Storage アカウントから Blob Storage (WASB) にデータをコピーします。
hadoop distcp abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg
このコマンドを実行すると、Data Lake Store アカウントの /myfolder の内容が WASB の /example/data/gutenberg/ フォルダーにコピーされます。
DistCp を使用するときのパフォーマンスに関する考慮事項
DistCp の最小粒度は 1 ファイルであるため、DistCp を Data Lake Storage に対して最適化するうえで最も重要なのが、同時コピーの最大数を設定するパラメーターです。 同時コピー数は、コマンド ラインのマッパー (m) パラメーターの数と等しくなります。 このパラメーターで、データをコピーするときに使用されるマッパーの最大数を指定します。 既定値は 20 です。
例
hadoop distcp -m 100 wasbs://<container-name>@<storage-account-name>.blob.core.windows.net/example/data/gutenberg abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/myfolder
使用するマッパーの数を特定するにはどうすればよいですか。
使用できるガイダンスがいくつかあります。
ステップ 1:'既定' の YARN アプリ キューに使用できる合計メモリを決定する - 最初の手順では、'既定' の YARN アプリ キューに使用可能なメモリを決定します。 この情報は、クラスターに関連付けられている Ambari ポータルで確認できます。 YARN に移動し、[Configs](構成) タブで '既定' の YARN アプリ キューに使用可能な YARN メモリを確認します。 これは、DistCp ジョブ (実際には MapReduce ジョブ) に使用可能なメモリの合計です。
手順 2:マッパーの数を計算する - m の値は、合計 YARN メモリを YARN コンテナーのサイズで割った値と等しくなります。 YARN コンテナー サイズの情報は、Ambari ポータルでも入手できます。 YARN に移動し、[Configs] \(構成) タブを表示します。YARN コンテナーのサイズは、このウィンドウに表示されます。 マッパーの数 (m) を求めるための式を次に示します
m = (ノードの数 * YARN の各ノードのメモリ) / YARN コンテナーのサイズ
例
4x D14v2s クラスターがあり、10 個のフォルダーから 10 TB のデータを転送しようとしているとします。 各フォルダーに含まれるデータ量はさまざまです。また、各フォルダー内のファイル サイズも異なります。
合計 YARN メモリ: Ambari ポータルから、D14 ノードの YARN メモリが 96 GB であることがわかります。 したがって、4 ノード クラスターの合計 YARN メモリは次のとおりです。
YARN メモリ = 4 * 96 GB = 384 GB
マッパーの数: Ambari ポータルから、D14 クラスター ノードの YARN コンテナー サイズが 3,072 MB であることがわかります。 したがって、マッパーの数は次のとおりです。
m = (4 ノード * 96 GB) / 3072 MB = 128 マッパー
他のアプリケーションがメモリを使用している場合は、クラスターの YARN メモリで DistCp に対する部分のみを使用するように選択できます。
大規模なデータセットのコピー
移動するデータセットのサイズが大きい場合 (たとえば 1 TB を超える場合)、または、さまざまなフォルダーが多数ある場合は、複数の DistCp ジョブを使用することを検討します。 パフォーマンスの向上はないと思われますが、ジョブが分散されるため、あるジョブが失敗したときに、再開する必要があるのは、ジョブ全体ではなく特定のジョブのみになります。
制限事項
DistCp では、パフォーマンスを最適化するために、同じようなサイズのマッパーを作成しようとします。 マッパー数を増やしても、必ずしもパフォーマンスが向上するとは限りません。
DistCp では、ファイルあたりのマッパーの数が 1 つに制限されています。 したがって、ファイル数よりも多くのマッパーを持つことはできません。 DistCp がファイルに割り当てることができるマッパーの数は 1 つだけのため、大きなファイルのコピーに使用できるコンカレンシー量は制限されます。
大きなファイルが少数だけ存在する場合は、潜在的なコンカレンシーを高めるために、そのファイルを 256 MB ファイル チャンクに分割します。