Amazon Web Services ブログ

機械学習と Amazon SageMaker ノートブックを使用したデータウェアハウステーブルの探索

あなたは、機械学習 (ML) 環境で探索したいデータウェアハウステーブルを持つデータサイエンティストですか? もしそうなら、読んでください。

この記事では、データウェアハウスに保存され、Amazon SageMaker ノートブックから AWS Glue データカタログでカタログ化されている大規模データセットに対して探索的分析を実行する方法を紹介します。Amazon SageMaker で実行されている Jupyter ノートブックから企業データウェアハウス内のデータセットを特定して探索する方法について詳しく説明します。Amazon Redshift から Amazon EMR に興味深い情報を抽出し、そこでさらに変換する方法を示します。そうすると、すべてシームレスな体験として、ノートブックのデータを分析して視覚化し続けることができます。

この記事は、以下の以前の記事を基にしていますので、最初にその記事を確認することをお勧めします。

Amazon SageMaker の概要

Amazon SageMaker は、フルマネージド ML サービスです。Amazon SageMaker を使用することで、データサイエンティストや開発者は、ML モデルを迅速かつ容易に構築、トレーニングすることができます。また、用意したモデルを実稼動も可能なホステッド環境に直接デプロイすることもできます。Amazon SageMaker には Jupyter のオーサリング環境が統合されており、データサイエンティストの初期のデータ探索や分析、モデル構築に便利です。

課題は、対象となるデータセットを見つけることです。データがデータウェアハウスにある場合は、関連する情報のサブセットを抽出し、それを Jupyter ノートブックにロードして詳細な探索やモデリングを行います。個々のデータセットが大きくなり、数が増えるにつれて、対象となる可能性があるすべてのデータセットを抽出し、ノートブックにロードしてマージすると、実用的ではなくなり生産性が低下します。こうした種類のデータの組み合わせや探索に、データサイエンティストは最大 80% の時間を費やしています。この段階で生産性を向上させることが、ML プロジェクトの完了を早めるために重要です。

データウェアハウスとして Amazon Redshift を使用している企業が増えています。Amazon Redshift を使用すると、高度なクエリの最適化、高性能ローカルディスク上のカラムナストレージ、および大規模な並列クエリ実行によって、ペタバイト単位の構造化データに対して複雑な分析クエリを実行することができます。 こうした機能により、データサイエンティストにとっても興味深いデータを生み出すことができます。ただし、ML タスクを実行するには、データサイエンティストがデータを操作できるように、データを ML プラットフォームに抽出する必要があります。Amazon Redshift の機能を使用して、必要に応じてデータを結合してフィルター処理し、次に ML 固有の変換のために関連データだけを ML プラットフォームに抽出することができます。

多くの場合、大企業は AWS Glue も使用してデータレイクを管理しています。AWS Glue は、完全マネージド型の ETL (抽出、変換、ロード) サービスです。簡単かつ費用対効果が高い方法でデータの分類、クリーニング、エンリッチを行い、信頼性の高い方法でデータストア間でのデータ移行を行うことができます。AWS Glue には、AWS Glue データカタログと呼ばれる一元化されたメタデータリポジトリが備えられており、データレイク内のデータをエンリッチおよび分類した上で、検索やクエリが実行できるようになっています。 データカタログ内のメタデータを使用することで、任意のデータセットの名前、ロケーション、コンテンツ、属性での指定が行えます。

Amazon Redshift でデータを結合してフィルタリングした後でも、ノートブックが保存して ML 操作を実行するのに、残りのデータがまだ大きすぎる可能性があります。非常に大きなデータセットを操作することは、EMR での Apache Spark に最適なタスクです。

Spark はクラスタコンピューティング用のフレームワークで、Python、Java、Scala などのさまざまな言語での分析をサポートする組み込みモジュールを備えています。企業のデータレイクによくみられる大規模データセットを扱ううえで、EMR で Spark を動作させることによるスケーリングの効果は絶大です。データセットが AWS Glue データカタログですでに定義されている場合、データカタログを EMR の外部 Apache Hive メタストアとして使用することで、データセットへのアクセスがさらに簡単になります。Spark では、SQL の機能をはるかに超える複雑な変換を実行できます。そのため、たとえば、Python と Spark MLlib の全機能を使用するなど、データをさらに処理または操作するための良いプラットフォームになります。

この記事で説明されている設定を使用する場合は、Amazon Redshift を使用してソースデータを結合してフィルター処理します。次に、負荷の高い処理のために EMR を使用して、結果として得られる縮小された (ただしまだ大きい可能性がある) データセットを繰り返し変換します。これを行うには、Amazon SageMaker ノートブックを使用して、手元にあるタスクに関連するデータのサブセットを探索して視覚化します。さまざまなタスク (結合とフィルタリング、複雑な変換、および視覚化) は、それぞれそのタスクに最適なサービスに割り当てられています。

ソリューションの概要

ソリューションの最初の部分では、AWS Glue データカタログに照会して目的のデータベースを見つけ、テーブルとその定義を確認します。テーブルの宣言によって、データの場所 (この場合は Amazon Redshift) を特定します。AWS Glue データカタログには、データの取得に使用する Amazon Redshift 接続文字列を構築するために必要な情報も含まれています。

ソリューションの 2 番目の部分は、データを EMR に読み込みます。Amazon Redshift から抽出するデータのサイズが十分に大きいため、直接ノートブックに読み込むのが実用的ではなくなった場合に適用されます。EMR などのクラスターコンピューティングサービスの能力が、必要なスケーラビリティを提供します。

以下が当てはまる場合は、もっと簡単なソリューションがあります。詳細については、Amazon SageMaker サンプルと共に提供される Amazon Redshift アクセスデモのサンプルノートブックを参照してください。

  • 対象となるデータを含む Amazon Redshift クラスターを知っている。
  • Amazon Redshift 接続情報を知っている。
  • 抽出して探索しているデータが、JDBC 接続に適した規模である。

このソリューションは、4 つの AWS のサービスといくつかのオープンソースコンポーネントを使用して実装されています。

  • データの探索、クリーニング、前処理のために設定不要の Jupyter ノートブック IDE を提供する、Amazon SageMaker ノートブックインスタンス。このノートブックインスタンスは、以下を実行します。
    • Jupyter ノートブック
    • SparkMagic: Jupyter の Livy を介してリモートの Spark クラスターをインタラクティブに操作するためのツールセット。SparkMagic プロジェクトには、複数の言語でインタラクティブに Spark コードを実行するための一連の仕組みが含まれています。この仕組みは、与えられたコマンドを実行する定義済み関数です。このプロジェクトには、Jupyter を統合 Spark 環境に変えるために使用できるいくつかのカーネルも含まれています。
  • Apache Spark を実行する EMR クラスター、および
    • Apache Livy: REST インターフェイスを通じて、EMR クラスタ上の Spark とのやりとりを容易にするサービス。Livy は、Spark をインタラクティブなウェブ/モバイルアプリケーションで使用できるようにし、今回のケースでは、Jupyter ノートブックで使用できるようにします。
    • 中央メタデータリポジトリとして機能する、AWS Glue データカタログ。ここでは、EMR で実行されているビッグデータアプリケーション用の外部 Hive メタストアとして使用されています。
    • データウェアハウスとしての Amazon Redshift
  • Spark を備えた EMR クラスターは、Databricks 提供のパッケージである Redshift Data Source for Apache Spark を使用して Amazon Redshift から読み取ります。

この記事では、これらのすべてのコンポーネントが、下図に示すように相互に作用します。

以下の手順で、Amazon S3 に存在し、AWS Glue データカタログで定義されているデータセットにアクセスできるようになります。

  1. Amazon SageMaker の Jupyter SparkMagic ノートブックで作業します。ノートブック内で、EMR クラスターに対してコマンドを発行します。PySpark コマンドを使用することもできますし、SQL magic を使用して HiveQL コマンドを発行することもできます。
  2. EMR クラスターに向けて送信されたコマンドは、同クラスターで動作する Livy によって受信されます。
  3. Livy は、同じく EMR クラスターで動作している Spark にコマンドを受け渡します。
  4. Spark は、Hive メタストアにアクセスし、カタログ化されたデータセットのロケーション、DDL、プロパティを特定します。今回のケースでは、Hive メタストアはデータカタログに設定されています。
  5. データカタログから接続情報を取得するために boto3 関数 (下記の get_redshift_data) を定義して実行し、Amazon Redshift にコマンドを発行してテーブルを読み取ります。spark-redshift パッケージはテーブルを一時的な S3 ファイルにアンロードし、それを Spark にロードします。
  6. Spark で必要な操作を行った後、EMR はさらに分析と視覚化を行うためのデータフレームとしてデータをノートブックに返します。

以下のセクションでは、テーブルのサンプルセットに対して次の手順を実行します。

  1. 提供されている AWS CloudFormation スタックを使用して、Amazon SageMaker ノートブックインスタンス、Livy と Spark による EMR クラスター、Amazon Redshift ドライバーを作成します。AWS Glue をクラスターの Hive メタストアとして指定し、Amazon Redshift クラスターを選択します。このスタックは、Amazon Redshift クラスターへの AWS Glue 接続、および Amazon Redshift をクロールするためのクローラーも設定します。
  2. Amazon Redshift でいくつかのサンプルデータを設定します。
  3. AWS Glue クローラーを実行して Amazon Redshift にアクセスし、そこに含まれるテーブルに関するメタデータをデータカタログに追加します。
  4. Amazon SageMaker の Jupyter ノートブックで、以下の操作を行います。
    1. データカタログ情報を使用して対象のテーブルを見つけ、Amazon Redshift の接続情報を抽出する。
    2. Amazon Redshift からテーブルを読み取り、データを Spark に取り込む。アンロード操作中に、必要に応じて Amazon Redshift データをフィルタリングまたは集計することができます。
    3. Spark でデータをさらに変換し、それを目的の出力に変換する。
    4. 縮小したデータセットをノートブックに取り込み、基本的な ML を実行する。

ソリューションのインフラストラクチャを設定する

最初に、事前定義済みの AWS CloudFormation スタックを起動し、インフラストラクチャのコンポーネントを設定します。AWS CloudFormation スタックは、以下のリソースを設定します。

  • Livy および Spark を備えた EMR クラスター、外部の互換性のある Hive メタストアとして AWS Glue データカタログを使用。さらに、EMR クラスターと同じメタストアを使用するように Livy を設定します。
  • S3 バケット。
  • Amazon SageMaker ノートブックインスタンス、および関連する以下のコンポーネント:
    • ノートブックインスタンスが使用する IAM ロール。IAM ロールには、マネージドロールである AmazonSageMakerFullAccess と、上記で作成した S3 へのアクセス権が与えられます。
    • ノートブックインスタンスに使用するセキュリティグループ。
    • Amazon SageMaker のライフサイクル設定。Livy をスタックによって起動される EMR クラスタにアクセスするように設定します。また、サンプルコードを含んだ事前定義済みの Jupyter ノートブックでコピーします。
  • 独自のセキュリティグループでの Amazon Redshift クラスター。EMR、Amazon SageMaker、AWS Glue クローラーがアクセスできるようにポートが開かれます。
  • AWS Glue データベース、Amazon Redshift クラスターをターゲットとして指定した AWS Glue 接続、および接続をクロールするための AWS Glue クローラー。

us-west-2 でこのソリューションの動作を確認するには、次のボタンでスタックを起動します。このソリューションの合計実行コストは約 1.00 USD です。ソリューションを終了したら、追加料金を避けるために忘れずに AWS CloudFormation スタックを削除してください。

  1. [Launch Stack] を選択し、[Next] を選択します。
  2. 使用している環境に合わせて、以下のパラメーターを更新します。
    • Amazon Redshift パスワード—少なくとも 1 つの大文字、1 つの小文字、1 つの数字を含む必要があります。
    • VPCId—インターネットアクセスと Amazon S3 VPC エンドポイントが必要です。アカウントで作成されているデフォルトの VPC を使用することができます。Amazon VPC ダッシュボードで、[Endpoints] を選択します。選択した VPC のエンドポイントが、com.amazonaws.us-west-2.s3 であることを確認します。違う場合は、作成します。
    • VPCSubnet—必要なソフトウェアコンポーネントをインストールできるために、インターネットにアクセスできる必要があります。
    • アベイラビリティーゾーン—選択したサブネットと一致する必要があります。

    アベイラビリティーゾーン情報と S3 VPC エンドポイントは、Amazon Redshift にアクセスするために AWS Glue クローラーが使用します。

  3. 他のパラメータはデフォルト値のままにします。AWS Glue データベース名を変更するには、後の手順で実行する Amazon SageMaker ノートブックを変更する必要があります。下のスクリーンショットは、デフォルトパラメータを示しています。
  4. [Next] を選択します。
  5. [I acknowledge that AWS CloudFormation might create IAM resources with custom names] を選択し、[I acknowledge that AWS CloudFormation might require the following capability: CAPABILITY_AUTO_EXPAND] を選択します。
  6. [Create] を選択します。

AWS CloudFormation のマスタースタックとそのネストしたスタックのステータスが、「CREATE_COMPLETE」になるのを待ちます。デプロイには最大 45 分かかります。

マスタースタックで、作成されたリソースの [Outputs] タブを確認します。キーと値のデータは、次の手順で使用します。次のスクリーンショットは作成したリソースを示していますが、実際の値は異なります。

Amazon Redshift にサンプルデータを追加する

CloudFormation 出力からの RedshiftClusterEndpoint、マスターユーザー名 (masteruser)、AWS CloudFormation スタックで指定したパスワード、および 「dev」の Redshift データベースを使用し、お気に入りの SQL クライアントで Amazon Redshift クラスターに接続します。以下のいずれかの方法を使用してください。

使用するサンプルデータは、ステップ 6: Amazon S3 からサンプルデータをロードするから取得します。このデータには、購入者による「liked」カテゴリに関する情報とともに、いくつかのカテゴリのイベントのチケット売り上げが含まれています。後で、このデータを使用して、カテゴリの好みとイベントへの参加の間の相関関係を計算します (その後、必要に応じてさらに探索します)。

テーブル作成コマンドに続けて COPY コマンドを実行します。AWS CloudFormation によって作成された RedshiftIamCopyRoleArn IAM ロールを COPY コマンドに挿入します。このシーケンスの最後では、サンプルデータは Amazon Redshift のパブリックスキーマにあります。SQL を使用して、テーブル内のデータを探索します。後の手順で同じデータをもう一度探索します。これで、イベントチケットの販売に関連するデータを含むいくつかの正規化テーブルがある Amazon Redshift データウェアハウスができました。

以下のクエリを試します。後で、Amazon SageMaker からの同じクエリ (制限を引く) を使用して、Amazon Redshift から EMR および Spark にデータを取得します。また、データが Amazon Redshift に正しくロードされたことを確認するのにも役立ちます。

SELECT distinct u.userid, u.city, u.state,
u.likebroadway, u.likeclassical, u.likeconcerts, u.likejazz, u.likemusicals, u.likeopera, u.likerock, u.likesports, u.liketheatre, u.likevegas,
d.caldate, d.day, d.month, d.year, d.week, d.holiday,
s.pricepaid, s.qtysold, -- s.salesid, s.listid, s.saletime, s.sellerid, s.commission
e.eventname, -- e.venueid, e.catid, e.eventid,
c.catgroup, c.catname,
v.venuecity, v.venuename, v.venuestate, v.venueseats
FROM  users u, sales s, event e, venue v, date d, category c
WHERE u.userid = s.buyerid and s.dateid = e.dateid and s.eventid = e.eventid and e.venueid = v.venueid 
    and e.dateid = d.dateid and e.catid = c.catid
LIMIT 100;

[like] フィールドには、「null」が含まれています。後の処理を簡単にするために、ここでは「false」に変換します。

SELECT distinct u.userid, u.city, u.state ,
NVL(u.likebroadway, false) as likebroadway, NVL(u.likeclassical, false) as likeclassical, NVL(u.likeconcerts, false) as likeconcerts,
NVL(u.likejazz, false) as likejazz, NVL(u.likemusicals, false) as likemusicals, NVL(u.likeopera, false) as likeopera, NVL(u.likerock, false) as likerock,
NVL(u.likesports, false) as likesports, NVL(u.liketheatre, false) as liketheatre, NVL(u.likevegas, false) as likevegas,
d.caldate, d.day, d.month, d.year, d.week, d.holiday,
s.pricepaid, s.qtysold, -- s.salesid, s.listid, s.saletime, s.sellerid, s.commission
e.eventname, -- e.venueid, e.catid, e.eventid,
c.catgroup, c.catname,
v.venuecity, v.venuename, v.venuestate, v.venueseats
FROM  users u, sales s, event e, venue v, date d, category c
WHERE u.userid = s.buyerid and s.dateid = e.dateid and s.eventid = e.eventid and e.venueid = v.venueid 
    and e.dateid = d.dateid and e.catid = c.catid
LIMIT 100;

AWS Glue クローラーを使用してデータカタログにテーブルを追加する

Amazon Redshift クラスターにサンプルデータがあるので、次の手順は、Amazon Redshift テーブルを AWS Glue データカタログに表示することです。AWS CloudFormation テンプレートが、AWS Glue データベース、Amazon Redshift への接続、およびクローラーの各コンポーネントを設定します。ここで、クローラーを実行します。クローラーは、Amazon Redshift のカタログを読み取り、その情報をデータカタログに入力します。

まず、AWS Glue 接続が Amazon Redshift に接続できることをテストします。

  1. AWS Glue コンソールの左側のナビゲーションペインで、[Connections] を選択します。
  2. GlueRedshiftConnection」という接続を選択し、[Test Connection] を選択します。
  3. IAM ロールを求められた場合は、AWS CloudFormation テンプレートによって作成された GlueRedshiftService ロールを選択します。
  4. AWS Glue が接続をテストするのを待ちます。テストが正常に実行されると、「GlueRedshiftConnection connected successfully to your instance」というメッセージが表示されます。成功しなかった場合、最も可能性の高い原因はサブネット、VPC、アベイラビリティーゾーンが一致しなかったことです。あるいは、サブネットに S3 エンドポイントまたはインターネットアクセスがなかった可能性があります。

次に、AWS CloudFormation テンプレートのパラメータに記載されている Amazon Redshift データベースに存在するテーブルに関するメタデータを Amazon Redshift から取得します。そのために、AWS CloudFormation テンプレートが作成した AWS Glue クローラーを実行します。

  1. AWS Glue コンソールの左側のナビゲーションバーで、 [Crawlers] を選択します。
  2. クローラーリストで [GlueRedshiftCrawler] を選択し、[Run Crawler] を選択します。IAM ロールを求められた場合は、AWS CloudFormation テンプレートによって作成された GlueRedshiftService ロールを選択します。
  3. クローラーが実行されるのを待ちます。2~3 分で完了するはずです。ステータスが、[Starting]、[Running]、[Stopping]、[Ready] の順に変化します。
  4. クローラーのステータスが [Ready] になったら、[Tables Added] の下の列を確認します。テーブルが 7 つ追加されているのが確認できるはずです。

クローラーが追加したテーブルを確認するには、以下の手順を実行します。

  1. [Databases] を選択し、「glueredsage」という名前のデータベースを選択します。このデータベースは、AWS CloudFormation スタックによって作成されたものです。
  2. [Tables in glueredsage] を選択します。

次のスクリーンショットに示すように、Amazon Redshift で作成したテーブルが一覧表示されているはずです。AWS Glue テーブル名は、データベース (dev)、スキーマ (public)、および Amazon Redshift からの実際のテーブル名 (例えば date) で構成されています。AWS Glue の分類は、Amazon Redshift です。

次の手順で、Jupyter ノートブックからこのメタデータにアクセスします。

ノートブックから AWS Glue データカタログで定義されたデータにアクセスする

このセクションでは、AWS Glue データカタログで対象の Amazon Redshift データを見つけ、Amazon SageMaker ノートブックで Amazon Redshift からデータを取得します。

  1. Amazon SageMaker コンソールの左側のナビゲーションペインで、[Notebook instances] を選択します。
  2. AWS CloudFormation スタックによって起動されたノートブックの横にある [Open Jupyter] を選択します。

次のスクリーンショットのようなページが表示されます。CF スタックの Amazon SageMaker ライフサイクル設定で、ノートブック Using_SageMaker_Notebooks_to_access_Redshift_via_Glue.ipynb が自動的に Jupyter のダッシュボードにアップロードされます。

ノートブックを開きます。カーネルタイプは、「SparkMagic (PySpark)」です。あるいは、以前の実行の静的結果を HTML 形式で参照することもできます。以下のリンクで、このバージョンの関連するセクションへ移動できます。

そこの指示に従って、ノートブックのセルの実行を開始します。次のような内容を実行します。

  • Livy を介してローカルノートブックから Spark クラスターにアクセスし、ローカルノートブックから単純な Pyspark ステートメントを発行して、この環境で Pyspark を使用する方法を示します。
  • AWS Glue データカタログにデータベースを一覧表示し、AWS CloudFormation テンプレートを使用して以前に設定した AWS Glue データベースの glueredsage テーブルを表示します。ここでは、ローカルノートブックからデータカタログにアクセスするために、2 つの Python ヘルパー関数を使用します。対象となるテーブルをデータカタログで特定し、Amazon Redshift に保存されていることを確認できます。これは、このデータを読み取るために Amazon Redshift に接続する必要があるという手がかりです。
  • 対象となるテーブルのデータカタログから Amazon Redshift 接続情報を取得します。
  • 完全なテーブルを取得するか、データを結合してフィルタ処理する SQL を実行するという、2 つの方法を使用して、計画した研究課題に関連するデータを一連の Amazon Redshift テーブルから Spark EMR に取得します。まず、メタデータ (イベントのカテゴリ) を含む小さな Amazon Redshift テーブルを取得します。次に、どの種類のイベント (ブロードウェイ、ジャズ、クラシックなど) のように、どの都市のどのカテゴリについてのデータを含む平坦化されたデータセットを取得する複雑なクエリを実行します。無関係なデータは、それ以上の分析のために検索されません。データは Spark データフレームとして返され、そこで追加の分析を実行することができます。
  • 結果として得られる (大きい可能性がある) データフレームを EMR で使用して、最初に Spark でいくつかの ML 機能を実行します。いくつかの列をワンホットベクトル表現に変換し、それらの間の相関を計算します。相関関係のデータフレームははるかに小さく、ローカルノートブックで処理するのに実用的です。
  • 最後に、ローカルノートブックインスタンスの処理済みデータフレームを操作します。ここで、相関の (はるかに小さい) 結果をローカルで視覚化します。

下は最初の分析の結果であり、イベント参加数と好きなイベントのカテゴリの相関関係を示しています。

これらのチケット購入とイベントへの参加に基づくと、「いいね」とイベントのカテゴリは弱い相関しかないことがわかります (最大相関は 0.02 です)。相関は弱いものの、比較的言えることは:

  • 劇場が好きは、ミュージカルへの参加と正の相関がある。
  • オペラが好きは、演劇への参加と正の相関がある。
  • ロックが好きは、ミュージカルへの参加と負の相関がある。
  • ブロードウェイが好きは、演劇への参加と負の相関がある (驚くほど!)。

接続のデバッグ

ノートブックが EMR クラスターに接続されない場合は、次の情報を調べて問題がどこにあるのか確認します。

Amazon SageMaker ノートブックインスタンスでは、ライフサイクル設定が使用できます。ライフサイクル設定を使用することで、Amazon SageMaker ノートブックインスタンスを作成、または停止後に再起動させるたびに、Bash スクリプトを実行することができます。AWS CloudFormation テンプレートで creation-time スクリプトを使用して、ノートブックインスタンスの Livy の構成に、前に作成した EMR マスターインスタンスのアドレスを設定します。接続の問題の最も一般的な原因は、以下のとおりです。

  • livy.conf に正しい設定がない。
  • EMR クラスターとノートブックインスタンスの間のセキュリティグループで正しいポートが開かれていない。

ノートブックインスタンスが作成または開始され、ライフサイクル設定が実行された場合、その結果は Amazon CloudWatch Logs ロググループ (/aws/sagemaker/NotebookInstances) に取り込まれます。このロググループには、<notebook-instance-name>/LifecycleConfigOnCreate スクリプトと、<notebook-instance-name>/LifeCycleConfigOnStart の実行結果のストリームが保持されます (「test-scripts2」のノートブックインスタンスの場合は、以下のようになります)。これらのストリームには、ライフサイクルスクリプトの実行からのログメッセージが含まれており、エラーが発生したかどうかを確認できます。

次に、Livy の構成と、ノートブックインスタンスでの EMR へのアクセスについて確認します。Jupyter ファイルのダッシュボードで、[New]、[Terminal] の順に選択します。これで、ノートブックインスタンスでシェルが開きます。

Livy の設定ファイルは、/home/ec2-user/SageMaker/.sparkmagic/config.json に保存されています。ファイル内の 3 か所で、EMR クラスターの IP アドレスが元の http://localhost:8998 アドレスに置き換えられていることを確認します。

Amazon Redshift からのデータ取得中にエラーが発生した場合は、リクエストが Amazon Redshift に送信されているか確認してください。

  1. Amazon Redshift コンソールで、[Clusters] を選択し、AWS CloudFormation テンプレートによって開始されたクラスターを選択します。
  2. [Queries] を選択します。
  3. リクエストは、Amazon Redshift クラスターが実行した SQL クエリのリストに含まれている必要があります。含まれていない場合は、Amazon Redshift への接続が機能していること、および正しい IAM コピーロール、ユーザー ID、パスワードを使用していることを確認します。

最後に確認する場所は、copy ステートメントで指定した一時的な S3 ディレクトリです。Amazon Redshift からアンロードされたデータを含むフォルダがそこに配置されているはずです。

ソリューションを拡張して、本稼働で使用する

提供されている例では、コンポーネント間の接続により簡単に集中できるように、単純なデータセットと SQL を使用しています。ただし、このソリューションの本当の実力は、Amazon Redshift データウェアハウスおよびその中のデータの全機能にアクセスすることによってもたらされます。結合、集計、フィルタを含むはるかに複雑な SQL クエリを使用して、Amazon Redshift でデータを操作、変換、削減することができます。次に、対象となるサブセットを Amazon SageMaker に戻して、さらに詳細に探索します。

このセクションでは、さらに 3 つの質問に触れます。

  • Amazon Redshift データを S3 のデータとマージすることはどうでしょうか?
  • データ探索フェーズから ML モデルのトレーニング、そして本稼働へと移行するのはどうでしょうか?
  • このソリューションをどのように複製しますか?

このソリューションで Redshift Spectrum を使用する

このデータ探索フェーズで、Amazon Redshift に保存されているデータと組み合わせて使用すると便利なデータが、S3 にさらにいくつか存在することがわかります。Amazon Redshift Spectrum の機能を使用すると、2 つをマージするのは簡単です。Amazon Redshift Spectrum は、Amazon Redshift と同じ SQL 構文を使用して、直接 S3 内のデータを照会します。Amazon Redshift にローカルに保存されている頻繁にアクセスされるデータと、S3 にコスト効率よく保存されているフルデータセットの両方にまたがるクエリを実行することもできます。

Amazon SageMaker ノートブックからこの機能を使用するには、以下の手順を実行します。

  1. まず、クローラーを使用してテーブルをカタログ化するための手順に従って、S3 データセットを AWS Glue データカタログに追加します。
  2. 次に、Amazon Redshift Spectrum 用の外部スキーマの作成の手順に従って、既存の外部スキーマを Amazon Redshift に追加します。最低限のアクセス許可を付与するためのポリシーで説明されているアクセス許可が必要です。

Amazon Redshift で外部スキーマを定義すると、SQL を使用して Amazon Redshift から S3 ファイルを読み取ることができます。また、Amazon Redshift テーブルを使用して S3 ファイルをシームレスに結合、集約、フィルタ処理することもできます。

まったく同じ方法で、ノートブック内から SQL を使用して、S3 と Amazon Redshift の組み合わせデータを Spark/EMR に読み込むことができます。そこから、すでに定義されている関数を使って、ノートブックに読み込みます。

探索からトレーニングおよび本稼働への移行

ここで説明した、Amazon Redshift から直接読み取るパイプラインは、ML プロジェクトのデータ探索フェーズ用に最適化されています。このフェーズで、さまざまなデータセットをすばやく繰り返して、どのデータおよびどの組み合わせが問題の解決に役立つかを確認します。

トレーニングに使用するデータを決定したら、最終的な SQL を S3 での抽出に具体化することがより適切です。サンプルの Amazon SageMaker ノートブックで示されているように、S3 のデータセットをトレーニングフェーズで使用することができます。

本稼働へのデプロイには、データアクセスパターンが異なるので、さまざまな要件があります。たとえば、オンライントランザクションで必要とされる対話型の応答は、Amazon Redshift には適していません。アプリケーションとデータパイプラインのニーズを考慮し、そのニーズに合ったデータソースとアクセス方法の適切な組み合わせを設計します。このソリューションを複製する

クリーンアップ

追加料金を避けるために、ソリューションを終了したら、忘れずに AWS CloudFormation スタックを削除してください。

結論

これまでに、データレイクとデータウェアハウスにあるデータを探索することで、この組み合わせの真の力を理解しました。

  • AWS Glue データカタログを介してデータを公開します。
  • Amazon Redshift と Amazon EMR のスケーラビリティと処理機能を使用して、Amazon S3 データレイクのデータを前処理、フィルタリング、結合、集約します。
  • データサイエンティストは、Amazon SageMaker、Jupyter ノートブックや SQL などの使い慣れたツールで、すでにカタログ化されているデータを迅速に探索したり可視化したりできるようになります。

作業負担の元となる要因が取り除かれ、データサイエンティストはビジネスのペースで動くことができます。


著者について

Veronika Megler は、AWS プロフェッショナルサービスのビッグデータ、アナリティクス、データサイエンス担当の主任コンサルタントです。彼女は、時空間データ検索をテーマとして、コンピュータサイエンスの博士号を取得しています。技術採択を専門とし、顧客が新しい技術を使って新しい問題を解決し、古い問題をより効率的かつ効果的に解決できるように支援しています。