

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

# S3DistCp (s3-dist-cp)
<a name="UsingEMR_s3distcp"></a>

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 の柔軟性を示す特定のコマンドについては、 AWS ビッグデータブログの[S3DistCp を使用するための 7 つのヒント](https://aws.amazon.com/blogs/big-data/seven-tips-for-using-s3distcp-on-amazon-emr-to-move-data-efficiently-between-hdfs-and-amazon-s3/)」を参照してください。

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

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

**重要**  
S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。  
S3DistCp は、Parquet 形式ファイルの連結をサポートしていません。代わりに PySpark を使用します。詳細については、「[Amazon EMR での Parquet ファイルの連結](https://aws.amazon.com/premiumsupport/knowledge-center/emr-concatenate-parquet-files/)」を参照してください。  
S3DistCP を使用して (ディレクトリではなく) 1 つのファイルを S3 から HDFS にコピーするときにコピーエラーを回避するには、Amazon EMR バージョン 5.33.0 以降、または Amazon EMR 6.3.0 以降を使用してください。

## S3DistCp のオプション
<a name="UsingEMR_s3distcp.options"></a>

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

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


| オプション  | 説明  | 必須  | 
| --- | --- | --- | 
| ‑‑src=LOCATION  |  コピーするデータのロケーション。HDFS または Amazon S3 ロケーションのいずれかを指定できます。 例: `‑‑src=s3://amzn-s3-demo-bucket/logs/j-3GYXXXXXX9IOJ/node`   S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。   | はい  | 
| ‑‑dest=LOCATION  |  データのコピー先。HDFS または Amazon S3 ロケーションのいずれかを指定できます。 例: `‑‑dest=hdfs:///output`   S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。   | はい  | 
| ‑‑srcPattern=PATTERN  |  `‑‑src` でのデータのサブセットへのコピー操作をフィルタリングする[正規表現](http://en.wikipedia.org/wiki/Regular_expression)。`‑‑srcPattern` と `‑‑groupBy` がどちらも指定されていない場合は、`‑‑src` のすべてのデータが `‑‑dest` にコピーされます。 正規表現の引数にアスタリスク（\$1）などの特殊文字が含まれる場合は、正規表現または `‑‑args` 文字列全体のいずれかを引用符（'）で囲む必要があります。 例: `‑‑srcPattern=.*daemons.*-hadoop-.*`   | いいえ  | 
| ‑‑groupBy=PATTERN  |  複数のファイルを統合する[正規表現](http://en.wikipedia.org/wiki/Regular_expression)。この表現に一致するファイルが S3DistCp によって統合されます。たとえば、このオプションを使用すると、1 時間で書き込まれたすべてのログファイルを 1 つのファイルに統合できます。統合されたファイル名は、グループ化のためのこの正規表現と一致する値になります。 括弧は、ファイルをグループ化する方法を示しています。括弧で囲まれたステートメントと一致するすべての項目が 1 つの出力ファイルに統合されます。正規表現に括弧で囲まれたステートメントが含まれない場合、クラスターは S3DistCp ステップで失敗し、エラーを返します。 正規表現の引数にアスタリスク（\$1）などの特殊文字が含まれる場合は、正規表現または `‑‑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.gz`、`myfile1.gz` などにパートに分割されます。 例: `‑‑targetSize=2`   | いいえ  | 
| ‑‑appendToLastFile |  Amazon S3 から HDFS へ既存するファイルをコピーする際の S3DistCp の動作を指定します。既存のファイルに新しいファイルのデータが追加されます。`‑‑appendToLastFile` を指定して `‑‑groupBy` を使用すると、新しいデータは同じグループのファイルに追加されます。このオプションは、`‑‑targetSize` を `‑‑groupBy.` を指定して使用した動作にも順守しています。  | いいえ  | 
| ‑‑outputCodec=CODEC  |  コピーされたファイルで使用する圧縮コーデックを指定します。値としては `gzip`、`gz`、`lzo`、`snappy`、または `none` をとることができます。このオプションを使用すると、たとえば、Gzip で圧縮された入力ファイルを LZO 圧縮の出力ファイルに変換したり、コピーオペレーションの一環としてファイルを解凍したりできます。出力コーデックを選択した場合、ファイル名には適切な拡張子（`gz` や `gzip` など。拡張子は `.gz`）が付加されます。`‑‑outputCodec` の値を指定しない場合、圧縮に変更が加えられずにファイルがコピーされます。 例: `‑‑outputCodec=lzo`   | いいえ  | 
| ‑‑s3ServerSideEncryption  |  ターゲットデータが SSL を使用して転送され、 AWS サービス側のキーを使用して Amazon S3 で自動的に暗号化されるようにします。S3DistCp を使用してデータを取得するとき、オブジェクトは自動的に暗号化解除されます。暗号化されていないオブジェクトを、暗号化が必要な Amazon S3 バケットにコピーしようとすると、操作は失敗します。詳細については、「[データ暗号化の使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingEncryption.html)」を参照してください。 例: `‑‑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  |  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 エンドポイントの一覧は、「[リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)」を参照してください。 例: `‑‑s3Endpoint=s3.eu-west-1.amazonaws.com`   | いいえ  | 
| ‑‑storageClass=CLASS |  送信先が Amazon S3 のときに使用するストレージクラス。有効な値は、STANDARD と REDUCED\$1REDUNDANCY です。このオプションを指定しない場合、S3DistCp はストレージクラスを維持しようとします。 例: `‑‑storageClass=STANDARD`  | いいえ  | 
| ‑‑srcPrefixesFile=PATH |  `src` プレフィックスのリスト (1 行ごとにプレフィックスが 1 つずつ) を含む Amazon S3 (s3://)、HDFS (hdfs:///)、またはローカルファイルシステム (file:/) 内のテキストファイル。 `srcPrefixesFile` が提供されている場合、S3DistCp は src パスをリストしません。代わりに、このファイルで指定されたすべてのプレフィックスをリストした結果を組み合わせたソースリストを生成します。これらのプレフィックスの代わりに、src パスに対する相対パスを使用して宛先パスが生成されます。`srcPattern` も指定された場合、入力をさらにフィルタリングするため、ソースプレフィックスを組み合わせたリスト結果に適用されます。`copyFromManifest` が使用された場合、マニフェストのオブジェクトがコピーされ、`srcPrefixesFile` が無視されます。 例: `‑‑srcPrefixesFile=PATH`  | いいえ  | 

上記のオプション以外にも、S3DistCp は[ツールインターフェイス](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/util/Tool.html)を実装しているので、一般的なオプションもサポートしています。

## クラスターに S3DistCp をステップとして追加する
<a name="UsingEMR_s3distcp.step"></a>

S3DistCp を呼び出すには、これをステップとしてクラスターに追加します。ステップは、起動時にクラスターに追加することも、コンソール、CLI、または API を使用して実行中のクラスターに追加することもできます。以下の例では、実行中のクラスターへの S3DistCp ステップの追加を示します。クラスターへのステップの追加の詳細については、「*Amazon EMR 管理ガイド*」の「[クラスターへの作業の送信](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-work-with-steps.html)」を参照してください。

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

での Amazon EMR コマンドの使用の詳細については AWS CLI、[AWS CLI 「 コマンドリファレンス](https://docs.aws.amazon.com/cli/latest/reference/emr)」を参照してください。
+ S3DistCp を呼び出すステップをクラスターに追加するには、S3DistCp によるコピーオペレーションの実行方法を指定するパラメータを引数として渡します。

  次の例では、デーモンログを Amazon S3 から `hdfs:///output` にコピーします。次のコマンドについて説明します。
  + `‑‑cluster-id` でクラスターを指定します。
  + `Jar` は、S3DistCp JAR ファイルのロケーションです。command-runner.jar を使用してクラスターでコマンドを実行する方法の例については、「[カスタム JAR ステップを送信してスクリプトまたはコマンドを実行する](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-commandrunner.html#emr-commandrunner-examples)」を参照してください。
  + `Args` は、S3DistCp に渡すオプション名/値ペアのカンマ区切りのリストです。使用可能なオプションの完全なリストについては、「[S3DistCp のオプション](#UsingEMR_s3distcp.options)」を参照してください。

  実行中のクラスターに S3DistCp コピーステップを追加するには、Amazon S3 に保存された JSON ファイルまたはローカルファイルシステムのファイル (この例では `myStep.json`) に次の内容を配置します。*j-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-id j-3GYXXXXXX9IOK ‑‑steps file://./myStep.json
  ```

**Example Amazon S3 からのログファイルを HDFS へコピーする**  
この例では、実行中のクラスターにステップを追加して、Amazon S3 バケットに格納されたログファイルを HDFS にコピーする方法も示します。この例では、`‑‑srcPattern` オプションを使用して、デーモンログにコピーされたデータを制限しています。  
`‑‑srcPattern` オプションを使用してログファイルを Amazon S3 から HDFS にコピーするには、Amazon S3 に保存された JSON ファイルまたはローカルファイルシステムのファイル (この例では `myStep.json`) に次の内容を配置します。*j-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"        
    }
]
```