チュートリアル: Amazon EC2 で Apache Zeppelin ノートブックサーバーをセットアップする - AWS Glue

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

チュートリアル: Amazon EC2 で Apache Zeppelin ノートブックサーバーをセットアップする

このチュートリアルでは、Amazon EC2 インスタンスでホストされる Apache Zeppelin ノートブックサーバーを作成します。ノートブックは開発エンドポイントのいずれかに接続して、デプロイする前に AWS Glue ETL (抽出、変換、ロード) スクリプトをインタラクティブに実行、デバッグ、およびテストできるようにします。

このチュートリアルでは、「チュートリアルの前提条件」にまとめられているステップが実行済みであることを前提としています。

Amazon EC2 インスタンスでの Apache Zeppelin ノートブックサーバーの作成

Amazon EC2 でノートブックサーバーを作成するには、AWS CloudFormation、Amazon EC2、およびその他のサービスでリソースを作成するためのアクセス許可が必要です。必要なユーザーアクセス権限の詳細については、「ステップ 3: AWS Glue にアクセスする IAM ユーザーにポリシーをアタッチする」を参照してください。

  1. AWS Glue コンソールで [Dev endpoints (開発エンドポイント)] を選択して、開発エンドポイントのリストに移動します。

  2. 横にあるボックスを選択して、エンドポイントを選択します。キーは Amazon EC2 インスタンスの後のアクションで生成されるため、空の SSH パブリックキーを持つエンドポイントを選択します。それから [Actions] (アクション) を選択し、[Create notebook server] (ノートブックサーバーの作成) を選択します。

    ノートブックサーバーをホストするには、Amazon EC2 インスタンスは開発エンドポイントで AWS CloudFormation スタックを使用してスピンアップされます。SSL 証明書を使用して Zeppelin サーバーを作成した場合、Zeppelin HTTPS サーバーはポート 443 で起動されます。

  3. 英数字とハイフンのみを使用し、demo-cf などの AWS CloudFormation スタックサーバー名を入力します。

  4. ステップ 5: ノートブックサービスの IAM ロールを作成する」で説明されているように、Amazon EC2への信頼関係を設定した IAM ロールを選択します。

  5. Amazon EC2コンソール (https://console.aws.amazon.com/ec2/) で生成したキーペアAmazon EC2を選択するか、[Create EC2 key pair (EC2 キーペアの作成)] を選択して新しいキーペアを生成します。そのペアのプライベートキー部分をダウンロードして保存した場所を忘れないでください。このキーペアは、開発エンドポイント作成時に使用した SSH キーとは異なります (Amazon EC2 が使用するキーは 2048 ビット SSH-2 RSA キーです)。Amazon EC2 キーについての詳細は、「Amazon EC2 のキーペア」を参照してください。

    誤って変更されないよう、プライベートキーファイルが書き込み禁止であるのを確認することを一般的にお勧めします。macOS および Linux システムの場合、ターミナルを開いて chmod 400 private-key-file path を入力することでこれを行います。Windows の場合、コンソールを開いて attrib -r private-key-file path を入力します。

  6. ユーザー名を選択して、Zeppelin ノートブックにアクセスします。

  7. ノートブック状態を保存する先の Amazon S3 パスを選択します。

  8. [Create] を選択します。

AWS CloudFormation コンソールの [Events (イベント)] タブ (https://console.aws.amazon.com/cloudformation) で AWS CloudFormation スタックのステータスを表示できます。AWS CloudFormation によって作成された Amazon EC2 インスタンスは、Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) で表示できます。キー名 aws-glue-dev-endpoint と開発エンドポイントの名前の値でタグ付けされたインスタンスを検索します。

ノートブックサーバーの作成後、ステータスは Amazon EC2 コンソールで CREATE_COMPLETE に変わります。サーバーに関する詳細情報は、開発エンドポイントの詳細ページにも表示されます。作成が完了すると、新しいサーバーのノートブックに接続できます。

Zeppelin ノートブックサーバーの設定を完了するには、Amazon EC2 インスタンスでスクリプトを実行する必要があります。このチュートリアルでは、Amazon EC2 インスタンスで Zeppelin サーバーを作成するときに SSL 証明書をアップロードします。ただし、SSH ローカルポート転送によって接続する方法もあります。追加の設定手順については、「開発エンドポイントに関連付けられているノートブックサーバーを作成する」を参照してください。作成が完了すると、HTTPS を使用して新しいサーバーのノートブックに接続できます。

注記

作成した開発エンドポイントに関連付けられているすべてのノートブックサーバーを管理します。したがって、開発エンドポイントを削除した場合、ノートブックサーバーを削除するには AWS CloudFormation コンソールで AWS CloudFormation スタックを削除する必要があります。

Amazon EC2 でのノートブックサーバーへの接続

  1. AWS Glue コンソールで [Dev endpoints (開発エンドポイント)] を選択して、開発エンドポイントのリストに移動します。ノートブックサーバーを作成した開発エンドポイントの名前を選択します。名前を選択すると、詳細ページが開きます。

  2. [Endpoint details (エンドポイントの詳細)] ページで、ノートブックサーバーの [HTTPS URL] という URL をコピーします。

  3. ウェブブラウザを開き、そのノートブックサーバー URL を貼り付けます。これにより、ポート 443 で HTTPS を使用してサーバーにアクセスできます。ブラウザがサーバーの証明書を認識しない場合があります。この場合、保護を上書きして続行する必要があります。

  4. ノートブックサーバーの作成時に指定したユーザー名とパスワードを使用して Zeppelin にログインします。

ノートブックの段落におけるシンプルスクリプトフラグメントの実行

  1. [Create new note] (新しいメモの作成) を選択して、それに「Legislators」という名前を付けます。sparkDefault Interpreter (デフォルトインタープリタ) であることを確認します。

  2. ステートメント spark.version を入力して実行することで、ノートブックが正しくセットアップされていることを検証できます。これは、ノートブックサーバーで実行されている Apache Spark のバージョンを返します。

  3. 次のスクリプトをノートブックの次の段落に入力して実行します。このスクリプトは、クローラが作成した persons_json テーブルからメタデータを読み取り、基になるデータから DynamicFrame を作成し、レコード数とデータのスキーマを表示します。

    %pyspark import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.transforms import * from awsglue.utils import getResolvedOptions # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about this data print "Count: ", persons_DyF.count() persons_DyF.printSchema()

    スクリプトの出力は以下のようになります。

    Count: 1961 root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- note: string | | |-- name: string | | |-- lang: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string