コマンドラインを使用してクラスターを起動する - AWS Data Pipeline

AWS Data Pipeline新規のお客様への の提供は終了しました。AWS Data Pipeline の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細

コマンドラインを使用してクラスターを起動する

Amazon EMR クラスターを定期的に実行してウェブログの分析や科学データの分析を実行している場合、AWS Data Pipeline を使用して Amazon EMR クラスターを管理できます。AWS Data Pipeline では、クラスターが起動される前に満たされている必要がある前提条件 (例えば、当日のデータが Amazon S3 にアップロード済みであることの確認) を指定できます。このチュートリアルでは、シンプルな Amazon EMR ベースのパイプラインまたはより複雑なパイプラインの一部のモデルとなる、クラスターの起動について順を追って説明します。

前提条件

CLI を使用するには、事前に次のステップを完了しておく必要があります。

  1. コマンドラインインターフェイス (CLI) をインストールして設定します。詳細については、「AWS Data Pipelineへのアクセス」を参照してください。

  2. DataPipelineDefaultRoleDataPipelineDefaultResourceRole という名前の IAM ロールが存在していることを確認します。AWS Data Pipeline コンソールにより、自動的にこれらのロールが作成されます。AWS Data Pipeline コンソールをまだ 1 回も使用したことがない場合、これらのロールを手動で作成する必要があります。詳細については、「AWS Data Pipeline の IAM ロール」を参照してください。

パイプライン定義ファイルの作成

次のコードは、Amazon EMR で提供される既存の Hadoop ストリーミングジョブを実行する、単純な Amazon EMR クラスターのパイプライン定義ファイルです。このサンプルアプリケーションは、WordCount と呼ばれ、Amazon EMR コンソールを使用して実行することもできます。

このコードをテキストファイルにコピーし、MyEmrPipelineDefinition.json として保存します。Amazon S3 バケットの場所は、所有している Amazon S3 バケットの名前に置き換える必要があります。また、開始日および終了日も置き換える必要があります。クラスターをすぐに起動するには、[startDateTime] を過去の任意の日付に設定し、[endDateTime] を将来の任意の日付に設定します。AWS Data Pipeline は、未処理の作業として認識された項目を解決するために、"期限が過ぎた" クラスターの起動を直ちに開始します。このバックフィリングは、AWS Data Pipeline が最初のクラスターを起動するまで 1 時間待つ必要がないことを意味します。

{ "objects": [ { "id": "Hourly", "type": "Schedule", "startDateTime": "2012-11-19T07:48:00", "endDateTime": "2012-11-21T07:48:00", "period": "1 hours" }, { "id": "MyCluster", "type": "EmrCluster", "masterInstanceType": "m1.small", "schedule": { "ref": "Hourly" } }, { "id": "MyEmrActivity", "type": "EmrActivity", "schedule": { "ref": "Hourly" }, "runsOn": { "ref": "MyCluster" }, "step": "/home/hadoop/contrib/streaming/hadoop-streaming.jar,-input,s3n://elasticmapreduce/samples/wordcount/input,-output,s3://myawsbucket/wordcount/output/#{@scheduledStartTime},-mapper,s3n://elasticmapreduce/samples/wordcount/wordSplitter.py,-reducer,aggregate" } ] }

このパイプラインには 3 個のオブジェクトがあります。

  • Hourly。作業のスケジュールを表します。アクティビティのフィールドの 1 つとしてスケジュールを設定できます。スケジュールを設定すると、アクティビティはそのスケジュールに従って(この例では 1 時間ごとに)実行されます。

  • MyCluster。クラスターの実行に使用される一連の Amazon EC2 インスタンスを表します。クラスターとして実行する EC2 インスタンスのサイズと数を指定できます。インスタンスの数を指定しなかった場合、クラスターはマスターノードとタスクノードの 2 つを使用して起動されます。クラスターを起動するサブネットも指定できます。Amazon EMR で提供された AMI に追加ソフトウェアをロードするブートストラップアクションなど、クラスターに追加設定を追加できます。

  • MyEmrActivity。クラスタで処理する計算を表します。Amazon EMR では、ストリーミング、カスケード、スクリプト化された Hive など、複数のタイプのクラスターがサポートされています。runsOn フィールドは MyCluster を参照し、それをクラスターの基盤の指定として使用します。

パイプライン定義のアップロードとアクティブ化

パイプライン定義をアップロードし、パイプラインをアクティブ化する必要があります。以下のコマンド例では、pipeline_name をパイプラインのラベルに置き換え、pipeline_file をパイプライン定義 .json ファイルの完全修飾パスに置き換えます。

AWS CLI

パイプライン定義を作成してパイプラインをアクティブ化するには、以下の create-pipeline コマンドを使用します。パイプラインの ID をメモします。この値は、ほとんどの CLI コマンドで使用するからです。

aws datapipeline create-pipeline --name pipeline_name --unique-id token { "pipelineId": "df-00627471SOVYZEXAMPLE" }

パイプライン定義を更新するには、以下の put-pipeline-definition コマンドを使用します。

aws datapipeline put-pipeline-definition --pipeline-id df-00627471SOVYZEXAMPLE --pipeline-definition file://MyEmrPipelineDefinition.json

パイプラインが正常に検証された場合、validationErrors フィールドは空です。警告を確認する必要があります。

パイプラインをアクティブ化するには、以下の activate-pipeline コマンドを使用します。

aws datapipeline activate-pipeline --pipeline-id df-00627471SOVYZEXAMPLE

以下の list-pipelines コマンドを使用して、パイプラインリストにパイプラインが表示されていることを確認できます。

aws datapipeline list-pipelines

パイプライン実行の監視

Amazon EMR コンソールを使用して、AWS Data Pipeline によって起動されたクラスターを表示できます。また、Amazon S3 コンソールを使用して、出力フォルダを表示できます。

AWS Data Pipeline によって起動されたクラスターの進捗状況を確認するには
  1. Amazon EMR コンソールを開きます。

  2. AWS Data Pipeline によって生成されたクラスターの名前は、<pipeline-identifier>_@<emr-cluster-name>_<launch-time> のような形式になります。

    Elastic MapReduce クラスター list showing three running clusters with unique identifiers.
  3. いずれかの実行が完了した後、Amazon S3 コンソールを開いて、タイムスタンプ付きの出力フォルダーがあり、クラスターの結果が予想したとおり含まれていることを確認します。

    Amazon S3 console showing folders with timestamp names in the wordcount directory.