S3DistCp (s3-dist-cp) - Amazon EMR

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

S3DistCp (s3-dist-cp)

アパッチ DistCp は大量のデータをコピーするときに使用できるオープンソースツールです。S3DistCpと同様です DistCp、ただし動作するように最適化されているAWS、特に Amazon S3 のです。S3 のコマンドDistCp Amazon EMR バージョン 4.0 以降では、s3-dist-cpなどの他の圧縮アルゴリズムを使用したり、これをクラスターのステップまたはコマンドラインに追加します。S3 の使用DistCpを使用すると、Amazon S3 の大量のデータを HDFS に効率的にコピーできます。ここにコピーされたデータは、Amazon EMR クラスターの以降のステップで処理できます。また、S3 を使用することもできますDistCp を使用して、Amazon S3 バケット間で、または HDFS から Amazon S3 にデータをコピーします。S3DistCp は、複数のバケットおよび複数のオブジェクトをparallel コピーすると、よりスケーラブルで効率的ですAWS口座。

実際のシナリオで S3DistCp の柔軟性を示す特定のコマンドについては、S3 を使うための 7 つのヒントDistCpにAWSビッグデータのブログ。

Like DistCp、DistCp 使用する MapReduce 分散された方法でコピーします。複数のサーバー全体でのコピー、エラー処理、復旧、および報告のタスクが共有されます。Apache の詳細 DistCp オープンソースプロジェクト、DistCp ガイドApache Hadoop のドキュメントに記載されています。

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

重要

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

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

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

S3DistCp オプション

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

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

オプション 説明 必須
--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

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

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

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

いいえ
--groupBy=PATTERN

ある正規表現それが原因でS3DistCp などの他の圧縮アルゴリズムを使用したり、式に一致するファイルを統合します。たとえば、このオプションを使用すると、1 時間で書き込まれたすべてのログファイルを 1 つのファイルに統合できます。統合されたファイル名は、グループ化のためのこの正規表現と一致する値になります。

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

正規表現の引数にアスタリスク(*)などの特殊文字が含まれる場合は、正規表現または --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

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

いいえ
--outputCodec=CODEC

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

例: --outputCodec=lzo

いいえ
--s3ServerSideEncryption

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

例: --s3ServerSideEncryption

いいえ
--deleteOnSuccess

コピーオペレーションが成功すると、このオプションにより、このオプションにより、S3 が発生しますDistCp をクリックして、コピーされたファイルをコピー元の場所を削除します。このオプションは、スケジュールされたタスクとして、ログファイルなどの出力ファイルを、あるロケーションから他のロケーションにコピーするときに役立ちます。これにより、同じファイルを 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 で圧縮されたテキストファイルを作成します。このテキストファイルには、S3 によってコピーされたすべてのファイルのリストが含まれますDistCp。

例: --outputManifest=manifest-1.gz

いいえ
--previousManifest=PATH

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

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

いいえ
--requirePreviousManifest

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

いいえ
--copyFromManifest

の動作を反転します--previousManifestS3を引き起こすDistCp 指定したマニフェストファイルを、コピーから除外するファイルのリストではなく、コピーするファイルのリストとして使用します。

例: --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

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

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

例: --srcPrefixesFile=PATH

いいえ

上記のオプションに加えて、S3DistCp を実装しますツールインターフェースつまり、ジェネリックオプションをサポートしているということです。

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

S3に電話できますDistCp これをステップとしてクラスターに追加します。ステップは、起動時にクラスターに追加することも、コンソール、CLI、または API を使用して実行中のクラスターに追加することもできます。以下に、S3 を追加する例を示します。DistCp 実行中のクラスターにステップします。クラスターへのステップの追加の詳細については、「Amazon EMR 管理ガイド」の「クラスターへの作業の送信」を参照してください。

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

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

  • クラスターに S3 を呼び出すステップを追加するにはDistCp、S3 の方法を指定するパラメータを渡しますDistCp コピー操作を引数として実行する必要があります。

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

    S3 を追加するにはDistCp 実行中のクラスターにステップをコピーし、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 オプションを使用して、デーモンログにコピーされたデータを制限しています。

--srcPattern オプションを使用してログファイルを Amazon S3 から HDFS にコピーするには、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=.*daemons.*-hadoop-.*"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } ]