

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

# AWS での入力ファイルサイズの ETL 取り込みを最適化する
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws"></a>

*Amazon Web Services、Apoorva Patrikar*

## 概要
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-summary"></a>

このパターンは、データを処理する前にファイルサイズを最適化することで、AWS Glue 上のビッグデータと Apache Spark ワークロードの抽出、変換、ロード (ETL) プロセスの取り込みステップを最適化する方法を示しています。このパターンを使用して、*小さなファイル*の問題を防止または解決してください。つまり、サイズの小さいファイルが多数あると、ファイルの合計サイズが原因でデータ処理が遅くなる場合です。たとえば、それぞれがわずか数百キロバイトのファイルが数百個あると、AWS Glue ジョブのデータ処理速度が大幅に低下する可能性があります。これは、AWS Glue が Amazon Simple Storage Service (Amazon S3) で内部リスト機能を実行する必要があり、YARN (さらに別のリソースネゴシエーター) は大量のメタデータを保存する必要があるためです。データ処理速度を向上させるには、グループ化を使用すると、ETL タスクでは入力ファイルのグループを単一のインメモリパーティションに読み取ることができます。このパーティションは、小さいファイルを自動的にグループ化します。または、カスタムコードを使用して既存のファイルにバッチロジックを追加することもできます。

## 前提条件と制限
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ 1 つ以上の AWS Glue [ジョブ](https://docs.aws.amazon.com/glue/latest/dg/author-job.html)
+ 1 つ以上のビッグデータまたは [Apache Spark](https://spark.apache.org/) ワークロード
+ [S3 バケット](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingBucket.html)

## アーキテクチャ
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-architecture"></a>

次のパターンは、さまざまな形式のデータを AWS Glue ジョブで処理し、S3 バケットに保存してパフォーマンスを可視化する方法を示しています。

![\[さまざまな形式のデータが AWS Glue ジョブによって処理され、S3 バケットに保存されます。\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/88ee332f-2f12-4d88-b491-e78bbb173850/images/9a97b54a-3f67-4a48-94d2-5807373ace25.png)


この図表は、次のワークフローを示しています:

1. 
**注記**  
AWS Glue ジョブは、CSV、JSON、Parquet 形式の小さなファイルを動的フレームに変換します。: 入力ファイルのサイズは、AWS Glue ジョブのパフォーマンスに最も大きな影響を与えます。

1. AWS Glue ジョブは S3 バケットの内部リスト機能を実行します。

## ツール
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-tools"></a>
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) はフルマネージド型の ETL サービスです。これにより、データストアとデータストリーム間でのデータの分類、整理、強化、移動を確実に行うことができます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

## エピック
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-epics"></a>

### グルーピングを使用して読み取り中の ETL 取り込みを最適化する
<a name="use-grouping-to-optimize-etl-ingestion-during-reading"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| グループサイズを指定します。 | 50,000 個を超えるファイルがある場合、デフォルトでグループ化されます。ただし、`connectionOptions` パラメーターでグループサイズを指定することで、50,000 ファイル未満のファイルでもグループ化できます。`connectionOptions` パラメーターは `create_dynamic_frame.from_options` メソッド内にあります。 | データエンジニア | 
| グループ化コードを記述します。 | `create_dynamic_frame` メソッドを使用して動的フレームを作成します。例えば、次のようになります。<pre>S3bucket_node1 = glueContext.create_dynamic_frame.from_options(<br />    format_options={"multiline": False},<br />    connection_type="s3",<br />    format="json",<br />    connection_options={<br />        "paths": ["s3://bucket/prefix/file.json"],<br />        "recurse": True,<br />        "groupFiles": 'inPartition', <br />        "groupSize": 1048576<br />    },<br />    transformation_ctx="S3bucket_node1",<br />)</pre>`groupFiles` を使用して Amazon S3 パーティショングループ内のファイルをグループ化します。`groupSize` を使用して、メモリに読み込まれるグループのターゲットサイズを設定します。`groupSize` バイト単位で指定します (1048576 = 1 MB)。 | データエンジニア | 
| コードをワークフローに追加します。 | AWS Glue のジョブ[ワークフロー](https://docs.aws.amazon.com/glue/latest/dg/workflows_overview.html) にグループコードを追加します。 | データエンジニア | 

### カスタムロジックを使用して ETL の取り込みを最適化します。
<a name="use-custom-logic-to-optimize-etl-ingestion"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 言語と処理プラットフォームを選択してください。 | ユースケースに合わせたスクリプト言語と処理プラットフォームを選択してください。 | クラウドアーキテクト | 
| コードを書き込む | ファイルをまとめてバッチ処理するカスタムロジックを記述します。 | クラウドアーキテクト | 
| コードをワークフローに追加します。 | AWS Glue のジョブ [ワークフロー](https://docs.aws.amazon.com/glue/latest/dg/workflows_overview.html) にコードを追加します。これにより、ジョブを実行するたびにカスタムロジックを適用できます。 | データエンジニア | 

### 変換後にデータを書き込む際の再パーティション
<a name="repartition-when-writing-data-after-transformation"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 消費パターンを分析します。 | ダウンストリームアプリケーションが書き込みデータをどのように使用するのかを調べます。例えば、ダウンストリームでは毎日データをクエリするが、処理側ではリージョンごとにしかデータをパーティション分割していない場合、あるいは出力ファイルがファイルあたり 2.5 KB など非常に小さい場合、これは消費に最適ではありません。 | DBA | 
| 書き込み前にデータを再パーティショニングします。 | 処理中 (処理ロジックに基づく) および処理後 (消費に基づく) の結合またはクエリに基づいて再パーティショニングします。例えば、`.repartition(100000)` などのバイトサイズに基づいて再パーティショニングをしたり、`.repartition("column_name")` などの列に基づいて再パーティショニングをしたりします。 | データエンジニア | 

## 関連リソース
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-resources"></a>
+ [大きなグループの入力ファイルの読み取り](https://docs.aws.amazon.com/glue/latest/dg/grouping-input-files.html)
+ [AWS Glue のモニタリング](https://docs.aws.amazon.com/glue/latest/dg/monitor-glue.html)
+ [Amazon CloudWatch メトリクスを使用した AWS Glue のモニタリング](https://docs.aws.amazon.com/glue/latest/dg/monitoring-awsglue-with-cloudwatch-metrics.html)
+ [ジョブのモニタリングとデバッグ](https://docs.aws.amazon.com/glue/latest/dg/monitor-profile-glue-job-cloudwatch-metrics.html)
+ [AWS Glue でのサーバーレス ETL の使用を開始する](https://docs.aws.amazon.com/prescriptive-guidance/latest/serverless-etl-aws-glue/welcome.html)

## 追加情報
<a name="optimize-the-etl-ingestion-of-input-file-size-on-aws-additional"></a>

**ファイルサイズの決定**

ファイルサイズが大きすぎるか小さすぎるかを判断する簡単な方法はありません。ファイルサイズが処理パフォーマンスに与える影響は、クラスターの構成によって異なります。コア Hadoop では、ブロックサイズを最大限に活用するために 128 MB または 256 MB のファイルを使用することをお勧めします。

AWS Glue のほとんどのテキストファイルワークロードでは、5 ～ 10 DPU クラスターのファイルサイズを 100 MB から 1 GB の範囲にすることを推奨しています。入力ファイルの最適なサイズを判断するには、AWS Glue ジョブの前処理セクションを監視し、ジョブの CPU 使用率とメモリ使用率を確認します。

**追加の考慮事項**

ETL の初期段階でのパフォーマンスがボトルネックである場合は、処理前にデータファイルをグループ化またはマージすることを検討してください。ファイル生成プロセスを完全に制御できれば、未加工データを AWS に送信する前に、ソースシステム自体にデータポイントを集約する方がさらに効率的です。