Amazon Redshift と Apache Spark の統合により、Amazon Redshift データ上の Apache Spark アプリケーションを簡素化および高速化

Amazon Redshift と Apache Spark の統合により、Amazon Redshift データ上の Apache Spark アプリケーションを簡素化および高速化

ソースノード: 2597866

顧客が使う Amazonレッドシフト ペタバイト規模の構造化データと半構造化データでビジネスに不可欠な分析を実行するために。 Apache Spark は、ETL (抽出、変換、読み込み)、インタラクティブ分析、機械学習 (ML) などのユース ケースのアプリケーションを構築するために使用できる人気のあるフレームワークです。 Apache Spark を使用すると、Amazon Redshift データ ウェアハウスのデータにアクセスすることで、Java、Scala、Python などのさまざまな言語でアプリケーションを構築できます。

Apache Spark の Amazon Redshift 統合により、開発者は Amazon Redshift データで Apache Spark アプリケーションをシームレスに構築および実行できます。 開発者は、次のような AWS 分析および ML サービスを使用できます。 アマゾンEMR, AWSグルー, アマゾンセージメーカー Amazon Redshift データ ウェアハウスから読み書きする Apache Spark アプリケーションを簡単に構築できます。 アプリケーションのパフォーマンスやデータのトランザクションの一貫性を損なうことなく、これを行うことができます。

この投稿では、Amazon Redshift と Apache Spark の統合が分析と ML にとって重要かつ効率的である理由について説明します。 さらに、Amazon Redshift と Apache Spark の統合を使用してビジネスへの影響を促進するユースケースについても説明します。 最後に、この公式 AWS コネクタを Apache Spark アプリケーションで使用する方法の例を順を追って説明します。

Apache Spark の Amazon Redshift 統合

Apache Spark の Amazon Redshift 統合により、spark-redshift コネクタをセットアップする面倒で多くの場合手動のプロセスが最小限に抑えられます (コミュニティバージョン)、分析および ML タスクの準備に必要な時間を短縮します。 データ ウェアハウスへの接続を指定するだけで、数分で Apache Spark ベースのアプリケーションから Amazon Redshift データの操作を開始できます。

関連するデータのみが Amazon Redshift データ ウェアハウスから消費する Apache Spark アプリケーションに移動されるように、並べ替え、集計、制限、結合、スカラー関数などの操作にいくつかのプッシュダウン機能を使用できます。 これにより、アプリケーションのパフォーマンスを向上させることができます。 Amazon Redshift 管理者は、Spark ベースのアプリケーションから生成された SQL を簡単に識別できます。 この投稿では、Apache Spark ジョブによって生成された SQL を見つける方法を示します。

さらに、Apache Spark の Amazon Redshift 統合では、データを一時ディレクトリにステージングするときに Parquet ファイル形式を使用します。 Amazon Redshift は UNLOAD SQL ステートメントを使用して、この一時データを Amazon シンプル ストレージ サービス (アマゾン S3)。 Apache Spark アプリケーションは一時ディレクトリ (Parquet ファイル形式で保存) から結果を取得するため、パフォーマンスが向上します。

を利用することで、アプリケーションをより安全にすることもできます。 AWS IDおよびアクセス管理 (IAM) Amazon Redshift に接続するための認証情報。

Apache Spark の Amazon Redshift 統合は、spark-redshift コネクタ (コミュニティバージョン)、パフォーマンスとセキュリティを強化し、最大 10 倍高速なアプリケーション パフォーマンスを実現します。

Amazon Redshift と Apache Spark の統合のユースケース

私たちのユースケースでは、製品ベースの会社の経営陣は、複数の市場での各製品の売上を知りたいと考えています。 会社の売上は動的に変動するため、複数の市場で売上を追跡することは経営陣にとって課題となっています。 しかし、全体的な売上高は減少しており、会社の経営陣は、プロモーション キャンペーンでこれらの市場をターゲットにできるように、どの市場が成果を上げていないかを突き止めたいと考えています。

複数の市場にわたる販売の場合、注文、トランザクション、出荷データなどの製品販売データは、データ レイク内の Amazon S3 で利用できます。 データエンジニアリングチームは、Amazon EMR または AWS Glue で Apache Spark を使用して、Amazon S3 でこのデータを分析できます。

インベントリ データは Amazon Redshift で利用できます。 同様に、データエンジニアリングチームは、Amazon EMR を使用して Apache Spark でこのデータを分析するか、Apache Spark の Amazon Redshift 統合を使用して集計と変換を実行することで AWS Glue ジョブを分析できます。 集約および変換されたデータセットは、Amazon Redshift の Apache Spark 統合を使用して、Amazon Redshift に戻すことができます。

Apache Spark のような分散型フレームワークを Amazon Redshift と Apache Spark の統合で使用すると、データ レイクとデータ ウェアハウス全体の可視性が提供され、販売に関する洞察が得られます。 これらの洞察は、Amazon Redshift のビジネス関係者と基幹業務ユーザーが利用できるようにして、低収益市場セグメント向けのターゲットを絞ったプロモーションを実行するための十分な情報に基づいた決定を下すことができます。

さらに、次のユースケースで Amazon Redshift と Apache Spark の統合を使用できます。

  • Apache Spark ジョブを実行している Amazon EMR または AWS Glue のお客様は、データを変換し、ETL パイプラインの一部としてそれを Amazon Redshift に書き込もうとしています。
  • ML のお客様は、Amazon Redshift のデータにアクセスして変換するための機能エンジニアリングに SageMaker で Apache Spark を使用しています
  • Amazon EMR、AWS Glue、または SageMaker のお客様は、Apache Spark を使用して、ノートブックから Amazon Redshift のデータをインタラクティブに分析しています。

Apache Spark アプリケーションでの Apache Spark の Amazon Redshift 統合の例

この投稿では、Amazon EMR から Amazon Redshift を接続する手順を示します。 アマゾン エラスティック コンピューティング クラウド (Amazon EC2)、 Amazon EMR サーバーレス、および共通のスクリプトを使用する AWS Glue。 次のサンプル コードでは、2008 年の四半期売上高を示すレポートを生成します。これを行うには、Apache Spark DataFrame を使用して XNUMX つの Amazon Redshift テーブルを結合し、述語プッシュダウンを実行し、データを集計して並べ替え、変換されたデータを Amazon Redshift に戻します。 スクリプトは PySpark を使用します

スクリプトは Amazon Redshift の IAM ベースの認証. Amazon EMR および AWS Glue で使用される IAM ロールには、Amazon Redshift を認証するための適切なアクセス許可と、一時データ ストレージ用の S3 バケットへのアクセスが必要です。

次のポリシーの例では、IAM ロールが GetClusterCredentials 操作:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": "arn:aws:redshift:<aws_region_name>:xxxxxxxxxxxx:dbuser:*/temp_*" }
}

次のポリシーの例では、一時データ ストレージ用の S3 バケットへのアクセスを許可します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": "arn:aws:s3:::<s3_bucket_name>" } ]
}

完全なスクリプトは次のとおりです。

from pyspark.sql import SparkSession
from pyspark.sql.functions import col # Initiate Apache Spark session
spark = SparkSession .builder .appName("SparkRedshiftConnector") .enableHiveSupport() .getOrCreate() # Set connection options for Amazon Redshift
jdbc_iam_url = "jdbc:redshift:iam://redshift-spark-connector-1.xxxxxxxxxxx.<aws_region_name>.redshift.amazonaws.com:5439/sample_data_dev"
temp_dir = 's3://<s3_bucket_name>/redshift-temp-dir/'
aws_role = 'arn:aws:iam::xxxxxxxxxxxx:role/redshift-s3' # Set query group for the query. More details on Amazon Redshift WLM https://docs.aws.amazon.com/redshift/latest/dg/cm-c-executing-queries.html
queryGroup = "emr-redshift"
jdbc_iam_url_withQueryGroup = jdbc_iam_url+'?queryGroup='+queryGroup # Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url_withQueryGroup+';user='+userName # Define the Amazon Redshift context
redshiftOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Create the sales DataFrame from Amazon Redshift table using io.github.spark_redshift_community.spark.redshift class
sales_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.sales") .load()
) # Create the date Data Frame from Amazon Redshift table
date_df = ( spark.read .format("io.github.spark_redshift_community.spark.redshift") .options(**redshiftOptions) .option("dbtable", "tickit.date") .load()
) # Assign a Data Frame to the above output which will be written back to Amazon Redshift
output_df= sales_df.join(date_df, sales_df.dateid == date_df.dateid, 'inner').where( col("year") == 2008).groupBy("qtr").sum("qtysold").select( col("qtr"), col("sum(qtysold)")).sort(["qtr"], ascending=[1]).withColumnRenamed("sum(qtysold)","total_quantity_sold") # Display the output
output_df.show() ## Lets drop the queryGroup for easy validation of push down queries
# Set User name for the query
userName = 'awsuser'
jdbc_iam_url_withUserName = jdbc_iam_url+'?user='+userName # Define the Amazon Redshift context
redshiftWriteOptions = { "url": jdbc_iam_url_withUserName, "tempdir": temp_dir, "aws_iam_role" : aws_role
} # Write the Data Frame back to Amazon Redshift
output_df.write .format("io.github.spark_redshift_community.spark.redshift") .mode("overwrite") .options(**redshiftWriteOptions) .option("dbtable", "tickit.test") .save()

環境で前述のスクリプトを使用する予定がある場合は、次の変数の値を環境に適した値に置き換えてください。 jdbc_iam_url, temp_dir, aws_role.

次のセクションでは、このスクリプトを実行して、Amazon Redshift で利用できるサンプル データセットを集約する手順について説明します。

前提条件

開始する前に、次の前提条件が満たされていることを確認してください。

AWSCloudFormationを使用してリソースをデプロイする

CloudFormation スタックをデプロイするには、次の手順を実行します。

  1. にサインインする AWSマネジメントコンソール、次に CloudFormation スタックを起動します。
    BDB-2063-起動-クラウド形成-スタック

また、ワイルドカード*を使用すると、任意の文字にマッチし、XNUMXつのコマンドで複数のファイルを削除することができます。 CloudFormation テンプレートをダウンロードする コードとしてのインフラストラクチャ (IaC) を介して、この投稿で言及されているリソースを作成します。 新しい CloudFormation スタックを起動するときに、このテンプレートを使用します。

  1. ページの一番下までスクロールして選択します AWS CloudFormationがIAMリソースを作成する可能性があることを認めます機能、を選択します スタックを作成.

スタックの作成プロセスが完了するまでに 15 ~ 20 分かかります。 CloudFormation テンプレートは、次のリソースを作成します。

    • 必要なサブネット、ルート テーブル、NAT ゲートウェイを備えた Amazon VPC
    • という名前の S3 バケット redshift-spark-databucket-xxxxxxx (xxxxxxx は、バケット名を一意にするためのランダムな文字列であることに注意してください)
    • データベース内にサンプルデータがロードされた Amazon Redshift クラスター dev そしてプライマリーユーザー redshiftmasteruser. このブログ投稿の目的のために、 redshiftmasteruser 管理者権限を持つが使用されます。 ただし、本番環境ではきめ細かいアクセス制御を持つユーザーを使用することをお勧めします。
    • Amazon Redshift クラスターの開発データベースから一時的な認証情報を要求する機能を備えた Amazon Redshift に使用される IAM ロール
    • アマゾンEMRスタジオ 必要な IAM ロールを持つ
    • 必要な IAM ロールを持つ EC6.9.0 クラスター上の Amazon EMR リリース バージョン 2
    • Amazon EMR サーバーレス アプリケーション リリース バージョン 6.9.0
    • AWS Glue 接続と AWS Glue ジョブ バージョン 4.0
    • A Jupyter Notebook EC2 クラスターで Amazon EMR を使用して Amazon EMR Studio を使用して実行する
    • Amazon EMR Studio と Amazon EMR サーバーレスを使用して実行する PySpark スクリプト
  1. スタックの作成が完了したら、スタック名を選択します redshift-spark に移動します 出力

この投稿の後半で、これらの出力値を使用します。

次のセクションでは、Amazon EC2、Amazon EMR サーバーレス、および AWS Glue 上の Amazon EMR から Apache Spark の Amazon Redshift 統合の手順を示します。

EC2 上の Amazon EMR で Apache Spark との Amazon Redshift 統合を使用する

Amazon EMR リリース バージョン 6.9.0 以降、Apache Spark と Amazon Redshift JDBC ドライバーの Amazon Redshift 統合を使用するコネクタは、Amazon EMR でローカルに利用できます。 これらのファイルは、 /usr/share/aws/redshift/ ディレクトリ。 ただし、Amazon EMR の以前のバージョンでは、 コミュニティ のバージョン spark-redshift コネクタ の新しいガイドができました。

次の例は、PySpark カーネルを使用して Amazon Redshift に接続する方法を示しています。 アマゾンEMRスタジオ ノート。 CloudFormation スタックは、Amazon EMR Studio、EC2 クラスター上の Amazon EMR、および実行可能な Jupyter ノートブックを作成しました。 この例を実行するには、次の手順を実行します。

  1. S3 バケットで利用できる Jupyter ノートブックをダウンロードします。
    • CloudFormation スタック出力で、次の値を探します。 EMRStudioNotebookを指す必要があります。 redshift-spark-emr.ipynb S3 バケットで利用可能なノートブック。
    • リンクを選択するか、ノートブックの URL をコピーして新しいタブでリンクを開きます。
    • リンクを開いた後、選択してノートブックをダウンロードします。 ダウンロード、これにより、ファイルがコンピューターにローカルに保存されます。
  1. キーの CloudFormation スタック出力で提供されるリンクを選択またはコピーして、Amazon EMR Studio にアクセスします。 EMRStudioURL.
  2. ナビゲーションペインで、 ワークスペース.
  3. 選択する ワークスペースを作成する.
  4. たとえば、ワークスペースの名前を指定します redshift-spark.
  5. 拡大する 高度な設定 セクションと選択 Workspace を EMR クラスターにアタッチする.
  6. EMR クラスターにアタッチする、名前のEMRクラスターを選択します emrCluster-Redshift-Spark.
  7. 選択する ワークスペースを作成する.
  8. Amazon EMR Studio ワークスペースが作成され、接続済みステータスになったら、ワークスペースの名前を選択してワークスペースにアクセスできます。

これにより、ワークスペースが新しいタブで開きます。 ポップアップ ブロッカーを使用している場合は、ワークスペースが開くことを許可するか、ポップアップ ブロッカーを無効にする必要がある場合があることに注意してください。

Amazon EMR Studio ワークスペースで、以前にダウンロードした Jupyter ノートブックをアップロードします。

  1. 選択する アップロード ローカル ファイル システムを参照し、Jupyter ノートブックをアップロードします (redshift-spark-emr.ipynb).
  2. を選択(ダブルクリック)します。 redshift-spark-emr.ipynb ワークスペース内のノートブックをクリックして、ノートブックを開きます。

ノートブックは、実行するさまざまなタスクの詳細を提供します。 セクションで注意してください Amazon Redshift クラスターに接続するための変数を定義するの値を更新する必要はありません。 jdbc_iam_url, temp_dir, aws_role これらは AWS CloudFormation によって更新されるためです。 AWS CloudFormation は、 前提条件 ノートブックのセクション。

これで、ノートブックの実行を開始できます。

  1. 個々のセルを選択して実行し、次に プレイ.

のキーの組み合わせを使用することもできます Shiftキー+ Enterキー or Shift+Return. または、選択してすべてのセルを実行できます。 すべてのセルを実行 ラン メニュー。

  1. Apache Spark の Amazon Redshift 統合によって Amazon Redshift クラスターで実行される述語プッシュダウン操作を見つけます。

最適化された Parquet 形式で Amazon S3 に保存されている一時データも確認できます。 セクションでセルを実行すると、出力が表示されます。 Amazon Redshift で実行された最後のクエリを取得する.

  1. Amazon EC2 で Amazon EMR からのジョブによって作成されたテーブルを検証するには、Amazon Redshift コンソールに移動し、クラスターを選択します。 redshift-spark-redshift-cluster プロビジョニング済みクラスター ダッシュボード ページで見やすくするために変数を解析したりすることができます。
  2. クラスタの詳細で、 クエリデータ メニュー、選択 クエリエディタv2でのクエリ.
  3. ナビゲーションペインでクラスターを選択し、認証をリクエストするときに Amazon Redshift クラスターに接続します。
  4. 選択 一時的な資格情報.
  5. データベース、 入る dev.
  6. ユーザー名、 入る redshiftmasteruser.
  7. 選択する Save.
  8. ナビゲーション ウィンドウで、クラスターを展開します。 redshift-spark-redshift-cluster、開発データベースを展開し、展開します tickit、および展開 テーブル類 スキーマ内のすべてのテーブルを一覧表示する tickit.

テーブルを見つける必要があります test_emr.

  1. テーブルを選択 (右クリック) test_emr、を選択します テーブルを選択 テーブルをクエリします。
  2. 選択する ラン SQL ステートメントを実行します。

Amazon EMR サーバーレスで Amazon Redshift と Apache Spark の統合を使用する

Amazon EMR リリース バージョン 6.9.0 以降では、Apache Spark JAR (Amazon Redshift によって管理される) と Amazon Redshift JDBC JAR の Amazon Redshift 統合が、Amazon EMR サーバーレスでもローカルに提供されます。 これらのファイルは、 /usr/share/aws/redshift/ ディレクトリ。 次の例では、以前に作成した CloudFormation スタックによって S3 バケットで利用可能になった Python スクリプトを使用します。

  1. CloudFormation スタック出力で、値をメモします。 EMRServerlessExecutionScript、S3 バケット内の Python スクリプトの場所です。
  2. の値にも注意してください。 EMRServerlessJobExecutionRoleこれは、Amazon EMR サーバーレス ジョブの実行で使用される IAM ロールです。
  3. キーの CloudFormation スタック出力で提供されるリンクを選択またはコピーして、Amazon EMR Studio にアクセスします。 EMRStudioURL.
  4. 選択する アプリケーションサーバレス ナビゲーションペインに表示されます。

CloudFormation スタックによって作成された EMR アプリケーションが次の名前で見つかります。 emr-spark-redshift.

  1. ジョブを送信するアプリケーション名を選択します。
  2. 選択する ジョブを送信する.
  3. 仕事の詳細、用 名前 で、ジョブの識別可能な名前を入力します。
  4. ランタイムの役割で、前に CloudFormation スタック出力から書き留めた IAM ロールを選択します。
  5. スクリプトの場所で、CloudFormation スタック出力から先ほどメモした Python スクリプトへのパスを指定します。
  6. セクションを展開 火花特性 を選択して テキストで編集
  7. テキスト ボックスに次の値を入力します。 redshift-connector、Amazon Redshift JDBC ドライバー、 spark-avro JAR、および minimal-json JAR ファイル:
    --jars /usr/share/aws/redshift/jdbc/RedshiftJDBC.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-redshift.jar,/usr/share/aws/redshift/spark-redshift/lib/spark-avro.jar,/usr/share/aws/redshift/spark-redshift/lib/minimal-json.jar

  8. 選択する ジョブを送信する.
  9. ジョブが完了し、実行ステータスが次のように表示されるまで待ちます。 ご注文完了.
  10. Amazon Redshift クエリ エディタに移動して、テーブルが正常に作成されたかどうかを確認します。
  11. Amazon Redshift クエリ グループに対して実行されたプッシュダウン クエリを確認する emr-serverless-redshift. データベースに対して次の SQL ステートメントを実行できます。 dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'emr-serverless-redshift' ORDER BY start_time DESC LIMIT 1

プッシュダウン クエリと戻り結果が Amazon S3 の Parquet ファイル形式で保存されていることがわかります。

AWS Glue で Amazon Redshift と Apache Spark の統合を使用する

AWS Glue バージョン 4.0 以降では、Amazon Redshift に接続する Apache Spark ジョブで、Apache Spark と Amazon Redshift JDBC ドライバーの Amazon Redshift 統合を使用できます。 すでに Amazon Redshift をソースまたはターゲットとして使用している既存の AWS Glue ジョブを AWS Glue 4.0 にアップグレードして、この新しいコネクタを利用できます。 この投稿で提供される CloudFormation テンプレートは、次の AWS Glue リソースを作成します。

  • Amazon Redshift の AWS Glue 接続 – Apache Spark の Amazon Redshift 統合を使用して、AWS Glue から Amazon Redshift への接続を確立するための接続
  • AWS Glue ジョブにアタッチされた IAM ロール – AWS Glue ジョブを実行するアクセス許可を管理する IAM ロール
  • AWSGlueジョブ – Apache Spark の Amazon Redshift 統合を使用して変換と集計を実行する AWS Glue ジョブのスクリプト

次の例では、AWS Glue ジョブにアタッチされた AWS Glue 接続を PySpark で使用しており、次の手順が含まれています。

  1. AWS Glue コンソールで、選択します Connections ナビゲーションペインに表示されます。
  2. Connectionsで、CloudFormation テンプレートによって作成された Amazon Redshift の AWS Glue 接続を選択します。
  3. 接続の詳細を確認します。

ジョブ内または複数のジョブ間でこの接続を再利用できるようになりました。

  1. ソフトウェア設定ページで、下図のように コネクタ ページで、CloudFormation スタックによって作成された AWS Glue ジョブを選択します。 あなたの仕事、またはキーに提供された URL を使用して AWS Glue ジョブにアクセスします GlueJob CloudFormation スタック出力で。
  2. AWS Glue ジョブのスクリプトにアクセスして確認します。
  3. ソフトウェア設定ページで、下図のように 仕事の詳細 タブで、次のことを確認してください 接着剤バージョン に設定されています 接着剤4.0.

これにより、ジョブが最新の redshift-spark   

  1. 詳細 高度なプロパティ とで Connections セクションで、CloudFormation スタックによって作成された接続が接続されていることを確認します。
  2. AWS Glue ジョブに追加されたジョブ パラメータを確認します。 これらの値は、CloudFormation スタックの出力でも利用できます。
  3. 選択する Save その後 ラン.

ジョブ実行のステータスは、 ラン タブには何も表示されないことに注意してください。

  1. ジョブの実行が正常に完了したら、AWS Glue ジョブによって作成されたテーブル test-glue の出力を確認できます。
  2. Amazon Redshift クエリ グループに対して実行されたプッシュダウン クエリを確認します glue-redshift. データベースに対して次の SQL ステートメントを実行できます。 dev:
    SELECT query_text FROM SYS_QUERY_HISTORY WHERE query_label = 'glue-redshift' ORDER BY start_time DESC LIMIT 1

ベストプラクティス

次のベスト プラクティスに留意してください。

  • を使用する代わりに、Amazon EMR から Apache Spark 用の Amazon Redshift 統合を使用することを検討してください。 redshift-spark 新しい Apache Spark ジョブ用のコネクタ (コミュニティ バージョン)。
  • を使用する既存の Apache Spark ジョブがある場合 redshift-spark コネクタ (コミュニティ バージョン) を使用している場合は、それらをアップグレードして、Apache Spark 用の Amazon Redshift 統合を使用することを検討してください。
  • Apache Spark の Amazon Redshift 統合では、述語とクエリのプッシュダウンが自動的に適用され、パフォーマンスが最適化されます。 サポートされている関数を使用することをお勧めします (autopushdown) クエリで。 Apache Spark の Amazon Redshift 統合により、関数が SQL クエリに変換され、Amazon Redshift でクエリが実行されます。 この最適化により、必要なデータが取得されるため、Apache Spark が処理するデータが少なくなり、パフォーマンスが向上します。
    • 次のような集計プッシュダウン関数の使用を検討してください avg, count, max, min, sum データ処理のためにフィルタリングされたデータを取得します。
    • 次のようなブール型プッシュダウン演算子の使用を検討してください in, isnull, isnotnull, contains, endswith, startswith データ処理のためにフィルタリングされたデータを取得します。
    • 次のような論理プッシュダウン演算子の使用を検討してください and, or, not (または !) データ処理のためにフィルタリングされたデータを取得します。
  • パラメータを使用して IAM ロールを渡すことをお勧めします aws_iam_role Amazon EMR または AWS Glue 上の Apache Spark アプリケーションからの Amazon Redshift 認証用。 IAM ロールには、このブログの「Apache Spark アプリケーションでの Apache Spark の Amazon Redshift 統合の例」セクションに示されているように、一時的な IAM 認証情報を取得して Amazon Redshift に対して認証するために必要なアクセス許可が必要です。
  • この機能を使用すると、Secrets Manager と Amazon Redshift データベースで Amazon Redshift のユーザー名とパスワードを維持する必要がなくなります。
  • Amazon Redshift は UNLOAD SQL ステートメントを使用して、この一時データを Amazon S3 に保存します。 Apache Spark アプリケーションは一時ディレクトリ (Parquet ファイル形式で保存) から結果を取得します。 Amazon S3 のこの一時ディレクトリは自動的にクリーンアップされないため、追加のコストがかかる可能性があります。 使用をお勧めします Amazon S3 ライフサイクル ポリシー S3 バケットの保持ルールを定義します。
  • オンにすることをお勧めします Amazon Redshift 監査ログ 接続とユーザー アクティビティに関する情報をデータベースに記録します。
  • オンにすることをお勧めします Amazon Redshift 保管時の暗号化 Amazon Redshift がデータセンターに書き込むときにデータを暗号化し、アクセス時に復号化します。
  • すぐに利用できる Apache Spark 用の Amazon Redshift 統合を使用するには、AWS Glue v4.0 以降にアップグレードすることをお勧めします。 このバージョンの AWS Glue にアップグレードすると、この機能が自動的に利用されます。
  • Apache Spark の Amazon Redshift 統合を使用するには、Amazon EMR v6.9.0 以降にアップグレードすることをお勧めします。 ドライバーや JAR ファイルを明示的に管理する必要はありません。
  • Amazon EMR Studio ノートブックを使用して、Apache Spark アプリケーションで Amazon Redshift データを操作することを検討してください。
  • AWS Glue Studio を使用して、ビジュアル インターフェイスを使用して Apache Spark ジョブを作成することを検討してください。 また、AWS Glue Studio 内で Scala または PySpark のいずれかで Apache Spark コードを記述するように切り替えることもできます。

クリーンアップ

次の手順を実行して、CloudFormation テンプレートの一部として作成されたリソースをクリーンアップし、リソースを使用しなくなった場合に課金されないようにします。

  1. Amazon EMR サーバーレス アプリケーションを停止します。
    • キーの CloudFormation スタック出力で提供されるリンクを選択またはコピーして、Amazon EMR Studio にアクセスします。 EMRStudioURL.
    • 選択する アプリケーションサーバレス ナビゲーションペインに表示されます。

CloudFormation スタックによって作成された EMR アプリケーションが次の名前で見つかります。 emr-spark-redshift.

    • アプリケーションのステータスが [停止済み] と表示されている場合は、次の手順に進むことができます。 ただし、アプリケーションのステータスが [開始済み] の場合は、アプリケーション名を選択してから、 アプリケーションを停止 & アプリケーションを停止 もう一度確認してください。
  1. Amazon EMR Studio ワークスペースを削除します。
    • キーの CloudFormation スタック出力で提供されるリンクを選択またはコピーして、Amazon EMR Studio にアクセスします。 EMRStudioURL.
    • 選択する ワークスペース ナビゲーションペインに表示されます。
    • 作成したワークスペースを選択して選択します 削除、を選択します 削除 もう一度確認してください。
  2. CloudFormation スタックを削除します。
    • AWS CloudFormation コンソールで、前に作成したスタックに移動します。
    • スタック名を選択してから、 削除 スタックを削除し、この投稿の一部として作成されたリソースを削除します。
    • 確認画面で選択 スタックを削除.

まとめ

この投稿では、Apache Spark の Amazon Redshift 統合を使用して、Amazon EC2、Amazon EMR サーバーレス、および AWS Glue で Amazon EMR を使用してアプリケーションを構築およびデプロイし、述語とクエリのプッシュダウンを自動的に適用して、データのクエリパフォーマンスを最適化する方法について説明しました。 Amazon Redshift で。 Amazon EMR または AWS Glue から Amazon Redshift へのシームレスで安全な接続のために、Apache Spark 用の Amazon Redshift 統合を使用することを強くお勧めします。

以下は、Amazon Redshift と Apache Spark の統合について、お客様から寄せられた感想です。

「当社のエンジニアは、Python と Scala を使用して Apache Spark でデータ パイプラインとアプリケーションを構築できます。 私たちは、運用を簡素化し、より迅速かつ効率的にクライアントに提供するカスタマイズされたソリューションを求めていました。それが、Apache Spark の新しい Amazon Redshift 統合によって得られたものです。」

—ヒューロンコンサルティング

「GE Aerospace は AWS アナリティクスと Amazon Redshift を使用して、重要なビジネス上の意思決定を促進する重要なビジネス インサイトを実現しています。 Amazon S3 からの自動コピーのサポートにより、よりシンプルなデータ パイプラインを構築して、Amazon S3 から Amazon Redshift にデータを移動できます。 これにより、データ製品チームがデータにアクセスし、エンドユーザーに洞察を提供する能力が加速します。 データを通じて価値を付加することに多くの時間を費やし、統合に費やす時間を減らしています。」

—GEエアロスペース

「私たちの焦点は、ゴールドマン サックスのすべてのユーザーにデータへのセルフサービス アクセスを提供することです。 オープンソースのデータ管理およびガバナンス プラットフォームである Legend を通じて、金融サービス業界全体で協力しながら、ユーザーがデータ中心のアプリケーションを開発し、データ駆動型の洞察を引き出すことができるようにします。 Amazon Redshift と Apache Spark の統合により、当社のデータ プラットフォーム チームは最小限の手動ステップで Amazon Redshift データにアクセスできるようになり、ゼロコード ETL が可能になり、エンジニアがワークフローの完成に集中しやすくなる能力が向上します。彼らは完全でタイムリーな情報を収集します。 ユーザーが Amazon Redshift の最新データに簡単にアクセスできるようになったため、アプリケーションのパフォーマンスの向上とセキュリティの向上が期待できます。」

-ゴールドマン・サックス


著者について

ガガン・ブラーミ アマゾン ウェブ サービスのビッグデータ分析と AI/ML プラットフォームに焦点を当てたシニア スペシャリスト ソリューション アーキテクトです。 Gagan は、情報技術分野で 18 年以上の経験があります。 彼は、顧客が AWS で高度にスケーラブルでパフォーマンスが高く、安全なクラウドベースのソリューションを設計および構築するのを支援しています。 余暇には、家族と過ごしたり、新しい場所を探検したりしています。

ヴィヴェーク・ゴータム AWS プロフェッショナル サービスでデータ レイクを専門とするデータ アーキテクトです。 彼は、AWS でデータ製品、分析プラットフォーム、およびソリューションを構築する企業顧客と協力しています。 Vivek は、データ レイクの構築と設計を行っていないときは、新しい旅行先を探索したり、ハイキングに出かけたりするのが好きな食通です。

ナレシュゴータム AWS のデータ分析および AI/ML のリーダーであり、20 年の経験があります。顧客が高可用性、高パフォーマンス、および費用対効果の高いデータ分析および AI/ML ソリューションを設計して、データ主導の意思決定で顧客を支援することを楽しんでいます。 . 余暇には、瞑想と料理を楽しんでいます。

ボー・シャリフィ Amazon Redshift ドライバー チームのソフトウェア開発エンジニアであり、Amazon Redshift Integration with Apache Spark コネクタの開発を指揮しています。 彼は、複数の業界にわたってデータ駆動型プラットフォームを構築する 20 年以上の経験を持っています。 余暇には、家族と過ごす時間やサーフィンを楽しんでいます。

タイムスタンプ:

より多くの AWSビッグデータ