S3DistCp (s3-dist-cp)
Apache DistCp は、大量のデータをコピーするときに使用できるオープンソースツールです。S3DistCp は DistCp に似ていますが、特に Amazon S3 の AWS で動作するように最適化されています。Amazon EMR バージョン 4.0 以降での S3DistCp のコマンドは s3-dist-cp で、これをクラスターのステップまたはコマンドラインに追加します。S3DistCp を使用すると、Amazon S3 の大量のデータを HDFS に効率的にコピーできます。ここにコピーされたデータは、Amazon EMR クラスターの以降のステップで処理できます。また、S3DistCp を使用して、Amazon S3 バケット間で、または HDFS から Amazon S3 にデータをコピーすることもできます。S3DistCp は、複数のバケットおよび複数の AWS アカウントでたくさんのオブジェクトを並行コピーすると、よりスケーラブルで効率的です。
実際のシナリオで S3DistCP Sの柔軟性を示す特定のコマンドについては、AWS Big Data ブログの「Seven tips for using S3DistCp
DistCp と同様に、S3DistCp は MapReduce を使用して、分散された方法でコピーを実行します。複数のサーバー全体でのコピー、エラー処理、復旧、および報告のタスクが共有されます。Apache DistCp オープンソースプロジェクトの詳細については、Apache Hadoop ドキュメントの「DistCp ガイド
指定したファイルの一部またはすべてを S3DistCp がコピーできない場合、クラスターステップは失敗し、ゼロ以外のエラーコードを返します。この場合、S3DistCp では、コピーされたファイルの一部がクリーンアップされません。
重要
S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。
S3DistCp は、Parquet 形式ファイルの連結をサポートしていません。代わりに PySpark を使用します。詳細については、「Amazon EMR での Parquet ファイルの連結
S3DistCP を使用して (ディレクトリではなく) 1 つのファイルを S3 から HDFS にコピーするときにコピーエラーを回避するには、Amazon EMR バージョン 5.33.0 以降、または Amazon EMR 6.3.0 以降を使用してください。
S3DistCp のオプション
S3DistCp は DistCp と似ていますが、データのコピーと圧縮の方法を変更するためのさまざまな一連のオプションをサポートしています。
S3DistCp を呼び出す際に、次の表で示されているオプションを指定できます。オプションは、引数リストを使用してステップに追加されます。S3DistCp の引数の例を次の表に示します。
| オプション | 説明 | 必須 |
|---|---|---|
‑‑src=LOCATION
|
コピーするデータのロケーション。HDFS または Amazon S3 ロケーションのいずれかを指定できます。 例: 重要S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。 |
あり |
‑‑dest=LOCATION
|
データのコピー先。HDFS または Amazon S3 ロケーションのいずれかを指定できます。 例: 重要S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。 |
あり |
‑‑srcPattern=PATTERN
|
正規表現の引数にアスタリスク(*)などの特殊文字が含まれる場合は、正規表現または 例: |
なし |
‑‑groupBy=PATTERN
|
複数のファイルを統合する正規表現 括弧は、ファイルをグループ化する方法を示しています。括弧で囲まれたステートメントと一致するすべての項目が 1 つの出力ファイルに統合されます。正規表現に括弧で囲まれたステートメントが含まれない場合、クラスターは S3DistCp ステップで失敗し、エラーを返します。 正規表現の引数にアスタリスク(*)などの特殊文字が含まれる場合は、正規表現または
例: |
なし |
‑‑targetSize=SIZE
|
例: |
なし |
‑‑appendToLastFile |
Amazon S3 から HDFS へ既存するファイルをコピーする際の S3DistCp の動作を指定します。既存のファイルに新しいファイルのデータが追加されます。 |
なし |
‑‑outputCodec=CODEC
|
コピーされたファイルで使用する圧縮コーデックを指定します。値としては 例: |
なし |
‑‑s3ServerSideEncryption
|
ターゲットデータが SSL を使って転送され、AWS サービス側キーを使用して Amazon S3 で自動的に暗号化されるようにします。S3DistCp を使用してデータを取得するとき、オブジェクトは自動的に暗号化解除されます。暗号化されていないオブジェクトを、暗号化が必要な Amazon S3 バケットにコピーしようとすると、操作は失敗します。詳細については、「データ暗号化の使用」を参照してください。 例: |
なし |
‑‑deleteOnSuccess
|
コピーオペレーションが成功すると、このオプションにより、S3DistCp がコピーされたファイルをコピー元の場所を削除します。このオプションは、スケジュールされたタスクとして、ログファイルなどの出力ファイルを、あるロケーションから他のロケーションにコピーするときに役立ちます。これにより、同じファイルを 2 回コピーせずに済むようになります。 例: |
なし |
‑‑disableMultipartUpload
|
マルチパートアップロードの使用を無効にします。 例: |
なし |
‑‑multipartUploadChunkSize=SIZE
|
Amazon S3 マルチパートアップロードでの各パートサイズ (MiB 単位)。S3DistCp では、 例: |
なし |
‑‑numberFiles
|
出力ファイル名の先頭に通し番号を付けます。 例: |
なし |
‑‑startingIndex=INDEX
|
例: |
なし |
‑‑outputManifest=FILENAME
|
Gzip で圧縮されたテキストファイルを作成します。このテキストファイルには、S3DistCp によってコピーされたすべてのファイルのリストが含まれます。 例: |
なし |
‑‑previousManifest=PATH
|
例: |
なし |
‑‑requirePreviousManifest |
以前の S3DistCp の呼び出し中に作成したマニフェストファイルが必要です。これが false に設定されている場合、以前のマニフェストが指定されていないときにエラーが生成されません。デフォルトは true です。 |
なし |
‑‑copyFromManifest
|
例: |
なし |
‑‑s3Endpoint=ENDPOINT |
ファイルをアップロードするときに使用する Amazon S3 エンドポイントを指定します。このオプションは、アップロード元とアップロード先の両方のエンドポイントを設定します。設定しない場合は、デフォルトのエンドポイント 例: |
なし |
‑‑storageClass=CLASS |
送信先が Amazon S3 のときに使用するストレージクラス。有効な値は、STANDARD と REDUCED_REDUNDANCY です。このオプションを指定しない場合、S3DistCp はストレージクラスを維持しようとします。 例: |
なし |
‑‑srcPrefixesFile=PATH |
例: |
なし |
上記のオプション以外にも、S3DistCp はツールインターフェイス
クラスターに S3DistCp をステップとして追加する
S3DistCp を呼び出すには、これをステップとしてクラスターに追加します。ステップは、起動時にクラスターに追加することも、コンソール、CLI、または API を使用して実行中のクラスターに追加することもできます。以下の例では、実行中のクラスターへの S3DistCp ステップの追加を示します。クラスターへのステップの追加の詳細については、「Amazon EMR 管理ガイド」の「クラスターへの作業の送信」を参照してください。
AWS CLI を使用して実行中のクラスターに S3DistCp ステップを追加するには
AWS CLI での Amazon EMR コマンドの使用の詳細については、「AWS CLI コマンドリファレンス」を参照してください。
-
S3DistCp を呼び出すステップをクラスターに追加するには、S3DistCp によるコピーオペレーションの実行方法を指定するパラメータを引数として渡します。
次の例では、デーモンログを Amazon S3 から
hdfs:///outputにコピーします。次のコマンドについて説明します。-
‑‑cluster-idでクラスターを指定します。 -
Jarは、S3DistCp JAR ファイルのロケーションです。command-runner.jar を使用してクラスターでコマンドを実行する方法の例については、「カスタム JAR ステップを送信してスクリプトまたはコマンドを実行する」を参照してください。 -
Argsは、S3DistCp に渡すオプション名/値ペアのカンマ区切りのリストです。使用可能なオプションの完全なリストについては、「S3DistCp のオプション」を参照してください。
実行中のクラスターに S3DistCp コピーステップを追加するには、Amazon S3 に保存された JSON ファイルまたはローカルファイルシステムのファイル (この例では
) に次の内容を配置します。myStep.jsonj-3GYXXXXXX9IOKをクラスター ID に置き換え、amzn-s3-demo-bucketを Amazon S3 バケット名に置き換えます。[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]aws emr add-steps ‑‑cluster-idj-3GYXXXXXX9IOK‑‑steps file://./myStep.json -
例 Amazon S3 からのログファイルを HDFS へコピーする
この例では、実行中のクラスターにステップを追加して、Amazon S3 バケットに格納されたログファイルを HDFS にコピーする方法も示します。この例では、‑‑srcPattern オプションを使用して、デーモンログにコピーされたデータを制限しています。
‑‑srcPattern オプションを使用してログファイルを Amazon S3 から HDFS にコピーするには、Amazon S3 に保存された JSON ファイルまたはローカルファイルシステムのファイル (この例では ) に次の内容を配置します。myStep.jsonj-3GYXXXXXX9IOK をクラスター ID に置き換え、amzn-s3-demo-bucket を Amazon S3 バケット名に置き換えます。
[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]