Amazon Web Services ブログ

EMR Notebooks: Jupyter ノートブックをベースとしたマネージド型分析環境

ノートブックは、インタラクティブにビッグデータアプリケーションを開発するための標準ツールとなりつつありますが、その理由は簡単に想像がつきます。柔軟性のあるアーキテクチャは、複数言語でのデータの実験、インタラクティブなコードのテスト、そして大規模データセットの可視化を可能にしてくれます。科学者と開発者がノートブックツールに簡単にアクセスできるように、AWS は Amazon EMR ノートブックのサービスを開始しました。これは、人気のあるオープンソースアプリケーション、Jupyter ノートブックをベースとしたマネージド型ノートブック環境です。EMR Notebooks は Spark Magic カーネルをサポートし、このカーネルは PySpark、Spark SQL、Spark R、および Scala といった言語を使用して、EMR クラスターにジョブをリモートで送信することができます。Spark Magic カーネルは、クラスターで実行される Spark の REST サーバーである Apache Livy 経由で Spark コードを送信します。

EMR Notebooks は、Apache Spark でのアプリケーションの実験と構築を容易にするように設計されています。このブログ記事では、まず EMR Notebooks が提供するいくつかのメリットについてお話しします。その後、異なる EMR クラスターへのノートブックのアタッチとデタッチ、ノートブック内からの Spark アクティビティの監視、ユーザーアクセス許可を制御するためのタグの使用、およびノートブックユーザーとそのアクションを追跡するためのユーザー偽装のセットアップなどの機能をいくつかご紹介します。EMR Notebooks の作成と使用について学ぶには、「Amazon EMR ノートブックの使用」にアクセスする、または AWS オンラインテックトークのオンラインセミナーの手順に従うことができます。

EMR Notebooks のメリット

EMR Notebooks の便利な機能のひとつは、基礎となるクラスターインフラストラクチャからのノートブック環境の分離です。この分離は、新しいクラスターを起動するたびにノートブックをデプロイまたは設定する作業に煩わされることなく、一時的なクラスターに対してノートブックコードを簡単に実行できるようにしてくれます。SSH アクセスをセットアップするための時間を費やしたり、ポートフォワーディングのためにブラウザを設定したりすることなく、EMR の AWS マネジメントコンソールから複数のサーバーレスノートブックを作成して、ノートブック UI にアクセスすることができます。作成するノートブックは、それぞれ独自の Spark コンテキストで即座に起動されます。この機能は、マルチテナント環境でのジョブの競合について心配することなく、単一の共有クラスターに複数のノートブックをアタッチし、並列ジョブを送信することを可能にします。こうして、クラスターを効率的に使用できます。

最小で 1 ノードの EMR クラスターに EMR Notebooks を接続することも可能です。これは、Spark アプリケーションを開発するための予算に優しいサンドボックス環境を提供します。

最後に、EMR Notebooks では、ファイルを永続的に保存するためにノートブックを手動で設定する時間を取る必要がありません。ノートブックファイルは、選択した Amazon S3 バケットに定期的に自動で保存されるため、クラスターがシャットダウンしても作業を失う心配がありません。保存されたノートブックはコンソールから取得、または Jupyter の「ipynb」形式で S3 バケットからローカルにダウンロードできます。

異なるクラスターに対する EMR Notebooks のデタッチとアタッチ

EMR Notebooks では、アクティブなノートブックをクラスターからデタッチして別のクラスターにアタッチし、作業を速やかに再開することができます。この機能は、ノートブックをサンドボックス開発のクラスターから本番環境に移動させる、または適切な CPU もしくはメモリのリソースと、大規模データセットに対してノートブックを実行するために必要なライブラリパッケージを備えた異なるクラスターにノートブックをアタッチするといったシナリオで役に立ちます。アクティブなノートブックをデタッチするには、次の手順を実行します。

まず、ノートブック名を選択してから [停止] を選択します。

ノートブック名の横に表示されているノートブックステータスが準備完了から停止に変わるのを待ってから、[クラスターの変更] を選択します。

ノートブックを停止したら、それを同じ VPC 内にある異なるクラスターにアタッチする、または新しいクラスターを作成することができます。EMR Notebooks は、自動でそのノートブックをクラスターにアタッチし、ノートブックを再開します。

Spark ジョブのモニタリングとデバッグ

EMR Notebooks は、SparkMonitor と呼ばれる組み込み型の Jupyter ノートブックウィジェットをサポートします。このウィジェットは、Spark の Web UI サーバーに接続することなく、ノートブックから開始されたすべての Spark ジョブのステータスを監視できるようにします。

ウィジェットはノートブックのセル構造内で表示および自動統合され、ノートブックの各セルから送信されたジョブに関する詳細ステータスを表示することで、ジョブの異なるステージのリアルタイムでの進捗状況を提供します。失敗したジョブについては、ウィジェットが Amazon S3 にあるコンテナログへの埋め込みリンクも提供するので、関連ログにアクセスしてジョブをデバッグすることができます。

さらに、SSH 接続を許可するようにクラスターを設定した場合、ノートブック内から Spark アプリケーションの Web UI と Hadoop のジョブ履歴サーバーにアクセスできます。これにより、コードを調べてデバッグするために、イベントタイムラインの表示、各ジョブの有向非巡回グラフ (DAG) の可視化、およびシステムとランタイムの詳細情報の表示を行うことが可能になります。これらの Web UI は、ノートブックから初めて Spark コードを実行するときに、自動的に利用できるようになります。

ノートブックとユーザー対するユーザーアクセス許可を制御するためのタグベースのポリシーの記述

EMR Notebooks はデフォルトで、ユーザーが使用する AWS アカウントへのアクセス権を持つ組織内の誰もが開き、編集して、削除することさえもできる共有リソースです。ノートブックの管理を強化したい場合は、ノートブックにラベルを付けて、他のユーザーのアクセスを制御する IAM ポリシーを作成するためにタグを使用することができます。これを開始できるように、ノートブックの作成時、キー文字列 creatorUserId を使ったデフォルトタグが、ノートブックを作成したユーザーの IAM ユーザー ID の値に設定されます。

このタグを使って、ノートブックで許可されるアクションをノートブックの作成者のみに限定できます。例えば、以下のアクセス許可ポリシー文がロールまたはユーザーにアタッチされると、IAM ユーザーは自分が作成したノートブックしか表示、開始、停止、編集、または削除できなくなります。このポリシー文は、ノートブックを作成したときに EMR Notebooks によって適用されたデフォルトタグを使用します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "elasticmapreduce:DescribeEditor",
                "elasticmapreduce:StartEditor",
                "elasticmapreduce:StopEditor",
                "elasticmapreduce:DeleteEditor",
                "elasticmapreduce:OpenEditorInConsole"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:ResourceTag/creatorUserId": "${aws:userId}"
                }
            }
        }
    ]

ノートブックを開始する前に、タグの作成を実施するポリシーを作成できます。例えば、以下のポリシーは、デフォルトで追加された creatorUserID タグをユーザーが変更したり削除したりしないことを必須にします。変数 ${aws:userId} は、現在アクティブなユーザーのユーザー ID (このタグのデフォルト値) を指定します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "elasticmapreduce:CreateEditor"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:RequestTag/creatorUserId": "${aws:userid}"
                }
            }
        }
    ]
}

ノートブックタグを EMR クラスタータグと共に使用して、クラスターへのノートブックユーザーのアクセスを制御できます。ノートブックとクラスターにタグ付けすると、リソースのセキュア化に加えて、異なる事業部門にまたがって EMR クラスターのコストを分類、追跡、および割り当てることもできます。例えば、以下のポリシーは、値が「Analytics」に設定されたキー文字列「department」を使うタグをノートブックが持っており、かつ値が「12345」に設定されたキー文字列「cost-center」を使うタグを持つ EMRクラスターにそのノートブックがアタッチされている場合に限り、ノートブックの作成をユーザーに許可します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "elasticmapreduce:StartEditor"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:elasticmapreduce:*:123456789012:editor/*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:ResourceTag/department": [
                        "Analytics"
                    ]
                }
            }
        },
        {
            "Action": [
                "elasticmapreduce:StartEditor"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:elasticmapreduce:*:123456789012:cluster/*",
            "Condition": {
                "StringEquals": {
                    "elasticmapreduce:ResourceTag/cost-center": [
                        "12345"
                    ]
                }
            }
        }
    ]
}

ノートブックとクラスターのタグの詳細については、「タグを使用したユーザーアクセス権限の制御」および「タグクラスター」をご覧ください。また、AWS 請求情報とコスト管理コンソールでコスト配分レポートを生成するためのタグの使用に関する詳細については、「コスト配分タグの使用」をご覧ください。

ユーザー偽装の実施によるノートブックユーザーの追跡

EMR Notebooks は、複数のユーザーが共有 EMR クラスター内でそれぞれのノートブックのコードを同時に実行することを可能にし、クラスターの利用率を向上させます。デフォルトで、これらの異なるユーザーによってそれぞれのノートブックから起動されたすべての Spark ジョブは、EMR クラスター上で同一ユーザー (Livy ユーザー) として実行されます。会社の方針によって、監査証跡をセットアップし、共有クラスターで個々のノートブックユーザーアクションを追跡することが義務付けられている場合は、EMR Notebooks のユーザー偽装機能を使用できます。この機能は、ノートブックユーザーがそれぞれのノートブックから実行したジョブをユーザーの IAM アイデンティティに関連付けることによって、すべてのノートブックユーザーを区別し、監査することを可能にします。この機能を使用するには、以下にある通り、EMR クラスターを作成して起動する時に core-site および livy-conf 設定分類を設定することによって、Livy ユーザー偽装を有効化する必要があります。

[
    {
        "Classification": "core-site",
        "Properties": {
          "hadoop.proxyuser.livy.groups": "*",
          "hadoop.proxyuser.livy.hosts": "*"
        }
    },
    {
        "Classification": "livy-conf",
        "Properties": {
          "livy.impersonation.enabled": "true"
        }
    }
]

アプリケーションの設定に関する詳細については、「アプリケーションの設定」をご覧ください。この機能を有効化すると、EMR Notebooks が、各ユーザーアイデンティティについてマスターノードに HDFS ユーザーディレクトリを作成します。これは、ノートブックからのすべての Spark ジョブが、不特定のユーザー livy ではなく、IAM ユーザーとして実行されることを意味します。例えば、NB_User1 というユーザーがノートブックエディタからコードを実行すると、マスターノードに user_NB_User1 という名前のユーザーディレクトリが作成され、すべての Spark ジョブが user_NB_User1 として実行されます。その後、証跡を作成することでユーザー NbUser1 によるアクションの記録を監査するために、AWS CloudTrail などのサービスを使用することができます。監査証跡のセットアップに関する詳細については、「AWS CloudTrail での Amazon EMR API 呼び出しのログ記録」を参照してください。

結論

この記事では、クラスターの変更、各ノートブックセルからの Spark ジョブの監視、ユーザーアクセス許可の制御、およびリソースコストの分類を行う機能などの EMR Notebooks の機能をいくつか取り上げました。これは、ノートブックとクラスタータグを使用し、ノートブックユーザーのアクションを追跡するためにユーザー偽装をセットアップすることで実行できます。

なお、料金はいつもの通り EMR クラスターの使用料金を支払うだけで、EMR Notebooks の使用に追加料金はかかりません!

質問または提案などがありましたら、ぜひコメントを残してください。

 


著者について

Vignesh Rajamani は、AWS における EMR のシニアプロダクトマネージャーです。

 

 

 

 

Nikki Rouda は、AWS におけるデータレイクとビッグデータのプリンシパルプロダクトマーケティングマネージャーです。Nikki は 20 年以上に渡って、分析および IT インフラストラクチャの課題に対するソリューションを開発して実装するために、40 以上もの国々の企業を助けてきました。Nikki は、ケンブリッジ大学から MBA を取得し、ブラウン大学から地球物理学と数学の理学士号を取得しています。