

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

# アーキテクチャ
<a name="architecture"></a>

次の図は、このガイドで説明されているソリューションのアーキテクチャを示しています。 AWS Glue ジョブは、[データの保存、保護、取得に役立つクラウドベースのオブジェクトストレージサービスである Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) バケットからデータを読み取ります。ジョブは AWS Glue Spark SQL AWS マネジメントコンソール、、 [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)、または AWS Glue API を使用して開始できます。ジョブは、Amazon AWS Glue Spark SQLS3 バケット内の raw データを処理し、処理されたデータを別のバケットに保存します。 Amazon S3 



![AWS Glue Amazon S3 バケットで raw データをSpark SQL処理](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/spark-tuning-glue-emr/images/aws-glue-processing-S3-data.png)


例として、このガイドでは、 Pythonと Spark SQL () で記述された基本的な[AWS GlueSpark SQLジョブ](https://docs.aws.amazon.com/glue/latest/dg/etl-jobs-section.html)について説明しますPySpark。この AWS Glue ジョブは、Spark SQLチューニングのベストプラクティスを示すために使用されます。このガイドでは に焦点を当てていますが AWS Glue、このガイドのベストプラクティスは [Amazon EMR Spark SQLジョブ](https://docs.aws.amazon.com/emr/latest/EMR-Serverless-UserGuide/jobs-spark.html)にも適用されます。

次の図は、Spark SQLクエリのライフサイクルを示しています。Spark SQL Catalyst Optimizer はクエリプランを生成します。*クエリプラン*は、SQL リレーショナルデータベースシステムのデータにアクセスするために使用される手順などの一連のステップです。パフォーマンス最適化Spark SQLクエリプランを開発する最初のステップは、`EXPLAIN`プランを表示し、プランを解釈してから、プランを調整することです。Spark SQL ユーザーインターフェイス (UI) またはSpark SQL履歴サーバーを使用して、プランを視覚化できます。



![回復力のある分散データセット (RDD) を作成するためのSpark SQLクエリのライフサイクル](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/spark-tuning-glue-emr/images/spark-sql-query-lifecycle.png)


Spark Catalyst Optimizer は、次のように初期クエリプランを最適化されたクエリプランに変換します。

1. **分析と宣言 APIs** – 分析フェーズが最初のステップです。SQL クエリで参照されるオブジェクトが不明であるか、入力テーブルと一致しない*未解決の論理プラン*は、バインドされていない属性とデータ型で生成されます。次に、Spark SQLCatalyst Optimizer は一連のルールを適用して論理プランを構築します。SQL パーサーは SQL Abstract Syntax Tree (AST) を生成し、これを論理プランの入力として提供できます。入力は、API を使用して構築されたデータフレームまたはデータセットオブジェクトである場合もあります。次の表は、SQL、データフレーム、またはデータセットをいつ使用すべきかを示しています。  
****    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/spark-tuning-glue-emr/architecture.html)

   入力のタイプの詳細については、以下を参照してください。
   + データセット API は型**付き**バージョンを提供します。これにより、ユーザー定義の Lambda 関数に大きく依存するため、パフォーマンスが低下します。RDD またはデータセットは静的に型付けされます。例えば、RDD を定義する場合は、スキーマ定義を明示的に指定する必要があります。
   + データフレーム API は**、型のない**リレーショナルオペレーションを提供します。データフレームは動的に入力されます。RDD と同様に、データフレームを定義すると、スキーマは同じままになります。データはまだ構造化されています。ただし、この情報は実行時にのみ使用できます。これにより、コンパイラは SQL のようなステートメントを記述し、新しい列をその場で定義できます。たとえば、オペレーションごとに新しいクラスを定義することなく、既存のデータフレームに列を追加できます。
   + Spark SQL クエリはランタイム中に構文エラーと分析エラーについて評価されるため、ランタイムが速くなります。

1. **カタログ** –** **Spark SQL を使用してApache Hive Metastore (HMS)、データベース、テーブル、列、パーティションなどの永続的なリレーショナルエンティティのメタデータを管理します。

1. **最適化** –** **オプティマイザはヒューリスティックとコストを使用してクエリプランを書き換えます。最適化された論理プランを作成するには、以下を実行します。

   1. 列のプルーニング

   1. 述語をプッシュダウンする

   1. 結合の順序を変更する

1. **物理プランとプランナー** – Spark SQL Catalyst Optimizer は論理プランを一連の物理プランに変換します。つまり、 *の内容を**変換します。*

1. **選択した物理プラン **­– Spark SQL Catalyst Optimizer は、最も費用対効果の高い物理プランを選択します。

1. **最適化クエリプラン** – パフォーマンス最適化およびコスト最適化クエリプランSpark SQLを実行します。 Spark SQLMemory Management は、メモリ使用量を追跡し、タスクとオペレータ間でメモリを分散します。Spark SQL Tungsten エンジンは、Spark SQLアプリケーションのメモリと CPU 効率を大幅に向上させることができます。また、バイナリデータモデル処理を実装し、バイナリデータに対して直接動作します。これにより、逆シリアル化の必要性が回避され、データ変換と逆シリアル化に関連するオーバーヘッドが大幅に削減されます。