チュートリアル: Amazon EMR の使用開始 - Amazon EMR

チュートリアル: Amazon EMR の使用開始

概要

Amazon EMR を使用すると、ビッグデータフレームワークを使用してデータを処理および分析するクラスターをわずか数分でセットアップできます。このチュートリアルでは、Spark を使用してサンプルクラスターを起動する方法と、Amazon S3 バケットに格納された単純な PySpark スクリプトを実行する方法について説明します。計画と設定、管理、およびクリーンアップという 3 つの主要なワークフローカテゴリにおける Amazon EMR の必須タスクを取り上げます。

チュートリアルの途中には詳細なトピックへのリンクがあります。また、「次のステップ」セクションに追加手順の概要が記載されています。ご質問や不明点がある場合は、ディスカッションフォーラムに投稿して Amazon EMR チームにお問い合わせください。


				計画と設定、管理、およびクリーンアップの 3 つの主要なワークフローカテゴリの概要を示す Amazon EMR のワークフロー図。
前提条件
コスト
  • 作成するサンプルクラスターは、ライブ環境で実行されます。クラスターには最低料金が発生します。追加料金が発生しないように、このチュートリアルの最後の手順で必ずクリーンアップタスクを完了してください。料金は、Amazon EMR の料金に従って秒単位で発生します。料金はリージョンによっても異なります。詳細については、「Amazon EMR の料金」を参照してください。

  • Amazon S3 に保存する小さなファイルについて、最低料金が発生する場合があります。AWS 無料利用枠の使用限度内の場合、Amazon S3 の課金の一部またはすべてが免除される可能性があります。詳細については、「Amazon S3 の料金」と「AWS 無料利用枠」を参照してください。

ステップ 1: Amazon EMR クラスターを計画して設定する

Amazon EMR 用のストレージを準備する

Amazon EMR を使用するときに、入力データ、出力データ、およびログファイルの保存先をさまざまなファイルシステムから選択できます。このチュートリアルでは、EMRFS を使用して S3 バケットにデータを保存します。EMRFS は、Amazon S3 に対する通常のファイルの読み書きを可能にする Hadoop ファイルシステムの実装です。詳細については、「ストレージシステムとファイルシステムで作業する」を参照してください。

このチュートリアル用にバケットを作成するには、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットを作成する方法」に従ってください。バケットは、Amazon EMR クラスターを起動する AWS リージョンと同じリージョンに作成します。たとえば、米国西部 (オレゴン) の us-west-2 です。

Amazon EMR で使用するバケットとフォルダには次の制限があります。

  • 名前に使用できるのは、小文字、数字、ピリオド (.)、およびハイフン (-) のみです。

  • 名前の末尾を数字にすることはできません。

  • バケット名はすべての AWS アカウントで一意である必要があります。

  • 出力フォルダは空である必要があります。

Amazon EMR の入力データを使用してアプリケーションを準備する

Amazon EMR のアプリケーションを準備する最も一般的な方法は、アプリケーションとその入力データを Amazon S3 にアップロードすることです。次に、クラスターに作業内容を送信するときに、スクリプトとデータを保存する Amazon S3 の場所を指定します。

このステップでは、サンプルの PySpark スクリプトを Amazon S3 バケットにアップロードします。使用する PySpark スクリプトは用意されています。このスクリプトは食品施設の検査データを処理し、S3 バケットに結果ファイルを返します。結果ファイルには、「赤」タイプの違反が最も多い上位 10 施設がリストされます。

PySpark スクリプトで処理するサンプル入力データも Amazon S3 にアップロードします。入力データは、ワシントン州キング郡にある保健局の 2006~2020 年の検査結果の修正版です。詳細については、「King County Open Data: Food Establishment Inspection Data」を参照してください。データセットのサンプル行を次に示します。

name, inspection_result, inspection_closed_business, violation_type, violation_points 100 LB CLAM, Unsatisfactory, FALSE, BLUE, 5 100 PERCENT NUTRICION, Unsatisfactory, FALSE, BLUE, 5 7-ELEVEN #2361-39423A, Complete, FALSE, , 0
EMR 用の PySpark スクリプト例を準備するには
  1. 以下のコード例を任意のエディタの新しいファイルにコピーします。

    import argparse from pyspark.sql import SparkSession def calculate_red_violations(data_source, output_uri): """ Processes sample food establishment inspection data and queries the data to find the top 10 establishments with the most Red violations from 2006 to 2020. :param data_source: The URI of your food establishment data CSV, such as 's3://DOC-EXAMPLE-BUCKET/food-establishment-data.csv'. :param output_uri: The URI where output is written, such as 's3://DOC-EXAMPLE-BUCKET/restaurant_violation_results'. """ with SparkSession.builder.appName("Calculate Red Health Violations").getOrCreate() as spark: # Load the restaurant violation CSV data if data_source is not None: restaurants_df = spark.read.option("header", "true").csv(data_source) # Create an in-memory DataFrame to query restaurants_df.createOrReplaceTempView("restaurant_violations") # Create a DataFrame of the top 10 restaurants with the most Red violations top_red_violation_restaurants = spark.sql("""SELECT name, count(*) AS total_red_violations FROM restaurant_violations WHERE violation_type = 'RED' GROUP BY name ORDER BY total_red_violations DESC LIMIT 10""") # Write the results to the specified output URI top_red_violation_restaurants.write.option("header", "true").mode("overwrite").csv(output_uri) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument( '--data_source', help="The URI for you CSV restaurant data, like an S3 bucket location.") parser.add_argument( '--output_uri', help="The URI where output is saved, like an S3 bucket location.") args = parser.parse_args() calculate_red_violations(args.data_source, args.output_uri)
  2. health_violations.py という名前でファイルを保存します。

  3. health_violations.py を、このチュートリアル用に作成した Amazon S3 のバケットにアップロードします。手順については、「Amazon Simple Storage Service ユーザーガイド」の「バケットにオブジェクトをアップロードする」を参照してください。

EMR 用のサンプル入力データを準備するには
  1. zip ファイル food_establishment_data.zip をダウンロードします。

  2. food_establishment_data.zip を解凍し、ご使用のマシンに food_establishment_data.csv として保存します。

  3. この CSV ファイル を、このチュートリアル用に作成した S3 バケットにアップロードします。手順については、「Amazon Simple Storage Service ユーザーガイド」の「バケットにオブジェクトをアップロードする」を参照してください。

EMR 用データのセットアップに関する詳細は、「入力データを準備する」を参照してください。

Amazon EMR クラスターを起動する

ストレージの場所とアプリケーションを準備したら、サンプルの Amazon EMR クラスターを起動できます。このステップでは、最新の Amazon EMR リリースバージョンを使用して、Apache Spark クラスターを起動します。

New console
新しいコンソールを使用し、Spark がインストールされた状態でクラスターを起動するには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

  2. 左側のナビゲーションペインの [EMR on EC2] で、[クラスター] を選択し、[クラスターの作成] を選択します

  3. [クラスターの作成] ページで、[リリース][インスタンスタイプ][インスタンス数]、および [アクセス許可] のデフォルト値を書き留めます。これらのフィールドには、汎用クラスターで機能する値が自動的に入力されます。

  4. [クラスター名] フィールドに、クラスターを識別しやすい一意のクラスター名 (My first cluster など) を入力します。

  5. [アプリケーション] で、[Spark] オプションをクリックして、クラスターに Spark をインストールします。

    注記

    Amazon EMR クラスターを起動する前に、クラスターで必要なアプリケーションを選択してください。起動後は、クラスターに対するアプリケーションの追加や削除はできません。

  6. [クラスターログ] で、[クラスター固有のログを Amazon S3 に公開] チェックボックスを選択します。[Amazon S3 ロケーション] の値は、作成した Amazon S3 バケットに置き換え、その後に /logs を追加します。例えば、s3://DOC-EXAMPLE-BUCKET/logs です。/logs を追加すると、バケットに「logs」という新しいフォルダが作成されます。Amazon EMR によってここにクラスターのログファイルがコピーされます。

  7. [セキュリティ設定とアクセス許可] で、[EC2 キーペア] を選択します。同じセクションで、[Amazon EMR のサービスロール] ドロップダウンメニューを選択し、[EMR_DefaultRole] を選択します。次に、[インスタンスプロファイルの IAM ロール] ドロップダウンメニューを選択し、[EMR_EC2_DefaultRole] を選択します。

  8. [クラスターの作成] を選択して、クラスターを起動し、クラスターの詳細ページを開きます。

  9. クラスター名の横のクラスターの [ステータス] を見つけます。Amazon EMR によるクラスターのプロビジョニングに伴って、ステータスが [開始中] から [実行中]に、そして [待機中] に変わります。ステータスの更新を確認するには、右側にある更新アイコンを選択するか、ブラウザを更新する必要があります。

クラスターが起動して実行中になり、作業を受け付ける準備ができると、ステータスが [待機中] に変わります。クラスターの概要の読み込みの詳細については、「クラスターステータスと詳細の表示」を参照してください。クラスターのステータスの詳細については、「クラスターライフサイクルについて」を参照してください。

Old console
古いコンソールを使用し、Spark がインストールされた状態でクラスターを起動するには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [クラスターの作成] を選択して、クイックオプションウィザードを開きます。

  3. [クラスターの作成-クイックオプション] ページの [リリース][インスタンスタイプ][インスタンス数]、および[アクセス許可] のデフォルト値を書き留めます。これらのフィールドには、汎用クラスターで機能する値が自動入力されます。

  4. クラスターを見つけやすくするために、[クラスター名] を入力します。例えば、My first cluster です。

  5. [ログ記録] は有効なままにしますが、[S3 フォルダー] の値は、作成した Amazon S3 バケットに置き換え、その後に /logs を付けます。例えば、s3://DOC-EXAMPLE-BUCKET/logs です。/logs を追加すると、バケットに「logs」という新しいフォルダが作成されます。EMR によってここにクラスターのログファイルがコピーされます。

  6. [アプリケーション] の下の [Spark] オプションをクリックして、クラスターに Spark をインストールします。

    注記

    Amazon EMR クラスターを起動する前に、クラスターで必要なアプリケーションを選択してください。起動後は、クラスターに対するアプリケーションの追加や削除はできません。

  7. [セキュリティとアクセス] の下の [EC2 キーペア] を選択します。

  8. [クラスターの作成] を選択して、クラスターを起動し、クラスターのステータスページを開きます。

  9. クラスター名の横のクラスターの [ステータス] を見つけます。Amazon EMR によるクラスターのプロビジョニングに伴って、ステータスが [開始中] から [実行中]に、そして [待機中] に変わります。ステータスの更新を確認するには、右側にある更新アイコンを選択するか、ブラウザを更新する必要があります。

クラスターが起動して実行中になり、作業を受け付ける準備ができると、ステータスが [待機中] に変わります。クラスターの概要の読み込みの詳細については、「クラスターステータスと詳細の表示」を参照してください。クラスターのステータスの詳細については、「クラスターライフサイクルについて」を参照してください。

CLI
AWS CLI を使用し、Spark がインストールされたクラスターを起動するには
  1. 以下のコマンドを使用して、クラスターの作成に使用できる IAM のデフォルトロールを作成します。

    aws emr create-default-roles

    create-default-roles に関する詳細は、「AWS CLI Command Reference」を参照してください。

  2. 次のコマンドを使用して Spark クラスターを作成します。--name オプションを使用してクラスターの名前を入力し、--ec2-attributes オプションを使用して EC2 キーペアの名前を指定します。

    aws emr create-cluster \ --name "<My First EMR Cluster>" \ --release-label <emr-5.36.1> \ --applications Name=Spark \ --ec2-attributes KeyName=<myEMRKeyPairName> \ --instance-type m5.xlarge \ --instance-count 3 \ --use-default-roles

    その他の必須値 --instance-type--instance-count、および --use-default-roles にも注意してください。これらの値は、汎用クラスター向けに選択されています。create-cluster に関する詳細は、「AWS CLI Command Reference」を参照してください。

    注記

    読みやすくするために、Linux 行連続文字 (\) が含まれています。Linux コマンドでは、これらは削除することも、使用することもできます。Windows の場合、削除するか、キャレット (^) に置き換えてください。

    次のような出力が表示されます。新しいクラスターの ClusterIdClusterArn が出力に表示されます。ClusterId を書き留めてください。ClusterId は、クラスターのステータスの確認と、作業の送信に使用します。

    { "ClusterId": "myClusterId", "ClusterArn": "myClusterArn" }
  3. 次のコマンドを使用して、クラスターのステータスを確認します。

    aws emr describe-cluster --cluster-id <myClusterId>

    新しいクラスター用のオブジェクト Status がある次のような出力が表示されます。

    { "Cluster": { "Id": "myClusterId", "Name": "My First EMR Cluster", "Status": { "State": "STARTING", "StateChangeReason": { "Message": "Configuring cluster software" } } } }

    Amazon EMR によるクラスターのプロビジョニングに伴って、State 値が STARTING から RUNNING に、そして WAITING に変わります。

クラスターが起動して実行中になり、作業を受け付ける準備ができると、ステータスが WAITING に変わります。クラスターのステータスの詳細については、「クラスターライフサイクルについて」を参照してください。

ステップ 2: Amazon EMR クラスターを管理する

Amazon EMR に作業を送信する

クラスターを起動したら、データを処理して分析するために、実行中のクラスターに作業を送信できます。作業は、ステップとして Amazon EMR クラスターに送信します。ステップとは、1 つ以上のアクションで構成される作業の単位です。たとえば、値の計算や、データの転送と処理のためにステップを送信することが考えられます。ステップは、クラスターの起動時にも、実行中のクラスターに対しても送信できます。チュートリアルのこの部分では、実行中のクラスターにステップとして health_violations.py を送信します。ステップの詳細については、「クラスターへの作業の送信」を参照してください。

New console
新しいコンソールを使用してステップとして Spark アプリケーションを送信するには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

  2. 左側のナビゲーションペインの [EMR on EC2][クラスター] を選択し、作業を送信するクラスターを選択します。クラスターの状態は [待機中] である必要があります。

  3. [ステップ] タブを選択し、[ステップの追加] を選択します。

  4. 次のガイドラインに従ってステップを設定します。

    • [タイプ] で、[Spark アプリケーション] を選択します。[デプロイモード][アプリケーションの場所]、および [Spark-submit オプション] のフィールドが追加で表示されます。

    • [名前] に新しい名前を入力します。クラスターに多数のステップがある場合は、それぞれに名前を付けると追跡しやすくなります。

    • [デプロイモード] は、デフォルト値 [クラスターモード] のままにします。Spark のデプロイモードの詳細については、Apache Spark ドキュメントの「Cluster Mode Overview」を参照してください。

    • [アプリケーションの場所] には、Amazon S3 内の health_violations.py スクリプトの場所を入力します (s3://DOC-EXAMPLE-BUCKET/health_violations.py など)。

    • [Spark-submit オプション] フィールドは空白のままにします。spark-submit オプションの詳細については、「Launching applications with spark-submit」を参照してください。

    • [引数] フィールドに、次の引数と値を入力します。

      --data_source s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv --output_uri s3://DOC-EXAMPLE-BUCKET/myOutputFolder

      s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv を「Amazon EMR の入力データを使用してアプリケーションを準備する」で準備した入力データの S3 バケット URI に置き換えます。

      DOC-EXAMPLE-BUCKET をこのチュートリアル用に作成したバケットの名前に、myOutputFolder をクラスター出力フォルダの名前に置き換えます。

    • [ステップが失敗した場合のアクション] では、デフォルトのオプション [続行] を使用します。これにより、ステップが失敗してもクラスターは引き続き実行されます。

  5. [追加] を選択して、ステップを送信します。ステップが、[保留中] というステータスでコンソールに表示されます。

  6. ステップのステータスをモニタリングします。[保留中] から [実行中][完了] に変わります。コンソール内のステータスを更新するには、[フィルター] の右にある更新アイコンを選択します。スクリプトの実行には約 1 分間かかります。ステータスが [完了済み] に変わると、ステップは正常に完了しています。

Old console
古いコンソールを使用してステップとして Spark アプリケーションを送信するには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [Cluster List] (クラスターリスト) から、クラスターの名前を選択します。クラスターの状態は [待機中] である必要があります。

  3. [Steps (ステップ)]、[Add step (ステップの追加)] の順に選択します。

  4. 次のガイドラインに従ってステップを設定します。

    • [Step type] では、[Spark application] を選択します。[デプロイモード][Spark-submit オプション]、および[アプリケーションの場所] のフィールドが追加で表示されます。

    • [名前] はデフォルト値のままにするか、新しい名前を入力します。クラスターに多数のステップがある場合は、それぞれに名前を付けると追跡しやすくなります。

    • [デプロイモード] は、デフォルト値 [クラスター] のままにします。Spark のデプロイモードの詳細については、Apache Spark ドキュメントの「Cluster Mode Overview」を参照してください。

    • [Spark-submit オプション] フィールドは空白のままにします。spark-submit オプションの詳細については、「Launching applications with spark-submit」を参照してください。

    • [アプリケーションの場所] に、Amazon S3 内の health_violations.py スクリプトの場所を入力します。たとえば、s3: //DOC-EXAMPLE-BUCKET/health_violations.py です。

    • [引数] フィールドに、次の引数と値を入力します。

      --data_source s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv --output_uri s3://DOC-EXAMPLE-BUCKET/myOutputFolder

      s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv を「Amazon EMR の入力データを使用してアプリケーションを準備する」で準備した入力データの S3 URI に置き換えます。

      DOC-EXAMPLE-BUCKET をこのチュートリアル用に作成したバケットの名前に、myOutputFolder をクラスター出力フォルダの名前に置き換えます。

    • [失敗時の操作] でデフォルトのオプション [続行] を受け入れて、ステップが失敗した場合にクラスターが引き続き実行されるようにします。

  5. [追加] を選択して、ステップを送信します。ステップが、[保留中] というステータスでコンソールに表示されます。

  6. ステップのステータスが [保留中] から [実行中] に、そして [完了済み] に変わるのを確認します。コンソール内のステータスを更新するには、[フィルター] の右にある更新アイコンを選択します。スクリプトの実行には約 1 分間かかります。

ステータスが [完了済み] に変わることで、ステップが正常に終了したことがわかります。

CLI
AWS CLI を使用してステップとして Spark アプリケーションを送信するには
  1. Amazon EMR クラスターを起動する」で起動したクラスターの ClusterId がわかっていることを確認します。次のコマンドを使用して、クラスター ID を取得することもできます。

    aws emr list-clusters --cluster-states WAITING
  2. add-steps コマンドで ClusterId を指定して、ステップとして health_violations.py を送信します。

    • ステップの名前を指定するには、"My Spark Application" を置き換えます。Args 配列の s3://DOC-EXAMPLE-BUCKET/health_violations.pyhealth_violations.py アプリケーションの場所に置き換えます。

    • s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csvfood_establishment_data.csv データセットの S3 の場所に置き換えます。

    • s3://DOC-EXAMPLE-BUCKET/MyOutputFolder を、指定したバケットの S3 パスとクラスター出力フォルダの名前に置き換えます。

    • ActionOnFailure=CONTINUE は、ステップが失敗してもクラスターを引き続き実行することを指定します。

    aws emr add-steps \ --cluster-id <myClusterId> \ --steps Type=Spark,Name="<My Spark Application>",ActionOnFailure=CONTINUE,Args=[<s3://DOC-EXAMPLE-BUCKET/health_violations.py>,--data_source,<s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv>,--output_uri,<s3://DOC-EXAMPLE-BUCKET/MyOutputFolder>]

    CLI を使用したステップの送信の詳細については、「AWS CLI コマンドリファレンス」を参照してください。

    ステップを送信すると、StepIds がリストされた次のような出力が表示されます。ステップを 1 つ送信したので、1 つの ID のみがリストされます。ステップ ID をコピーします。ステップ ID は、ステップのステータスを確認するために使用します。

    { "StepIds": [ "s-1XXXXXXXXXXA" ] }
  3. describe-step コマンドを使用して、ステップのステータスのクエリを実行します。

    aws emr describe-step --cluster-id <myClusterId> --step-id <s-1XXXXXXXXXXA>

    ステップに関する情報が記載された、次のような出力が表示されます。

    { "Step": { "Id": "s-1XXXXXXXXXXA", "Name": "My Spark Application", "Config": { "Jar": "command-runner.jar", "Properties": {}, "Args": [ "spark-submit", "s3://DOC-EXAMPLE-BUCKET/health_violations.py", "--data_source", "s3://DOC-EXAMPLE-BUCKET/food_establishment_data.csv", "--output_uri", "s3://DOC-EXAMPLE-BUCKET/myOutputFolder" ] }, "ActionOnFailure": "CONTINUE", "Status": { "State": "COMPLETED" } } }

    ステップの State は、ステップの実行に伴って PENDING から RUNNING、さらには COMPLETED へと変わります。このステップの実行には約 1 分間かかるため、ステータスを数回確認することが必要な場合があります。

StateCOMPLETED に変わることで、ステップが正常に終了したことがわかります。

ステップのライフサイクルに関する詳細は、「ステップの実行によるデータの処理」を参照してください。

結果を表示する

ステップが正常に実行されると、Amazon S3 の出力フォルダで出力結果を表示できます。

health_violations.py の結果を表示するには
  1. Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

  2. [バケット名] を選択し、次に、ステップの送信時に指定した出力フォルダを選択します。たとえば、DOC-EXAMPLE-BUCKETMyOutputFolder の順に選択します。

  3. 出力フォルダーに次の項目が表示されることを確認します。

    • _SUCCESS という名前の小さなサイズのオブジェクト。

    • 結果が含まれている、プレフィックス part- で始まる CSV ファイル。

  4. 結果を含むオブジェクトを選択し、[ダウンロード] をクリックして結果をローカルファイルシステムに保存します。

  5. 任意のエディタで、結果を開きます。出力ファイルには、赤の違反が最も多い上位 10 施設がリストされます。出力ファイルには、各施設に対する赤の違反の総数も表示されます。

    health_violations.py 結果の例を次に示します。

    name, total_red_violations SUBWAY, 322 T-MOBILE PARK, 315 WHOLE FOODS MARKET, 299 PCC COMMUNITY MARKETS, 251 TACO TIME, 240 MCDONALD'S, 177 THAI GINGER, 153 SAFEWAY INC #1508, 143 TAQUERIA EL RINCONSITO, 134 HIMITSU TERIYAKI, 128

Amazon EMR クラスターの出力に関する詳細は、「出力場所を設定する」を参照してください。

Amazon EMR を使用する際に、ログファイルの読み取り、クラスターのデバッグ、または Spark シェルなどの CLI ツールの使用のために、実行中のクラスターへの接続が必要になることがあります。Amazon EMR では、Secure Shell (SSH) プロトコルを使用してクラスターに接続できます。このセクションでは、SSH の設定、クラスターへの接続、および Spark のログファイルの表示を行う方法について説明します。クラスターへの接続に関する詳細は、「Amazon EMR クラスターノードへのアクセス認証」を参照してください。

クラスターへの SSH 接続を許可する

クラスターに接続する前に、インバウンド SSH 接続を許可するようにクラスターセキュリティグループを変更する必要があります。Amazon EC2 セキュリティグループは、クラスターへのインバウンドトラフィックとアウトバウンドトラフィックを制御する仮想ファイアウォールとして機能します。このチュートリアルのためにクラスターを作成したとき、Amazon EMR によって次のセキュリティグループが作成されました。

ElasticMapReduce-master

プライマリノードに関連付けられているデフォルトの Amazon EMR マネージドセキュリティグループ。Amazon EMR クラスターでは、プライマリノードは、クラスターを管理する Amazon EC2 インスタンスです。

ElasticMapReduce-slave

コアノードとタスクノードに関連付けられているデフォルトのセキュリティグループ。

New console
新しいコンソールで、プライマリセキュリティグループの信頼できるソースへの SSH アクセスを許可するには

セキュリティグループを編集するには、クラスターが存在する VPC のセキュリティグループを管理する権限が必要です。詳細については、「IAM ユーザーガイド」の「IAM ユーザーのアクセス許可の変更」と、EC2 セキュリティグループを管理できるようにする「ポリシーの例」を参照してください。

  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

  2. 左側のナビゲーションペインの [EMR on EC2][クラスター] を選択し、更新するクラスターを選択します。選択すると、クラスターの詳細ページが開きます。このページの [プロパティ] タブは事前に選択されます。

  3. [プロパティ] タブの [ネットワーク] で、[EC2 セキュリティグループ (ファイアウォール)] の横にある矢印を選択してこのセクションを展開します。[プライマリノード] で、セキュリティグループリンクを選択します。以下の手順を完了したら、必要に応じてこのステップに戻り、[コアノードとタスクノード] を選択し、以下の手順を繰り返して SSH クライアントがコアノードとタスクノードにアクセスできるようにします。

  4. これにより、EC2 コンソールが開きます。[Inbound rules] (インバウンドルール) タブを選択し、[Edit inbound rules] (インバウンドルールの編集) を選択します。

  5. 次の設定で、パブリックアクセスを許可するインバウンドルールを確認します。存在する場合は、[Delete] (削除) をクリックして削除します。

    • タイプ

      SSH

    • ポート

      22

    • ソース

      Custom 0.0.0.0/0

    警告

    2020 年 12 月以前は、ElasticMapReduce-master セキュリティグループには、ポート 22 ですべての送信元からのインバウンドトラフィックを許可するルールが事前に設定されていました。このルールは、マスターノードへの最初の SSH 接続を簡素化するために作成されたものです。このインバウンドルールを削除して、信頼できる送信元のみにトラフィックを制限することを強くお勧めします。

  6. ルールのリストの下部までスクロールし、[Add Rule] (ルールの追加) を選択します。

  7. [Type (タイプ)] で、[SSH] を選択します。SSH を選択すると、[Protocol] (プロトコル) に [TCP] が、[Port Range] (ポート範囲) に [22] が自動的に入力されます。

  8. [source] (送信元) には、[My IP] (マイ IP) を選択して、IP アドレスを送信元アドレスとして自動的に追加します。[Custom] (カスタム) で信頼済みクライアントの IP アドレスの範囲を追加することも、他のクライアントに追加のルールを作成することもできます。多くのネットワーク環境では IP アドレスを動的に割り当てるため、将来的に信頼済みクライアントの IP アドレスを更新することが必要になる場合があります。

  9. [Save (保存)] を選択します。

  10. オプションで、[コアノードとタスクノード] をリストから選択し、上記の手順を繰り返して、コアノードとタスクノードへの SSH クライアントアクセスを許可します。

Old console
古いコンソールで信頼できるソースにプライマリセキュリティグループへの SSH アクセス許可を付与するには

セキュリティグループを編集するには、クラスターが存在する VPC のセキュリティグループを管理する権限が必要です。詳細については、「IAM ユーザーガイド」の「IAM ユーザーのアクセス許可の変更」と、EC2 セキュリティグループを管理できるようにする「ポリシーの例」を参照してください。

  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [Clusters] を選択します。変更するクラスターの [Name] (名前) を選択します。

  3. [Security and access] (セキュリティとアクセス) の下の [Security groups for Master] (マスターのセキュリティグループ) リンクを選択します。

  4. リストから [ElasticMapReduce-master] を選択します。

  5. [Inbound rules] (インバウンドルール) タブを選択し、[Edit inbound rules] (インバウンドルールの編集) を選択します。

  6. 次の設定で、パブリックアクセスを許可するインバウンドルールを確認します。存在する場合は、[Delete] (削除) をクリックして削除します。

    • タイプ

      SSH

    • ポート

      22

    • ソース

      Custom 0.0.0.0/0

    警告

    2020 年 12 月以前は、ElasticMapReduce-master セキュリティグループには、ポート 22 ですべての送信元からのインバウンドトラフィックを許可するルールが事前に設定されていました。このルールは、プライマリノードへの最初の SSH 接続を簡素化するために作成されたものです。このインバウンドルールを削除して、信頼できる送信元のみにトラフィックを制限することを強くお勧めします。

  7. ルールのリストの下部までスクロールし、[Add Rule] (ルールの追加) を選択します。

  8. [Type (タイプ)] で、[SSH] を選択します。

    SSH を選択すると、[Protocol] (プロトコル) に [TCP] が、[Port Range] (ポート範囲) に [22] が自動的に入力されます。

  9. [source] (送信元) には、[My IP] (マイ IP) を選択して、IP アドレスを送信元アドレスとして自動的に追加します。[Custom] (カスタム) で信頼済みクライアントの IP アドレスの範囲を追加することも、他のクライアントに追加のルールを作成することもできます。多くのネットワーク環境では IP アドレスを動的に割り当てるため、将来的に信頼済みクライアントの IP アドレスを更新することが必要になる場合があります。

  10. [Save (保存)] を選択します。

  11. オプションで、[ElasticMapReduce-slave] をリストから選択し、上記の手順を繰り返して、コアノードとタスクノードへの SSH クライアントアクセスを許可します。

AWS CLI を使用してクラスターに接続する

AWS CLI を使用すると、オペレーティングシステムに関係なく、クラスターへの SSH 接続を作成できます。

AWS CLI を使用してクラスターに接続し、ログファイルを表示するには
  1. 次のコマンドを使用して、クラスターへの SSH 接続を開きます。<mykeypair.key> を、キーペアファイルの完全修飾パスとファイル名に置き換えてください。例えば、C:\Users\<username>\.ssh\mykeypair.pem です。

    aws emr ssh --cluster-id <j-2AL4XXXXXX5T9> --key-pair-file <~/mykeypair.key>
  2. /mnt/var/log/spark に移動して、クラスターのマスターノード上の Spark ログにアクセスします。次に、その場所にあるファイルを表示します。マスターノード上の追加のログファイルのリストについては、「プライマリノードのログファイルを表示する」を参照してください。

    cd /mnt/var/log/spark ls

ステップ 3: Amazon EMR リソースをクリーンアップする

クラスターを終了する

クラスターに作業を送信し、PySpark アプリケーションの結果を表示したので、クラスターを終了できます。クラスターを終了すると、クラスターに関連付けられているすべての Amazon EMR 料金と Amazon EC2 インスタンスが停止します。

クラスターを終了しても、Amazon EMR ではクラスターに関するメタデータが 2 か月間無料で保持されます。アーカイブされたメタデータは、新しいジョブのためのクラスターのクローン作成や、参照目的でのクラスター設定への再アクセスに便利です。メタデータには、クラスターが S3 に書き込むデータや、クラスターの HDFS に格納されるデータは含まれません

注記

クラスターを終了した後に、Amazon EMR コンソールでリストビューからクラスターを削除することはできません。Amazon EMR によってメタデータがクリアされると、終了したクラスターがコンソールから消えます。

New console
新しいコンソールを使用してクラスターを終了するには
  1. AWS Management Consoleにサインインし、Amazon EMR コンソール (https://console.aws.amazon.com/emr) を開きます。

  2. [クラスター] を選択し、終了するクラスターを選択します。

  3. [アクション] ドロップダウンメニューで、[クラスターの終了] を選択します。

  4. ダイアログボックスで、[終了] を選択します。クラスター設定によっては、終了に 5~10 分間かかる場合があります。Amazon EMR クラスターの終了に関する詳細は、「クラスターを終了する」を参照してください。

Old console
古いコンソールを使用してクラスターを終了するには
  1. 新しい Amazon EMR コンソールに移動し、サイドナビゲーションから [古いコンソールに切り替え] を選択します。古いコンソールに切り替えたときの動作の詳細については、「Using the old console」を参照してください。

  2. [クラスター] を選択し、終了するクラスターを選択します。たとえば、My First EMR Cluster です。

  3. [終了] を選択して、[クラスターを終了] プロンプトを開きます。

  4. 開いたプロンプトで [終了] を選択します。クラスター設定によっては、終了に 5~10 分間かかる場合があります。Amazon EMR クラスターの終了に関する詳細は、「クラスターを終了する」を参照してください。

    注記

    チュートリアルに厳密に従った場合、終了保護はオフになります。クラスターの終了保護では、偶発的な終了が防止されます。終了保護がオンの場合は、クラスターを終了する前に設定の変更を求めるプロンプトが表示されます。[変更] を選択し、[オフ] を選択します。

CLI
AWS CLI を使用してクラスターを終了するには
  1. 次のコマンドを使用して、クラスターの終了プロセスを開始します。<myClusterId> をサンプルクラスターの ID に置き換えます。このコマンドでは、出力は返されません。

    aws emr terminate-clusters --cluster-ids <myClusterId>
  2. クラスターの終了プロセスが進行中であることを確認するために、次のコマンドでクラスターのステータスを確認します。

    aws emr describe-cluster --cluster-id <myClusterId>

    JSON 形式の出力例を次に示します。クラスターの StatusTERMINATING から TERMINATED に変わります。クラスター設定によっては、終了に 5~10 分間かかる場合があります。Amazon EMR クラスターの終了に関する詳細は、「クラスターを終了する」を参照してください。

    { "Cluster": { "Id": "j-xxxxxxxxxxxxx", "Name": "My Cluster Name", "Status": { "State": "TERMINATED", "StateChangeReason": { "Code": "USER_REQUEST", "Message": "Terminated by user request" } } } }

S3 リソースを削除する

追加料金が発生しないように、Amazon S3 バケットを削除する必要があります。バケットを削除すると、このチュートリアル用のすべての Amazon S3 リソースが削除されます。バケットに含まれている内容は次のとおりです。

  • PySpark スクリプト

  • 入力データセット

  • 出力結果フォルダ

  • ログファイルフォルダ

PySpark スクリプトや出力を別の場所に保存した場合は、格納したファイルを削除するために追加の手順が必要になる場合があります。

注記

バケットを削除する前に、クラスターを終了する必要があります。そうしないと、バケットを空にできない可能性があります。

バケットを削除するには、「Amazon Simple Storage Service ユーザーガイド」の「S3 バケットを削除する方法」に従ってください。

次のステップ

これで、最初の Amazon EMR クラスターの起動を最初から最後まで実行しました。ビッグデータアプリケーションの準備と送信、結果の表示、クラスターの終了などの、必須 EMR タスクも完了しました。

以降のトピックでは、Amazon EMR ワークフローをカスタマイズする方法について詳しく説明します。

Amazon EMR のビッグデータアプリケーションについて調べる

Amazon EMR リリース ガイド」で、クラスターにインストールできるビッグデータアプリケーションを確認し、比較します。リリースガイドには、各 EMR リリースバージョンの詳細と、Amazon EMR で Spark や Hadoop などのフレームワークを使用するためのヒントが記載されています。

クラスターのハードウェア、ネットワーク、およびセキュリティを計画する

このチュートリアルでは、詳細オプションを設定せずにシンプルな EMR クラスターを作成しました。詳細オプションでは、Amazon EC2 インスタンスタイプ、クラスターネットワーク、およびクラスターセキュリティを指定できます。要件を満たすクラスターの計画と起動に関する詳細は、「クラスターの計画と設定」と「Amazon EMR でのセキュリティ」を参照してください。

クラスターを管理する

クラスターを管理する」で、実行中のクラスターの操作について詳しく説明しています。クラスターを管理するために、クラスターに接続し、ステップをデバッグし、クラスターのアクティビティと状態を追跡できます。EMR マネージドスケーリングを使用して、ワークロードの需要に応じてクラスターリソースを調整することもできます。

別のインターフェースを使用する

Amazon EMR コンソールに加えて、AWS Command Line Interface、ウェブサービス API、またはサポートされている多くの AWS SDK のいずれかを使用して、Amazon EMR を管理できます。詳細については、「管理インターフェイス」を参照してください。

Amazon EMR クラスターにインストールされているアプリケーションと、さまざまな方法でやり取りすることもできます。Apache Hadoop のようないくつかのアプリケーションでは、表示可能なウェブインターフェイスを公開しています。詳細については、「Amazon EMR クラスターでホストされているウェブインターフェイスを表示する」を参照してください。

EMR テクニカルブログを参照する

新しい Amazon EMR 機能のサンプルチュートリアルと詳細な技術説明については、「AWS Big Data Blog」を参照してください。