「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
チュートリアル: の開始方法Amazon EMR
Overview
では、ビッグデータフレームワークを使用してデータを処理および分析するためのクラスターを数分で設定できます。Amazon EMRこのチュートリアルでは、Spark を使用してサンプルクラスターを起動する方法と、Amazon S3 バケットに保存する単純な PySpark スクリプトを実行する方法について説明します。3 つの主要なワークフローカテゴリ (計画と構成、管理、クリーンアップ) で主要な Amazon EMR タスクについて説明します。このプロセスを独自のワークロードに適応させることもできます。
![[計画] と [構成]、[管理]、および [クリーンアップ] の 3 つの主要なワークフローカテゴリの概要を示す、Amazon EMR のワークフロー図。](images/emr-workflow.png)
Prerequisites
-
クラスターを起動する前に、「Amazon EMR」のタスクを完了していることを確認します。 のセットアップAmazon EMR
このチュートリアルでは、以下の Amazon EMR タスクについて説明します。
このチュートリアルを進める際により詳細なトピックへのリンクと、「次のステップ」セクションで追加のステップのアイデアを紹介します。ご質問がある場合や問題が発生した場合は、Amazon EMRディスカッションフォーラムの
Cost
-
作成するサンプルクラスターは、ライブ環境で実行されます。クラスターは最小限の料金が発生し、クリーンアップタスクを完了しない限り、このチュートリアルの期間中のみ実行されます。料金は Amazon EMR 料金の 1 秒あたりのレートで発生し、リージョンによって異なります。詳細については、「Amazon EMR 料金表
.」を参照してください。 -
チュートリアルの Amazon S3 に保存する小さいファイルに対しても最小限の料金が発生する場合があります。無料利用枠の使用制限内である場合、Amazon S3 の料金の一部またはすべてが免除される可能性があります。AWS詳細については、「Amazon S3 料金表
」および「AWS 無料利用枠 .」を参照してください。
ステップ 1: Amazon EMR クラスターの計画と設定
このステップでは、Apache Spark がインストールされたシンプルな Amazon EMR クラスターを計画して起動します。セットアッププロセスには、サンプルの PySpark スクリプト、入力データセット、クラスター出力を保存する Amazon S3 バケットの作成が含まれます。
クラスターの入出力のためのストレージの準備
PySpark スクリプト例、入力データ、出力データを保存する Amazon S3 バケットを作成します。クラスターを起動する予定の AWS リージョンと同じリージョンにバケットを作成します。Amazon EMRたとえば、米国西部 (オレゴン) us-west-2 です。で使用するバケットとフォルダには、次の制限があります。Amazon EMR
-
名前は、小文字、数字、ピリオド (.)、およびハイフン (-) のみで構成できます。
-
名前を数字で終わることはできません。
-
バケット名はすべての AWS アカウントで一意である必要があります。
-
出力フォルダは空である必要があります。
このチュートリアル用のバケットを作成するには、 コンソールユーザーガイドの「S3 バケットを作成する方法Amazon Simple Storage Service」を参照してください。
用のアプリケーションを開発して準備するAmazon EMR
このステップでは、PySpark スクリプトのサンプルを Amazon S3 にアップロードします。これは、Amazon EMR のアプリケーションを準備する最も一般的な方法です。EMR では、作業をクラスターに送信するときに、スクリプトの Amazon S3 の場所を指定することができます。また、PySpark スクリプトが処理するサンプル入力データを Amazon S3 にアップロードします。
以下の PySpark スクリプトが提供されています。このスクリプトは、食品の確立検査データを処理し、最も「Red」タイプの違反が多い上位 10 件の施設をリストアップしたファイルを S3 バケットに出力します。
EMR 用の PySpark スクリプト例を準備するには
-
以下のコード例を、任意のエディタの新しいファイルにコピーします。
-
という名前でファイルを保存します。
health_violations.py
. -
このチュートリアルで指定したバケットに
health_violations.py
を Amazon S3 にアップロードします。オブジェクトを Amazon S3 にアップロードする方法については、Amazon Simple Storage Service 入門ガイドの「バケットへのオブジェクトのアップロード」を参照してください。
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 where the food establishment data CSV is saved, typically an Amazon S3 bucket, such as 's3://DOC-EXAMPLE-BUCKET/food-establishment-data.csv'. :param output_uri: The URI where the output is written, typically an Amazon S3 bucket, 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 where the CSV restaurant data is saved, typically an S3 bucket.") parser.add_argument( '--output_uri', help="The URI where output is saved, typically an S3 bucket.") args = parser.parse_args() calculate_red_violations(args.data_source, args.output_uri)
入力引数
PySpark スクリプトをステップとして実行するときは、次の引数の値を含める必要があります。
-
--data_source
- 食品確定データ CSV ファイルの Amazon S3 URI。このファイルは以下で準備します。 -
--output_uri
- 出力結果が保存される Amazon S3 バケットの URI。
入力データは、Health Department 検査結果が、ワシントン州の King County (2006 から 2020 まで) にある、公開されている食品確定検査データセットの修正バージョンです。詳細については、「King County Open Data: Standard Authorization 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 のサンプル入力データを準備するには
-
zip ファイル face_estabilities_data.zip をダウンロードします。
-
コンテンツを解凍し、 としてローカルに保存します。
food_establishment_data.csv
. -
このチュートリアル用に作成した S3 バケットに CSV ファイルをアップロードします。詳細な手順については、 コンソールユーザーガイドの「S3 バケットにファイルとフォルダをアップロードする方法Amazon Simple Storage Service」を参照してください。
EMR のデータ設定の詳細については、「Prepare Input Data」を参照してください。
クラスターを起動するAmazon EMR
これで事前作業は完了です。最新の Amazon EMR リリースを使用して、Apache Spark がインストールされたサンプルクラスターを起動できます。
2013 年 12 月 4 日以降に AWS アカウントを作成した場合は、何も指定されていないときに、Amazon EMR によって、選択したリージョンのデフォルトの Amazon Virtual Private Cloud (VPC) にクラスターが設定されます。
クラスターの概要の読み込みの詳細については、「」を参照してください。クラスターステータスおよび詳細の確認. クラスターステータスの詳細については、「クラスターライフサイクルについて」を参照してください。
ステップ 2: Amazon EMR クラスターを管理する
これでクラスターが起動して実行中になったので、クラスターに接続して管理できます。また、実行中のクラスターに作業を送信して、データを処理および分析することもできます。
への作業の送信Amazon EMR
クラスターを起動して実行することで、health_violations.py
ステップとして を送信できます。ステップとは、1 つ以上のジョブで構成されるクラスター作業の単位です。たとえば、値の計算、またはデータの転送と処理のステップを送信する場合があります。
クラスターを作成するとき、またはクラスターがすでに実行されているときに、クラスターで一連のタスクを実行する複数のステップを送信できます。詳細については、「」を参照してください。クラスターへの作業の送信.
ステップライフサイクルの詳細については、「ステップの実行によるデータの処理」を参照してください。
結果の表示
ステップが正常に実行されたら、ステップの送信時に指定した Amazon S3 出力フォルダにその出力結果を表示できます。
の結果を表示するにはhealth_violations.py
-
https://console.aws.amazon.com/s3/
にある Amazon S3 コンソールを開きます。 -
[バケット名] を選択し、ステップの送信時に指定した出力フォルダを選択します。たとえば、
DOC-EXAMPLE-BUCKET
次にmyOutputFolder
. -
次の項目が出力フォルダにあることを確認します。
-
と呼ばれる小さなオブジェクト。ステップの成功を示します。
_SUCCESS
-
プレフィックス
part-
で始まる CSV ファイル。これは結果を含むオブジェクトです。
-
-
結果を含むオブジェクトを選択し、[ダウンロード] を選択してローカルファイルシステムに保存します。
-
適切なエディタで結果を開きます。出力ファイルには、最も多くの Red 違反を持つ上位 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」を参照してください。Configure an Output Location
(オプション) クラスター接続の設定
このステップは必須ではありませんが、コマンドの発行、アプリケーションのインタラクティブな実行、ログファイルの読み取りなどのタスク用に、Secure Shell (SSH) を使用してクラスターノードに接続するオプションがあります。
セキュリティグループルールの設定
クラスターに接続する前に、SSH 接続を許可するようにポート 22 インバウンドルールを設定する必要があります。
セキュリティグループは、仮想ファイアウォールとして機能し、クラスターへのインバウンドトラフィックとアウトバウンドトラフィックをコントロールします。デフォルトのセキュリティグループを使用してクラスターを作成すると、Amazon EMR によって以下のグループが作成されます。
- ElasticMapReduce-master
-
マスターインスタンスに関連付けられたデフォルトの Amazon EMR マネージドセキュリティグループ。
- ElasticMapReduce-slave
-
コアノードとタスクノードに関連付けられたデフォルトのセキュリティグループ。
ElasticMapReduce-master セキュリティグループの信頼できるソースの SSH アクセスを許可するには
まず、AWS に root ユーザーとしてログインするか、クラスターが存在する VPC でセキュリティグループの管理を許可された IAM プリンシパルとしてログインする必要があります。詳細については、「ユーザーのアクセス権限の変更」と、IAM ユーザーガイド の EC2 セキュリティグループの管理を許可する「サンプルポリシー」を参照してください。
-
Amazon EMR コンソール (https://console.aws.amazon.com/elasticmapreduce/
) を開きます。 -
[Clusters] を選択します。
-
クラスターの [Name (名前)] を選択します。
-
[Security and access (セキュリティとアクセス)] で、[Security groups for Master (マスターのセキュリティグループ)] リンクを選択します。
-
リストから [ElasticMapReduce-master] を選択します。
-
[Inbound]、[Edit] の順に選択します。
-
次の設定によってパブリックアクセスを許可するインバウンドルールが存在するかどうかを確認します。存在する場合は、[削除] を選択して削除します。
-
タイプ
SSH
-
ポート
22
-
ソース
Custom 0.0.0.0/0
警告 2020 年 12 月以前は、パブリックサブネットのマスターインスタンスのデフォルトの EMR 管理セキュリティグループが、すべてのソースからのインバウンドトラフィックをポート 22 で許可する、事前設定されたルールを使用して作成されていました。このルールは、マスターノードへの初期 SSH 接続を簡素化するために作成されたものです。このインバウンドルールを削除して、信頼できるソースからのみにトラフィックを制限することを強くお勧めします。
-
-
ルールのリストの下部までスクロールし、[ルールの追加] を選択します。
-
[Type (タイプ)] で、[SSH] を選択します。
これにより、[プロトコル] には [TCP]、[ポート範囲] には [22] が自動的に入力されます。
-
ソースには、[My IP] を選択します。
これにより、クライアントコンピュータの IP アドレスが送信元アドレスとして自動的に追加されます。または、幅広い [Custom (カスタム)] 信頼済みクライアントの IP アドレスを追加でき、[Add rule (ルールの追加)] を選択して他のクライアントに追加のルールを作成できます。多くのネットワーク環境では、IP アドレスが動的に割り当てられるため、セキュリティグループのルールを定期的に編集して、信頼されたクライアントの IP アドレスを更新する必要があります。
-
[Save] を選択します。
-
必要に応じて、[ElasticMapReduce-slave] をリストから選択し、上記の手順を繰り返して信頼済みクライアントからコアノードおよびタスクノードへの SSH クライアントアクセスを許可します。
クラスターに接続する
SSH ルールを設定したら、SSH を使用してマスターノードに接続する に移動し、手順に従います。
-
接続するノードのパブリック DNS 名を取得します。
-
SSH を使用してクラスターに接続します。
クラスターノードに対する認証方法の詳細については、「Authenticate to Amazon EMR Cluster Nodes」を参照してください。
ステップ 3: Amazon EMR クラスターリソースをクリーンアップする
これで、作業をクラスターに送信し、PySpark アプリケーションの結果を表示したので、追加料金を回避するために、クラスターをシャットダウンして、指定した Amazon S3 バケットを削除できます。
クラスターのシャットダウン
クラスターをシャットダウンすると、クラスターに関連付けられているすべての Amazon EMR 料金と Amazon EC2 インスタンスが停止されます。
Amazon EMR は、クラスターが終了した後、2 か月間無料でクラスターに関するメタデータを保持します。これにより、新しいジョブ用にクラスターのクローンを作成することや、参照目的で構成を再度参照することが簡単になります。メタデータには、クラスターが S3 に書き込んだデータや、クラスターの実行中にクラスター上の HDFS に保存されたデータは含まれていません。
クラスターをシャットダウンした後に、Amazon EMR コンソールでリストビューからクラスターを削除することはできません。がメタデータを消去すると、終了したクラスターはコンソールから消えます。Amazon EMR
S3 リソースの削除
先ほど作成したバケットを削除して、このチュートリアルで使用したすべての Amazon S3 オブジェクトを削除します。このバケットには、入力データセット、クラスター出力、PySpark スクリプト、およびログファイルが含まれている必要があります。PySpark スクリプトまたは出力を別の場所に保存した場合は、保存したファイルを削除するための追加のステップが必要になる場合があります。
バケットを削除する前に、クラスターを完全にシャットダウンする必要があります。バケットを空にしようとすると、問題が発生することがあります。
https://docs.aws.amazon.com/AmazonS3/latest/user-guide/delete-bucket.html の「S3 バケットを削除する方法Amazon Simple Storage Service 入門ガイド」の手順に従って、バケットを空にし、S3 から削除します。
次のステップ
これで、最初の Amazon EMR クラスターが最初から最後まで起動され、ビッグデータアプリケーションの準備と送信、結果の表示、クラスターのシャットダウンなど、主要な EMR タスクについて説明しました。
ワークフローのカスタマイズの詳細について、推奨されるトピックをいくつか示します。Amazon EMR
のビッグデータアプリケーションの詳細Amazon EMR
『 リリースガイドAmazon EMR』で、クラスターにインストールできるビッグデータアプリケーションを検出して比較します。リリースガイドには、各 EMR バージョンの詳細と、Amazon EMR で Spark や Hadoop などのフレームワークを設定および使用する方法に関するヒントも含まれています。
クラスターハードウェア、ネットワーク、およびセキュリティの計画
このチュートリアルでは、インスタンスタイプ、ネットワーキング、セキュリティなどの詳細オプションを設定せずに、シンプルな EMR クラスターを作成します。速度、容量、セキュリティ要件を満たすクラスターの計画と起動の詳細については、「」および「」を参照してください。クラスタの計画と構成 でのセキュリティAmazon EMR
クラスターを管理する
クラスターへの接続方法、デバッグステップ、クラスターのアクティビティと状態の追跡方法を説明する、Manage Clusters で実行中のクラスターについて詳しく説明します。また、EMR マネージドスケーリングを使用して、ワークロードの需要に応じてクラスターリソースを調整する方法について詳細を確認することもできます。
別のインターフェイスを使用する
コンソールに加えて、Amazon EMR、ウェブサービス API、またはサポートされている多くの AWS SDK のいずれかを使用して Amazon EMR を管理できます。AWS Command Line Interface詳細については、「」を参照してください。管理インターフェイス.
クラスターにインストールされているアプリケーションを操作する方法は多数あります。Amazon EMRApache Hadoop などの一部のアプリケーションは、クラスターインスタンスで表示できるウェブインターフェイスを公開します。詳細については、「」を参照してください。Amazon EMR クラスターでホストされているウェブサイトの表示. Apache Spark を実行する Amazon EMR クラスターでは、Amazon EMR コンソールで EMR ノートブックを使用してクエリとコードを実行できます。詳細については、「」を参照してください。Amazon EMR ノートブック.
EMR 技術ブログを参照する
EMR 機能のチュートリアル例と詳細な説明については、AWS ビッグデータブログ