S3DistCp (s3-dist-cp) - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

S3DistCp (s3-dist-cp)

Apache DistCp は、大量のデータをコピーするために使用できるオープンソースツールです。S3DistCp は に似ていますが DistCp、 AWS特に Amazon S3 と連携するように最適化されています。S3DistCp in Amazon EMRバージョン 4.0 以降のコマンドは でs3-dist-cp、クラスターまたはコマンドラインにステップとして追加します。S3DistCp を使用すると、大量のデータを Amazon S3 から に効率的にコピーHDFSし、Amazon EMRクラスター内の後続のステップで処理できます。S3DistCp を使用して、Amazon S3 バケット間、または から Amazon S3 HDFSにデータをコピーすることもできます。S3DistCp は、バケット間および AWS アカウント間で多数のオブジェクトを並列コピーするための、よりスケーラブルで効率的です。

実際のシナリオにおける S3DistCP の柔軟性を示す特定のコマンドについては、 AWS ビッグデータブログのS3DistCp を使用するための 7 つのヒント」を参照してください。

と同様に DistCp、S3DistCp は MapReduce を使用して分散的にコピーします。複数のサーバー全体でのコピー、エラー処理、復旧、および報告のタスクが共有されます。Apache DistCp オープンソースプロジェクトの詳細については、Apache Hadoop ドキュメントDistCpのガイドを参照してください。

S3DistCp が指定されたファイルの一部または全部をコピーできない場合、クラスターステップは失敗し、ゼロ以外のエラーコードを返します。この場合、S3DistCp は部分的にコピーされたファイルをクリーンアップしません。

重要

S3DistCp は、アンダースコア文字を含む Amazon S3 バケット名をサポートしていません。

S3DistCp は Parquet ファイルの連結をサポートしていません。 PySpark 代わりに を使用します。詳細については、「Amazon での Parquet ファイルの連結EMR」を参照してください。

S3DistCP を使用して S3 から に単一のファイル (ディレクトリではなく) をコピーする際のコピーエラーを回避するにはHDFS、Amazon EMRバージョン 5.33.0 S3 以降、または Amazon EMRバージョン 6.3.0 以降を使用します。

S3DistCp オプション

に似ていますが DistCp、S3DistCp はデータのコピー方法と圧縮方法を変更するためのさまざまなオプションをサポートしています。

S3DistCp を呼び出すときに、次の表で説明されているオプションを指定できます。オプションは、引数リストを使用してステップに追加されます。S3DistCp 引数の例を次の表に示します。

オプション 説明 必須
‑‑src=LOCATION

コピーするデータのロケーション。これは、 HDFSまたは Amazon S3 の場所のいずれかです。

例: ‑‑src=s3://amzn-s3-demo-bucket1/logs/j-3GYXXXXXX9IOJ/node

重要

S3DistCp は、アンダースコア文字を含む Amazon S3 バケット名をサポートしていません。

あり
‑‑dest=LOCATION

データのコピー先。これは、 HDFSまたは Amazon S3 の場所のいずれかです。

例: ‑‑dest=hdfs:///output

重要

S3DistCp は、アンダースコア文字を含む Amazon S3 バケット名をサポートしていません。

あり
‑‑srcPattern=PATTERN

‑‑src でのデータのサブセットへのコピー操作をフィルタリングする正規表現‑‑srcPattern‑‑groupBy がどちらも指定されていない場合は、‑‑src のすべてのデータが ‑‑dest にコピーされます。

正規表現の引数にアスタリスク(*)などの特殊文字が含まれる場合は、正規表現または ‑‑args 文字列全体のいずれかを引用符(')で囲む必要があります。

例: ‑‑srcPattern=.*daemons.*-hadoop-.*

なし
‑‑groupBy=PATTERN

S3DistCp がに一致するファイルを連結する正規表現。たとえば、このオプションを使用すると、1 時間で書き込まれたすべてのログファイルを 1 つのファイルに統合できます。統合されたファイル名は、グループ化のためのこの正規表現と一致する値になります。

括弧は、ファイルをグループ化する方法を示しています。括弧で囲まれたステートメントと一致するすべての項目が 1 つの出力ファイルに統合されます。正規表現に括弧ステートメントが含まれていない場合、クラスターは S3DistCp ステップで失敗し、エラーを返します。

正規表現の引数にアスタリスク(*)などの特殊文字が含まれる場合は、正規表現または ‑‑args 文字列全体のいずれかを引用符(')で囲む必要があります。

‑‑groupBy が指定されている場合は、指定されたパターンと一致するファイルのみがコピーされます。‑‑groupBy‑‑srcPattern は同時に指定する必要はありません。

例: ‑‑groupBy=.*subnetid.*([0-9]+-[0-9]+-[0-9]+-[0-9]+).*

なし
‑‑targetSize=SIZE

‑‑groupBy オプションに基づいて作成するファイルのサイズ(メビバイト(Mib)単位)。整数の値である必要があります。‑‑targetSize が設定されている場合、S3DistCp はこのサイズと一致するように試みます。コピーされたファイルの実際のサイズは、この値よりも大きくなるか小さくなる可能性があります。ジョブはデータファイルのサイズに基づいて集計されるため、ターゲットファイルサイズがソースデータファイルのサイズに一致する場合があります。

‑‑groupBy によって統合されたファイルが ‑‑targetSize の値よりも大きい場合、そのファイルはパートファイルに分割され、それぞれのファイル名の末尾に数値が順番に付けられます。たとえば、myfile.gz に統合されたファイルは、myfile0.gzmyfile1.gz などにパートに分割されます。

例: ‑‑targetSize=2

なし
‑‑appendToLastFile

がHDFS既に存在する Amazon S3DistCp からファイルにコピーする際の S3 の動作を指定します。 Amazon S3 既存のファイルに新しいファイルのデータが追加されます。‑‑appendToLastFile を指定して ‑‑groupBy を使用すると、新しいデータは同じグループのファイルに追加されます。このオプションは、‑‑targetSize‑‑groupBy. を指定して使用した動作にも順守しています。

なし
‑‑outputCodec=CODEC

コピーされたファイルで使用する圧縮コーデックを指定します。値としては gzipgzlzosnappy、または none をとることができます。このオプションを使用すると、Gzip で圧縮された入力ファイルをLZO圧縮された出力ファイルに変換したり、コピー操作の一部としてファイルを解凍したりできます。出力コーデックを選択した場合、ファイル名には適切な拡張子(gzgzip など。拡張子は .gz)が付加されます。‑‑outputCodec の値を指定しない場合、圧縮に変更が加えられずにファイルがコピーされます。

例: ‑‑outputCodec=lzo

なし
‑‑s3ServerSideEncryption

ターゲットデータが を使用して転送SSLされ、 AWS サービス側のキーを使用して Amazon S3 で自動的に暗号化されるようにします。S3DistCp を使用してデータを取得すると、オブジェクトは自動的に暗号化されません。暗号化されていないオブジェクトを、暗号化が必要な Amazon S3 バケットにコピーしようとすると、操作は失敗します。詳細については、「データ暗号化の使用」を参照してください。

例: ‑‑s3ServerSideEncryption

なし
‑‑deleteOnSuccess

コピーオペレーションが成功すると、このオプションにより、S3DistCp はコピー元の場所からコピーされたファイルを削除します。このオプションは、スケジュールされたタスクとして、ログファイルなどの出力ファイルを、あるロケーションから他のロケーションにコピーするときに役立ちます。これにより、同じファイルを 2 回コピーせずに済むようになります。

例: ‑‑deleteOnSuccess

なし
‑‑disableMultipartUpload

マルチパートアップロードの使用を無効にします。

例: ‑‑disableMultipartUpload

なし
‑‑multipartUploadChunkSize=SIZE

Amazon S3 マルチパートアップロードでの各パートサイズ (MiB 単位)。S3DistCp は、 より大きいデータをコピーするときにマルチパートアップロードを使用しますmultipartUploadChunkSize。ジョブのパフォーマンスを向上させるには、各パートサイズを大きく設定します。デフォルトのサイズは 128 MiB です。

例: ‑‑multipartUploadChunkSize=1000

なし
‑‑numberFiles

出力ファイル名の先頭に通し番号を付けます。‑‑startingIndex で別の値を指定しない限り、番号は 0 で開始されます。

例: ‑‑numberFiles

なし
‑‑startingIndex=INDEX

‑‑numberFiles とともに使用され、通し番号の開始値を指定します。

例: ‑‑startingIndex=1

なし
‑‑outputManifest=FILENAME

S3DistCp によってコピーされたすべてのファイルのリストを含む、Gzip で圧縮されたテキストファイルを作成します。

例: ‑‑outputManifest=manifest-1.gz

なし
‑‑previousManifest=PATH

‑‑outputManifest フラグを使用して S3DistCp への前回の呼び出し中に作成されたマニフェストファイルを読み取ります。‑‑previousManifest フラグが設定されると、S3DistCp はマニフェストにリストされているファイルをコピーオペレーションから除外します。‑‑outputManifest と共に ‑‑previousManifest が指定されている場合、新しいマニフェストファイルには、以前のマニフェストにリストされているファイルも表示されます。ただし、そのファイルはコピーされません。

例: ‑‑previousManifest=/usr/bin/manifest-1.gz

なし
‑‑requirePreviousManifest

S3DistCp への前回の呼び出し中に作成された以前のマニフェストが必要です。これが false に設定されている場合、以前のマニフェストが指定されていないときにエラーが生成されません。デフォルトは true です。

なし
‑‑copyFromManifest

の動作を逆にして‑‑previousManifest、S3DistCp がコピーから除外するファイルのリストではなく、指定されたマニフェストファイルをコピーするファイルのリストとして使用します。

例: ‑‑copyFromManifest ‑‑previousManifest=/usr/bin/manifest-1.gz

なし
‑‑s3Endpoint=ENDPOINT

ファイルをアップロードするときに使用する Amazon S3 エンドポイントを指定します。このオプションは、アップロード元とアップロード先の両方のエンドポイントを設定します。設定しない場合は、デフォルトのエンドポイント s3.amazonaws.com が使用されます。Amazon S3 エンドポイントの一覧は、「リージョンとエンドポイント」を参照してください。

例: ‑‑s3Endpoint=s3.eu-west-1.amazonaws.com

なし
‑‑storageClass=CLASS

送信先が Amazon S3 のときに使用するストレージクラス。有効な値は STANDARDおよび REDUCED_ ですREDUNDANCY。このオプションを指定しない場合、S3DistCp はストレージクラスを保持しようとします。

例: ‑‑storageClass=STANDARD

なし
‑‑srcPrefixesFile=PATH

Amazon S3 (s3://)、 HDFS (hdfs:///)、またはローカルファイルシステム (file:/) のテキストファイル。1 行に 1 つのプレフィックスのsrcプレフィックスのリストが含まれます。

が指定されている場合、S3DistCp srcPrefixesFileは src パスを一覧表示しません。代わりに、このファイルで指定されたすべてのプレフィックスをリストした結果を組み合わせたソースリストを生成します。これらのプレフィックスの代わりに、src パスに対する相対パスを使用して宛先パスが生成されます。srcPattern も指定された場合、入力をさらにフィルタリングするため、ソースプレフィックスを組み合わせたリスト結果に適用されます。copyFromManifest が使用された場合、マニフェストのオブジェクトがコピーされ、srcPrefixesFile が無視されます。

例: ‑‑srcPrefixesFile=PATH

なし

上記のオプションに加えて、S3DistCp はツールインターフェイスを実装します。これは、汎用オプションをサポートすることを意味します。

S3DistCp をクラスター内のステップとして追加する

S3DistCp を呼び出すには、クラスターのステップとして追加します。ステップは、起動時にクラスターに追加するか、コンソール、、CLIまたは を使用して実行中のクラスターに追加できますAPI。次の例は、実行中のクラスターに S3DistCp ステップを追加する方法を示しています。クラスターにステップを追加する方法の詳細については、「Amazon EMR 管理ガイド」の「クラスターに作業を送信する」を参照してください。

を使用して実行中のクラスターに S3DistCp step を追加するには AWS CLI

での Amazon EMR コマンドの使用の詳細については AWS CLI、AWS CLI 「 コマンドリファレンス」を参照してください。

  • S3DistCp を呼び出すクラスターにステップを追加するには、S3DistCp がコピーオペレーションを引数として実行する方法を指定するパラメータを渡します。

    次の例では、デーモンログを Amazon S3 から hdfs:///output にコピーします。次のコマンドについて説明します。

    実行中のクラスターに S3DistCp copy ステップを追加するには、myStep.jsonこの例のように、Amazon S3 またはローカルJSONファイルシステムに保存されたファイルに以下を入力します。置換 j-3GYXXXXXX9IOK をクラスター ID に置き換えます。mybucket Amazon S3 バケット名を入力します。

    [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/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-id j-3GYXXXXXX9IOK ‑‑steps file://./myStep.json
例 Amazon S3 から にログファイルをコピーする HDFS

この例では、実行中のクラスターにステップHDFSを追加して、Amazon S3 バケットに保存されているログファイルを にコピーする方法も示します。この例では、‑‑srcPattern オプションを使用して、デーモンログにコピーされたデータを制限しています。

‑‑srcPattern オプションHDFSを使用してログファイルを Amazon S3 から にコピーするには、myStep.jsonこの例のようにAmazon S3 またはローカルJSONファイルシステムに保存されたファイルに以下を入力します。置換 j-3GYXXXXXX9IOK をクラスター ID に置き換えます。mybucket Amazon S3 バケット名を入力します。

[ { "Name":"S3DistCp step", "Args":["s3-dist-cp","‑‑s3Endpoint=s3.amazonaws.com","‑‑src=s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","‑‑dest=hdfs:///output","‑‑srcPattern=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]