S3DistCp (s3-dist-cp) - Amazon EMR

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

S3DistCp (s3-dist-cp)

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

実際のシナリオでの S3DistCp の柔軟性を示す特定のコマンドについては、S3DistCp を使用するための 7 つのヒントAWS Big Data Blog の「」を参照してください。

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

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

重要

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

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

DistCp のオプション

S3DistCp を呼び出すときに、S3DistCp によるデータのコピーおよび圧縮方法の変更オプションを指定できます。次の表にこれらのオプションの説明を示します。オプションは、引数リストを使用してステップに追加されます。S3DistCp の引数の例を次の表に示します。

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

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

例:--src=s3://DOC-EXAMPLE-BUCKET1/logs/j-3GYXXXXXX9IOJ/node

重要

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

はい
--dest=LOCATION

データのコピー先。HDFS または Amazon S3 の場所のいずれかを指定できます。

例:--dest=hdfs:///output

重要

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

はい
--srcPattern=PATTERN

A正規表現でデータのサブセットにコピー操作をフィルタリングします。--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

Amazon S3 から HDFS へ既存するファイルをコピーする際の S3DistCp の動作を指定します。既存のファイルに新しいファイルのデータが追加されます。--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

マルチパートアップロードのパートのサイズ(Mib 単位)。デフォルトでは、Amazon S3 に書き込むときにマルチパートアップロードを使用します。デフォルトのチャンクサイズは 16 Mib です。

例:--multipartUploadChunkSize=32

いいえ
--numberFiles

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

例:--numberFiles

いいえ
--startingIndex=INDEX

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

例:--startingIndex=1

いいえ
--outputManifest=FILENAME

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

例:--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:/) 内のテキストファイル。srcプレフィクス、1 行につき 1 つのプレフィクス。

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

例:--srcPrefixesFile=PATH

いいえ

上記のオプション以外にも、S3DistCp はツールインターフェイスを実装しているので、一般的なオプションもサポートしています。

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

S3DistCp を呼び出すには、これをステップとしてクラスターに追加します。ステップは、起動時にクラスターに追加することも、コンソール、CLI、または API を使用して実行中のクラスターに追加することもできます。以下の例では、実行中のクラスターへの S3DistCp ステップの追加を示します。クラスターへのステップの追加の詳細については、「」を参照してください。クラスターへの作業の送信()Amazon EMR マネジメントガイド

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

AWS CLI での Amazon EMR コマンドの使用の詳細については、「」を参照してください。https://docs.aws.amazon.com/cli/latest/reference/emr

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

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

    • --cluster-id でクラスターを指定します。

    • Jar は、S3DistCp JAR ファイルのロケーションです。

    • Args は、S3DistCp に渡すオプション名/値ペアのカンマ区切りのリストです。使用可能なオプションの完全なリストについては、「DistCp のオプション」を参照してください。

    実行中のクラスターに S3DistCp コピーステップを追加するには、Amazon S3 に保存された JSON ファイルまたはローカルファイルシステムのファイル (myStep.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 にログファイルをコピーする

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

Amazon S3 から HDFS にログファイルをコピーするには、--srcPatternオプションの JSON ファイルまたはローカルファイルシステムのファイル (myStep.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" } ]