Hadoop DistCp (分散コピー) は、Hadoop 分散ファイルシステム (HDFS) クラスター間、または単一クラスター内でデータをレプリケートします。MapReduce を使用して、レプリケーション中にデータを分散、追跡、回復します。
オプションの完全なリストと詳細な使用方法については、Apache Hadoop ドキュメントの「DistCp Guide」をご参照ください。
Hadoop DistCp と Jindo DistCp の選択
E-MapReduce (EMR) は 2 つの DistCp ツールを提供しています。ご利用のデータソースと宛先に合わせて選択してください。
| ツール | 説明 | 使用場面 |
|---|---|---|
| Hadoop DistCp | 分散データレプリケーション用の組み込みオープンソース Hadoop ツール。 | HDFS クラスター間でデータをレプリケートします。 |
| Jindo DistCp | JindoFS データ移行ツール。Object Storage Service (OSS)、OSS-HDFS、および Amazon S3 互換のデータソースをサポートします。 | HDFS データを OSS または OSS-HDFS に移行します。Amazon S3 データを OSS または OSS-HDFS に移行します。 |
クラスター間でのデータコピー
前提条件
ソース HDFS クラスターと宛先 HDFS クラスター間のネットワーク接続を確立します。セットアップ手順については、「E-MapReduce データ移行ソリューション」をご参照ください。
コピーコマンドの実行
/foo/bar ディレクトリを nn1 クラスターから /bar/foo に nn2 クラスターへ複製するには、次のコマンドを実行します:
hadoop distcp hdfs://nn1:8020/foo/bar hdfs://nn2:8020/bar/fooその他のオプションと使用方法の詳細については、「DistCp Guide」をご参照ください。
トラブルシューティング
「ACLs not supported on at least one file system」エラー
DistCp は次のエラーを返します:
org.apache.hadoop.tools.CopyListing$AclsNotSupportedException: ACLs not supported for file system: hdfs://xx.xx.xx.xx:8020この問題を解決するには:
ソースクラスターに同期するアクセス制御リスト (ACL) があるかどうかを判断します。
シナリオ アクション ソースクラスターに同期する ACL がある場合 同期権限を付与するために、 distcpの後に-pパラメーターを追加します。宛先クラスターが ACL をサポートしていない場合 宛先クラスターで ACL を有効にするには、その構成を変更し、NameNode を再起動します。 ソースクラスターは ACL をサポートしていません コマンドから -aパラメーターを削除します。ACL を同期する必要はありません。dfs.permissions.enabledとdfs.namenode.acls.enabledが両方のクラスターで一致することを確認します。値が異なる場合は、両方のクラスターで同じ値に設定するか、ACL 同期をスキップします。
DistCp 実行中の Out-of-memory (OOM) エラー
オープンソースの DistCp は、レプリケートするパスのリストをクライアントメモリに保存します。ファイル数が多い場合 (例: 100 万ファイル) やファイル名が長い場合、OOM エラーが発生します。
DistCp を実行する前にクライアントメモリを増やします:
export HADOOP_CLIENT_OPTS="-Xmx1024m"
hadoop distcp /source /target