Amazon EMR 開発者ガイド Amazon EMR 開発者ガイド Amazon EMR 開発者ガイド Amazon EMR: 開発者ガイド Copyright © 2017 Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon. Amazon EMR 開発者ガイド Table of Contents Amazon EMR とは ....................................................................................................................... 1 リソース .............................................................................................................................. 2 Amazon EMR で何ができるか ................................................................................................ 3 Amazon EMR 上の Hadoop プログラミング ..................................................................... 3 Amazon EMR におけるデータの分析と処理 ...................................................................... 4 Amazon EMR 上のデータストレージ ............................................................................... 4 Amazon EMR によるデータの移動 .................................................................................. 4 Amazon EMR の機能 ............................................................................................................ 4 サイズ変更可能クラスター ............................................................................................. 5 支払いは実際に使用した分だけ ....................................................................................... 5 使いやすさ ................................................................................................................... 5 Amazon S3 または HDFS の使用 .................................................................................... 5 並列クラスター ............................................................................................................. 5 Hadoop アプリケーションのサポート .............................................................................. 5 スポットインスタンスによる経費削減 .............................................................................. 6 AWS の統合 ................................................................................................................. 6 インスタンスのオプション ............................................................................................. 6 MapR のサポート ......................................................................................................... 6 ビジネスインテリジェンスツール .................................................................................... 6 ユーザーコントロール ................................................................................................... 6 管理ツール ................................................................................................................... 7 セキュリティ ................................................................................................................ 7 Amazon EMR の仕組み ......................................................................................................... 7 Hadoop ....................................................................................................................... 7 ノード ......................................................................................................................... 8 ステップ ...................................................................................................................... 9 クラスター ................................................................................................................. 10 Amazon EMR と連携できるツールは何か ............................................................................... 12 Amazon EMR とともに使用する Hadoop と AWS 製品についてさらに学習する ............................ 13 ご利用開始にあたって .................................................................................................................. 14 ステップ 1: AWS アカウントの作成 ....................................................................................... 15 ステップ 2: クラスターログおよび出力データ用 Amazon S3 バケットの作成 ............................... 15 ステップ 3: Amazon EMR クラスターの起動 ........................................................................... 16 ステップ 4: Hive スクリプトをステップとして実行する ............................................................ 22 Hive スクリプトの概要 ................................................................................................. 23 Hive スクリプトをステップとして送信する ..................................................................... 24 結果の表示 ................................................................................................................. 24 ステップ 5: Hue を使用したデータのクエリ ............................................................................ 25 マスターノードへの SSH トンネルの作成 ....................................................................... 25 Hue へのログインとインタラクティブな Hive クエリの送信 .............................................. 27 (オプション)ステップ 6: Amazon EMR の確認 ..................................................................... 27 (オプション)ステップ 7: チュートリアルで使用したリソースの削除 ........................................ 29 Amazon EMR クラスターの計画 .................................................................................................... 31 AWS リージョンを選択する .................................................................................................. 32 コンソールを使用してリージョンを選択する ................................................................... 32 AWS CLI を使用してリージョンを指定する .................................................................... 33 SDK または API を使用してリージョンを選択するには ..................................................... 33 インスタンスの数とタイプを選択する .................................................................................... 33 クラスターの HDFS 容量を計算する .............................................................................. 34 インスタンスの数とタイプのガイドライン ...................................................................... 34 インスタンスグループ .................................................................................................. 35 インスタンスの構成 ..................................................................................................... 36 Amazon EMR クラスターインスタンスのストレージタイプを選択する ................................ 38 リザーブドインスタンスで容量を確保する(オプション) ................................................. 43 (オプション)スポットインスタンスでコストを削減する ................................................. 43 iv Amazon EMR 開発者ガイド ソフトウェアの設定 ............................................................................................................. 55 Amazon マシンイメージ(AMI) ................................................................................... 56 Hadoop のバージョンを選択する ................................................................................. 112 (オプション)追加のソフトウェアをインストールするためのブートストラップアクション の作成 ..................................................................................................................... 121 Amazon EMR と互換性のあるファイルシステム ..................................................................... 132 ファイルシステムへのアクセス .................................................................................... 133 EMR ファイルシステム(EMRFS)(オプション) ........................................................ 135 クラスターのライフサイクル(長時間稼働または一時的)を選択する ........................................ 160 入力データの準備(オプション) ......................................................................................... 161 Amazon EMR が受け入れ可能な入力の種類 ................................................................... 162 Amazon EMR にデータを入れる方法 ............................................................................ 162 出力の場所を準備する(オプション) ................................................................................... 173 Amazon S3 バケットの作成と設定 ............................................................................... 173 Amazon EMR が返すことができる形式 ......................................................................... 174 所有していない Amazon S3 バケットにデータを書き込む方法 ......................................... 175 クラスターの出力を圧縮する ....................................................................................... 177 クラスターへのアクセス設定 ............................................................................................... 178 IAM ロールを使用したユーザーアクセス権限の設定 ........................................................ 179 IAM およびアプリケーションの Amazon EMR ロールを設定する ...................................... 186 セキュリティグループを設定する ................................................................................. 194 マスターノードの SSH 認証情報の作成 ........................................................................ 202 システムディレクトリに対する許可の設定 .................................................................... 203 ログ記録およびデバッグの作成(オプション) ...................................................................... 204 デフォルトログファイル ............................................................................................. 204 Amazon S3 にログファイルをアーカイブする ................................................................ 205 デバッグツールを有効にする ....................................................................................... 207 デバッグオプション情報 ............................................................................................. 208 クラスターの Amazon VPC サブネットを選択する ................................................................. 209 VPC のクラスター ..................................................................................................... 210 クラスターをホストするために VPC をセットアップする ................................................ 212 VPC 内でクラスターを起動する .................................................................................. 214 IAM を使用して VPC へのアクセス許可を制限する ......................................................... 216 プライベートサブネット用の Amazon S3 の最小ポリシー ............................................... 216 詳細はこちら ............................................................................................................ 217 Amazon EMR クラスターにタグを付ける .............................................................................. 217 タグの制限 ............................................................................................................... 218 請求用のリソースにタグを付ける ................................................................................. 219 新しいクラスターにタグを追加する .............................................................................. 219 既存のクラスターにタグを追加する .............................................................................. 220 クラスターのタグを表示する ....................................................................................... 221 クラスターからタグを削除する .................................................................................... 222 Amazon EMR でサードパーティアプリケーションを使用する(オプション) ............................. 222 Amazon EMR でのビジネスインテリジェンスツールの使用 ............................................. 223 HParser でデータを解析する ....................................................................................... 223 Hadoop 用 MapR ディストリビューションを使用する ..................................................... 224 データを処理する Hadoop アプリケーションの実行 ........................................................................ 235 Amazon EMR を使用したバイナリの構築 .............................................................................. 235 JAR の要件 ...................................................................................................................... 237 クラスターでのスクリプトの実行 ......................................................................................... 238 AWS CLI を使用したカスタム JAR ステップの送信 ........................................................ 238 ストリーミングでのデータ処理 ............................................................................................ 239 Hadoop ストリーミングユーティリティの使用 ............................................................... 239 ストリーミングステップの送信 .................................................................................... 241 Cascading を使用したデータ処理 ........................................................................................ 243 Cascading ステップの送信 .......................................................................................... 243 カスタム JAR でのデータの処理 .......................................................................................... 244 カスタム JAR ステップの送信 ..................................................................................... 245 v Amazon EMR 開発者ガイド Hive と Amazon EMR (EMR 3.x リリース) .................................................................................... 247 Amazon EMR Hive と Apache Hive の違い ........................................................................... 247 結合と分割の入力形式 ................................................................................................ 248 ログファイル ............................................................................................................ 248 Thrift サービスポート ................................................................................................. 249 Hive 認可 ................................................................................................................. 249 Amazon S3 での Hive ファイルマージ動作 .................................................................... 250 ACID トランザクションおよび Amazon S3 ................................................................... 250 Amazon EMR での Hive の追加機能 ............................................................................. 250 サポートされる Hive のバージョン ...................................................................................... 258 Hive のバージョンの表示 ............................................................................................ 265 Hive の複数バージョン間でデータを共有する ................................................................ 266 Hive の作業を送信する ....................................................................................................... 266 Amazon EMR コンソールを使用して Hive の作業を送信する ........................................... 266 AWS CLI を使用して Hive の作業を送信する ................................................................. 267 クラスター外部の Hive メタストアの作成 ............................................................................. 268 Hive JDBC ドライバの使用 ................................................................................................. 271 Spark ....................................................................................................................................... 275 Spark のインタラクティブな使用またはバッチモードでの使用 ................................................. 276 Spark を使用したクラスターの作成 ...................................................................................... 276 Spark の設定 (EMR 3.x リリース) ........................................................................................ 277 Spark のデフォルト設定の変更 .................................................................................... 278 Spark シェルへのアクセス .................................................................................................. 279 Spark アプリケーションの記述 ............................................................................................ 280 Scala ....................................................................................................................... 280 Java ........................................................................................................................ 281 Python ..................................................................................................................... 282 Spark ステップの追加 ........................................................................................................ 282 Spark のデフォルト設定の上書き ................................................................................. 285 Impala ..................................................................................................................................... 286 Impala を使用すると、どのようなことができるのですか? ....................................................... 286 従来のリレーショナルデータベースとの違い ......................................................................... 287 Hive との違い ................................................................................................................... 287 チュートリアル: Amazon EMR で Impala クラスターを起動およびクエリする ............................ 288 サービスへのサインアップ .......................................................................................... 288 クラスターの起動 ...................................................................................................... 288 テストデータを生成する ............................................................................................. 293 Impala テーブルを作成および入力する ......................................................................... 294 Impala のクエリ データ .............................................................................................. 294 Amazon EMR AMI に含まれている Impala の例 ..................................................................... 295 TPCDS .................................................................................................................... 295 Wikipedia ................................................................................................................. 296 サポートされる Impala のバージョン ................................................................................... 298 Impala 1.2.4 の更新 ................................................................................................... 298 Impala のメモリに関する考慮事項 ........................................................................................ 299 Impala と JDBC の使用 ...................................................................................................... 300 Impala Web ユーザーインターフェイスへのアクセス .............................................................. 300 Impala をサポートするファイルと圧縮形式 ........................................................................... 300 Impala SQL Dialect ............................................................................................................ 301 Impala ユーザー定義関数 .................................................................................................... 301 Impala のパフォーマンステストおよびクエリの最適化 ............................................................ 301 データベーススキーマ ................................................................................................ 301 サンプルデータ ......................................................................................................... 302 テーブルのサイズ ...................................................................................................... 303 クエリ ..................................................................................................................... 303 パフォーマンステストの結果 ....................................................................................... 304 クエリの最適化 ......................................................................................................... 307 Apache Pig ............................................................................................................................... 309 vi Amazon EMR 開発者ガイド サポートされている Pig のバージョン .................................................................................. 309 Pig のバージョンの詳細 ............................................................................................. 311 追加の Pig 関数 ......................................................................................................... 313 インタラクティブおよびバッチ Pig クラスター ...................................................................... 313 Pig の作業の送信 ............................................................................................................... 313 Amazon EMR コンソールを使用した Pig の作業の送信 ................................................... 314 AWS CLI を使用した Pig の作業の送信 ........................................................................ 314 Pig からユーザー定義関数を呼び出す ................................................................................... 315 Pig から JAR ファイルを呼び出す ............................................................................... 315 Pig から Python/Jython スクリプトを呼び出す ............................................................... 315 HBase ..................................................................................................................................... 317 HBase を使用すると、どのようなことができるのですか? ....................................................... 318 サポートされる HBase バージョン ...................................................................................... 318 HBase クラスターの前提条件 .............................................................................................. 319 Amazon EMR クラスターで HBase を インストールする ........................................................ 319 HBase シェルを使用する .................................................................................................... 325 テーブルを作成する ................................................................................................... 326 値を入力する ............................................................................................................ 326 値を取得する ............................................................................................................ 326 Hive で HBase テーブルにアクセスする ............................................................................... 326 HBase をバックアップおよび復元する ................................................................................. 327 コンソールを使用して HBase をバックアップおよび復元する .......................................... 328 AWS CLI を使用して HBase をバックアップおよび復元する; ........................................... 330 HBase クラスターを終了する .............................................................................................. 333 HBase を設定する ............................................................................................................. 333 HBase デーモンを設定する ......................................................................................... 334 HBase サイト設定を指定する ...................................................................................... 335 最適化のための HBase サイト設定 .............................................................................. 337 ユーザーインターフェイスを表示する ................................................................................... 339 HBase ログファイルを表示する ........................................................................................... 339 CloudWatch で HBase を監視する ....................................................................................... 340 Ganglia で HBase を監視する ............................................................................................. 340 HBase の以前のバージョンからの移行 ................................................................................. 342 データの表示、照会、操作に関する Hue の設定 ............................................................................. 343 Hue とは .......................................................................................................................... 343 Hue がインストールされた状態でのクラスターの作成 ............................................................. 344 Hue ウェブインターフェイスを起動する ............................................................................... 345 Amazon RDS でリモートデータベースと Hue を使用する ....................................................... 346 トラブルシューティング ............................................................................................. 349 Hue の詳細設定 ................................................................................................................. 349 LDAP ユーザーに関して Hue を設定する ...................................................................... 350 Metastore Manager の制限 ................................................................................................. 354 Amazon Kinesis データを分析する ............................................................................................... 355 Amazon EMR と Amazon Kinesis の統合で、どのようなことができますか? ............................... 355 Amazon Kinesis ストリームのチェックポイントの分析 ........................................................... 356 Amazon DynamoDB テーブルのプロビジョニングされた IOPS に関する推奨事項 ............... 356 パフォーマンスに関する考慮事項 ......................................................................................... 357 Amazon EMR クラスターで Amazon Kinesis 分析をスケジュールする ....................................... 357 チュートリアル: Amazon EMR および Hive による Amazon Kinesis ストリームの分析 ................. 357 サービスへのサインアップ .......................................................................................... 358 Amazon Kinesis ストリームを作成する ......................................................................... 358 Amazon DynamoDB テーブルの作成 ............................................................................ 358 Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイ ル、サンプルログファイルをダウンロードする .............................................................. 359 Amazon Kinesis Publisher サンプルアプリケーションを起動する ...................................... 360 クラスターの起動 ...................................................................................................... 362 アドホック Hive クエリを実行する .............................................................................. 366 チェックポイントによるクエリの実行 ........................................................................... 369 vii Amazon EMR 開発者ガイド スクリプトによるクエリのスケジュール設定 ................................................................. 370 チュートリアル: Amazon EMR および Pig による Amazon Kinesis ストリームの分析 ................... 371 サービスへのサインアップ .......................................................................................... 372 Amazon Kinesis ストリームを作成する ......................................................................... 372 DynamoDB テーブルを作成する .................................................................................. 373 Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイ ル、サンプルログファイルをダウンロードする .............................................................. 373 Amazon Kinesis Publisher サンプルアプリケーションを起動する ...................................... 374 クラスターの起動 ...................................................................................................... 376 Pig スクリプトを実行する .......................................................................................... 381 スクリプトによるクエリのスケジュール設定 ................................................................. 384 Amazon EMR でデータを抽出、変換、およびロード(ETL)する ..................................................... 386 S3DistCp .......................................................................................................................... 386 DistCp のオプション .................................................................................................. 387 クラスターに S3DistCp をステップとして追加する ........................................................ 392 Amazon EMR でサポートされる S3DistCp バージョン .................................................... 395 DynamoDB 内テーブルのエクスポート、インポート、クエリ、結合 ......................................... 395 Amazon EMR の統合の前提条件 .................................................................................. 397 ステップ 1: キーペアを作成する .................................................................................. 397 クラスター の作成 ..................................................................................................... 398 ステップ 3: マスターノードへの SSH ........................................................................... 402 Hive コマンドを実行するように Hive テーブルをセットアップする ................................... 404 データのエクスポート、インポート、クエリを行う Hive コマンドの使用例 ........................ 408 パフォーマンスの最適化 ............................................................................................. 415 Amazon EMR を使用して Avro データを Amazon S3 に保存する ............................................. 418 クラスターを管理する ................................................................................................................ 421 クラスターを表示し、モニタリングする ............................................................................... 421 クラスターの詳細情報を表示する ................................................................................. 422 ログファイルを表示する ............................................................................................. 426 Amazon EC2 でクラスターインスタンスを表示する ....................................................... 430 イベントとメトリックスを使用して、クラスターをモニタリングする ................................ 431 AWS CloudTrail での Amazon EMR API 呼び出しのログ作成 .......................................... 450 Ganglia でパフォーマンスをモニタリングする ............................................................... 452 クラスターに接続する ........................................................................................................ 458 SSH を使用してマスターノードに接続する ................................................................... 459 Amazon EMR クラスターでホストされているウェブサイトの表示 .................................... 464 クラスターの終了を制御する ............................................................................................... 478 クラスターを終了する ................................................................................................ 478 クラスター終了の管理 ................................................................................................ 481 クラスターリソースのスケーリング ...................................................................................... 484 Amazon EMR で自動スケーリングを使用する ................................................................ 485 実行中のクラスターのサイズを手動で変更する .............................................................. 494 クラスターのスケールダウンを設定する ....................................................................... 501 コンソールを使用してクラスターを複製する ......................................................................... 503 クラスターへの作業の送信 .................................................................................................. 504 CLI およびコンソールを使用した手順の作業 .................................................................. 504 Hadoop ジョブのインタラクティブな送信 ..................................................................... 507 256 を超えるステップをクラスターに追加する .............................................................. 508 AWS Data Pipeline でクラスターを自動的に繰り返す ............................................................. 509 クラスターをトラブルシューティングする .................................................................................... 510 トラブルシューティングに利用可能なツールは何ですか? ........................................................ 511 クラスターの詳細を表示するツール .............................................................................. 511 ログファイルを表示するツール .................................................................................... 511 クラスターのパフォーマンスを監視するツール .............................................................. 512 Amazon EMR AMI の既知の問題 ......................................................................................... 512 一般的な問題 ............................................................................................................ 512 Hadoop 2.4.0 AMI の既知の問題 .................................................................................. 513 Hadoop 2.2.0 AMI の既知の問題 .................................................................................. 514 viii Amazon EMR 開発者ガイド Hadoop 1.0.3 AMI の問題 ........................................................................................... 失敗したクラスターのトラブルシューティング ...................................................................... ステップ 1: 問題に関するデータの収集 ......................................................................... ステップ 2: 環境の確認 .............................................................................................. ステップ 3: 最終状態変更の確認 .................................................................................. ステップ 4: ログファイルの検証 .................................................................................. ステップ 5: 手順を追ってのクラスターのテスト ............................................................. 遅いクラスターのトラブルシューティング ............................................................................ ステップ 1: 問題に関するデータの収集 ......................................................................... ステップ 2: 環境の確認 .............................................................................................. ステップ 3: ログファイルの検証 .................................................................................. ステップ 4: クラスターとインスタンスの状態の確認 ....................................................... ステップ 5: 停止されたグループの確認 ......................................................................... ステップ 6: 構成設定のレビュー .................................................................................. ステップ 7: 入力データの検証 ..................................................................................... Amazon EMR の共通エラー ................................................................................................ 入力および出力エラー ................................................................................................ 権限エラー ............................................................................................................... メモリエラー ............................................................................................................ リソースエラー ......................................................................................................... ストリーミングクラスターエラー ................................................................................. カスタム JAR クラスターエラー .................................................................................. Hive クラスターエラー ............................................................................................... VPCエラー ............................................................................................................... AWS GovCloud (US) エラー ....................................................................................... その他の問題 ............................................................................................................ クラスターを起動し管理するアプリケーションの作成 ..................................................................... エンドツーエンド Amazon EMR Java ソースコード例 ............................................................ API 呼び出しの一般的な考え方 ............................................................................................ Amazon EMR におけるエンドポイント ......................................................................... Amazon EMR でクラスターパラメーターを指定する ...................................................... Amazon EMR におけるアベイラビリティーゾーン ......................................................... Amazon EMR クラスターで追加のファイルおよびライブラリを使用する方法 ..................... Amazon EMR のサンプルアプリケーション ................................................................... SDK を使用して Amazon EMR API を呼び出す ..................................................................... AWS SDK for Java を使用して Amazon EMR クラスターを作成する ................................. .Net 用 AWS SDK を使用して Amazon EMR クラスターを作成する .................................. Java SDK を使用して API リクエストに署名する ........................................................... Hadoop 設定のリファレンス ....................................................................................................... JSON の設定ファイル ........................................................................................................ ノードの設定 ............................................................................................................ クラスターの設定 ...................................................................................................... hadoop-user-env.sh の設定 ................................................................................................. Hadoop 2.2.0 および 2.4.0 のデフォルト設定 ........................................................................ Hadoop 設定(Hadoop 2.2.0、2.4.0) .......................................................................... HDFS 設定(Hadoop 2.2.0) ...................................................................................... タスクの設定(Hadoop 2.2.0) ................................................................................... 中間的な圧縮(Hadoop 2.2.0) ................................................................................... Hadoop 1.0.3 のデフォルト設定 .......................................................................................... Hadoop 設定(Hadoop 1.0.3) .................................................................................... HDFS 設定(Hadoop 1.0.3) ...................................................................................... タスクの設定(Hadoop 1.0.3) ................................................................................... 中間的な圧縮(Hadoop 1.0.3) ................................................................................... Hadoop 20.205 のデフォルト設定 (廃止) ............................................................................... Hadoop 設定(Hadoop 20.205) ................................................................................. HDFS 設定(Hadoop 20.205) .................................................................................... タスクの設定(Hadoop 20.205) ................................................................................. 中間的な圧縮(Hadoop 20.205) ................................................................................. ix 516 518 519 519 521 521 522 523 523 524 525 526 527 528 529 530 530 532 533 534 538 539 540 541 543 544 545 545 549 550 550 550 551 551 551 552 553 555 556 556 557 558 560 561 561 574 574 592 594 594 605 605 609 609 609 613 613 616 Amazon EMR 開発者ガイド Amazon EMR のコマンドラインインターフェイスリファレンス ....................................................... AWS CLI での Amazon EMR 用パラメーター値の指定 ............................................................ コマンドラインを使ったパラメーターの設定 ................................................................. コマンドラインを使ったパラメーター値の表示 .............................................................. 設定ファイルを使ったパラメーターの設定 .................................................................... Amazon EMR コマンドラインインターフェイスのインストール (廃止) ...................................... Ruby のインストール ................................................................................................. RubyGems パッケージ管理フレームワークの確認 .......................................................... Amazon EMR コマンドラインインターフェイスのインストール ....................................... 認証情報の設定 ......................................................................................................... SSH 認証情報 ........................................................................................................... コマンドラインインターフェイスの呼び出し方法 (廃止) .......................................................... AWS EMR コマンドラインインターフェイスのオプション(廃止) .......................................... 一般的なオプション ................................................................................................... 一般的ではないオプション .......................................................................................... すべてのステップタイプで共通するオプション .............................................................. インスタンスグループを追加および変更する ................................................................. ジョブフローに JAR ステップを追加する ...................................................................... ジョブフローに JSON ステップを追加する ................................................................... ジョブフローにストリーミングステップを追加する ........................................................ マスターノードに Elastic IP アドレス を割り当てる ....................................................... マスターノードへの接続 ............................................................................................. ジョブフローを作成する ............................................................................................. HBase オプションの使用 ............................................................................................ Hive オプションの使用 ............................................................................................... Impala オプションの使用 ............................................................................................ ジョブフローの一覧とその説明を表示する .................................................................... ステップへ引数を渡す ................................................................................................ Pig オプションの使用 ................................................................................................. ステップアクションの指定 .......................................................................................... ブートストラップアクションを指定する ....................................................................... タグ付け .................................................................................................................. ジョブフローの終了 ................................................................................................... S3DistCp の使用 ....................................................................................................... AWS EMR コマンドラインインターフェイスのリリース(廃止) ............................................. ドキュメント履歴 ...................................................................................................................... x 617 617 618 618 618 619 619 620 620 621 623 624 625 626 627 628 628 630 632 632 635 636 637 644 653 657 658 661 663 665 667 672 674 676 680 682 Amazon EMR 開発者ガイド Amazon EMR とは このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR (Amazon EMR) を使用すると、莫大な量のデータの分析と処理を行うことができます。 それために、Amazon クラウド内で実行されている仮想サーバーのクラスター全般に計算処理を分散 せます。このクラスターは、Hadoop と呼ばれるオープンソース型フレームワークで管理されていま す。 Hadoop は、MapReduce と呼ばれる分散型処理アーキテクチャを使用し、その中でタスクは一連の サーバーにマッピングされ、処理されます。 これらのサーバーによって実行された計算処理の結果 は、単一の出力セットに束ねられます。マスターノードとして指定される 1 つのノードが、タスクの 分散を制御します。次の図に、データを処理するスレーブノード群に指示を与えるマスターノードを 持つ Hadoop クラスターを示します。 Amazon EMR では、AWS とシームレスに連動するように Hadoop とその他のオープンソースアプリ ケーションが強化されました。Amazon EMR 上で稼働する Hadoop クラスターは、マスターとスレー ブのノード用に EC2 インスタンスを仮想 Linux サーバーとして使用し、入出力データの一括ストレー ジ用に Amazon S3 を使用し、クラスターのパフォーマンスの観測とアラーム発生に CloudWatch を 使用します。また、Amazon EMR と Hive を使用して DynamoDB との間でデータの移動を行うこと 1 Amazon EMR 開発者ガイド リソース もできます。これらはすべて、Hadoop クラスターの起動と管理を行う Amazon EMR コントロールソ フトウェアによってまとめられます。このプロセスは Amazon EMR クラスターと呼ばれています。 次の図に、どのように Amazon EMR が他の AWS 製品とやり取りするかを示します。 Hadoop アーキテクチャ上で実行されるオープンソースプロジェクトは、Amazon EMR 上でも実行で きます。もっとも評判の Hive、Pig、HBase、DistCp、および Ganglia などのアプリケーションは、 すでに Amazon EMR と統合されています。 Amazon EMR 上で Hadoop を実行すると、以下のようなクラウドの利点を活用できます。 • わずか数分で、仮想サーバーのクラスターを供給できます。 • クラスター内の仮想サーバー数を増減させて計算処理の必要を管理して、使う分だけ料金を支払う ようにすることができます。 • 他の AWS 製品との統合。 リソース このサービスを利用する際に役立つ関連リソースは以下の通りです。 • クラスとワークショップ – AWS に関するスキルを磨き、実践的経験を積むために役立つ、職務別の 特別コースとセルフペースラボへのリンクです。 2 Amazon EMR 開発者ガイド Amazon EMR で何ができるか • AWS 開発者用ツール – AWS アプリケーションの開発と管理のための開発者ツール、SDK、IDE ツールキット、およびコマンドラインツールへのリンクです。 • AWS ホワイトペーパー – アーキテクチャ、セキュリティ、エコノミクスなどのトピックをカバー し、AWS のソリューションアーキテクトや他の技術エキスパートによって書かれた、技術的な AWS ホワイトペーパーの包括的なリストへのリンクです。 • AWS サポートセンター – AWS サポートケースを作成および管理するためのハブです。フォーラ ム、技術上のよくある質問、サービス状態ステータス、AWS Trusted Advisor などの便利なリソー スへのリンクも含まれています。 • AWS サポート – 1 対 1 での迅速な対応を行うサポートチャネルである AWS サポートに関する情報 のメインウェブページです。AWS サポートは、クラウドでのアプリケーションの構築および実行を 支援します。 • お問い合わせ – AWS の支払、アカウント設定その他に関する連絡先です。 • AWS サイトの利用規約 – 当社の著作権、商標、お客様のアカウント、ライセンス、サイトへのアク セス、およびその他のトピックに関する詳細情報です。 • AWS ビッグデータブログAWS ビッグデータブログには、ビッグデータの収集、保存、消去、処 理、および視覚化に役立つことを目的とした技術関連記事が含まれています。 • Amazon EMR API Reference – Amazon EMR のすべての API の技術的説明です。 • AWS によるビッグデータ分析入門 –このチュートリアルでは、Amazon EMR および Apache Hive を使用してウェブサーバーのログファイルを分析し、コードを一切記述せずにログファイルに情報 を問い合わせる方法について説明します。 • Amazon EMR Technical FAQ – この製品について、開発者からよく寄せられる質問について説明し ます。 • Amazon EMR リリースノート – 現在のリリースについて概要を提供します。また、新機能、修正、 および既知の問題についての注意事項を示します。 • Amazon EMR 記事とチュートリアル – Amazon EMR に関する記事、チュートリアル、およびビ デオのリストです。トピックには、Amazon EMR を使用した特定のビジネス上の課題の解決や Amazon EMR とサードパーティアプリケーションの使用などを体験させるチュートリアルが含まれ ています。 • Amazon EMR Forum – 開発者が Amazon EMR に関連する技術的な質問についてディスカッション できる、コミュニティベースのフォーラムです。 Amazon EMR で何ができるか Amazon EMR は、AWS 上における Hadoop および関連の大容量データアプリケーションの稼働を簡 素化します。EMR を使用して、膨大な量のデータの管理と分析を行うことができます。クラスターの 構成次第で、ペタバイト規模のデータを処理することも可能です。 トピック • Amazon EMR 上の Hadoop プログラミング (p. 3) • Amazon EMR におけるデータの分析と処理 (p. 4) • Amazon EMR 上のデータストレージ (p. 4) • Amazon EMR によるデータの移動 (p. 4) Amazon EMR 上の Hadoop プログラミング カスタムの Hadoop アプリケーションを開発してデプロイするにあたり、今までは Hadoop プログ ラム用にいくつものハードウェアにアクセスする必要がありました。Amazon EMR では、EC2 イン スタンスのセットを仮想サーバーとして起動するだけで、Hadoop クラスターを稼働させることがで きます。完全にロードされた本稼働サーバーや一時的なテスト用サーバーなど、多様なサーバー構成 3 Amazon EMR 開発者ガイド Amazon EMR におけるデータの分析と処理 を実行できます。ハードウェアを購入したり再構成したりする必要はありません。Amazon EMR を 使用すれば、常時オンの本稼働クラスターを構成してデプロイするのは容易です。開発およびテスト フェーズの完了後に未使用のテスト用クラスターを終了するのも容易です。 Amazon EMR には、開発するプログラムの種類や使用するライブラリに応じて、Hadoop アプリケー ションを実行する方法がいくつか用意されています。 カスタム JAR Java で書かれたカスタム MapReduce プログラムを実行します。カスタム JAR を実行する と、MapReduce API への低レベルアクセスが可能になります。Java アプリケーション内で MapReduce タスクを定義して実装する責任はお客様が負います。 Cascading データストリームの分割や結合などの機能を備えている Cascading Java ライブラリを使用してアプ リケーションを実行します。Cascading Java ライブラリを使用すると、アプリケーションの開発が簡 素化されます。Cascading を使用すると、カスタム JAR アプリケーションの場合と同様に、低レベル MapReduce API にアクセスできます。 ストリーミング Amazon S3 にアップロードされる Map と Reduce の機能に基づいて Hadoop ジョブを実行します。 関数の実装にはサポートされている Ruby、Perl、Python、PHP、R、Bash、C++ などどの言語でも 使用できます。 Amazon EMR におけるデータの分析と処理 また Amazon EMR を使用することによって、コードを記述せずにデータを分析して処理できます。 複数のオープンソースアプリケーションを Hadoop 上で稼働させると、MapReduce ジョブを実行し て、SQL に似た構文または Pig Latin と呼ばれる特殊言語でデータを扱うことができるようになりま す。Amazon EMR は Apache Hive および Apache Pig と統合します。 Amazon EMR 上のデータストレージ 分散ストレージとは、冗長性によりデータの紛失を防ぎ、多量のデータをコンピューターの分散ネッ トワークを介して格納する方法です。Amazon EMR は、Hadoop Distributed File System (HDFS) およ び Apache HBase と統合します。 Amazon EMR によるデータの移動 Amazon EMR を使用して、データベースおよびデータストアとの間で大量のデータを出し入れす ることができます。作業を分散することによって、データの移動が迅速化されます。Amazon EMR は、Amazon Simple Storage Service (Amazon S3)、DynamoDB、および Apache HBase との間で データを出し入れするためのカスタムライブラリを提供します。 Amazon EMR の機能 Amazon EMR(Amazon EMR)を使用してアマゾン ウェブ サービスの Hadoop を実行すると、多く の利点がもたらされます。 トピック • サイズ変更可能クラスター (p. 5) • 支払いは実際に使用した分だけ (p. 5) • 使いやすさ (p. 5) 4 Amazon EMR 開発者ガイド サイズ変更可能クラスター • Amazon S3 または HDFS の使用 (p. 5) • • • • • 並列クラスター (p. 5) Hadoop アプリケーションのサポート (p. 5) スポットインスタンスによる経費削減 (p. 6) AWS の統合 (p. 6) インスタンスのオプション (p. 6) • MapR のサポート (p. 6) • ビジネスインテリジェンスツール (p. 6) • ユーザーコントロール (p. 6) • 管理ツール (p. 7) • セキュリティ (p. 7) サイズ変更可能クラスター Amazon EMR で Hadoop クラスターを実行すると、処理のニーズに応じてクラスター内の仮想サー バーの数を容易に増減することができます。サーバーの追加または削除に要する時間は数分です。物 理サーバーで動作するクラスターにおいて同様の変更を行う場合よりも短時間で行えます。 支払いは実際に使用した分だけ Amazon EMR でクラスターを実行すれば、実際に使用した分だけの支払いで済みます。ハードウェア の保守やアップグレードにかかる持続的なオーバーヘッドコストの支払いはありません。また、ピー ク時のニーズに対応するために余分な容量を事前に購入しておく必要もありません。例えば、クラス ターで毎日処理するデータ量が月曜日にピークに達する場合は、その日にクラスター内のサーバー数 を 50 に増やし、月曜日以外の曜日にはクラスター内で動作するサーバー数を減らして 10 に戻すこと ができます。物理サーバーの場合とは違い、週の残りの曜日に余分な 40 サーバーを維持するための 料金を支払う必要はありません。詳細については、「Amazon Elastic MapReduce Pricing」を参照し てください。 使いやすさ クラスターを Amazon EMR で起動すると、ウェブサービスが仮想サーバーインスタンスを割り当て て、必要なソフトウェアでその設定を行います。数分以内にクラスターが設定され、Hadoop アプリ ケーションを実行する準備が整います。 Amazon S3 または HDFS の使用 Amazon EMR クラスターにインストールされた Hadoop のバージョンは Amazon S3 と統合されま す。つまり、入力データと出力データを Amazon S3 に、HDFS のクラスターに、またはこの 2 つの 組み合わせに保存することができます。Amazon S3 には、ファイルシステムのように、Amazon EMR クラスターで動作するアプリケーションからアクセスすることができます。 並列クラスター 入力データが Amazon S3 に保存されると、複数のクラスターで同じデータに同時にアクセスするこ とができます。 Hadoop アプリケーションのサポート Amazon EMR では、Hive、Pig、HBase などの一般的な Hadoop アプリケーションを使用でき ます。詳細については、「Hive と Amazon EMR (EMR 3.x リリース) (p. 247)」、「Apache Pig (p. 309)」、および「Apache HBase (p. 317)」を参照してください。 5 Amazon EMR 開発者ガイド スポットインスタンスによる経費削減 スポットインスタンスによる経費削減 スポットインスタンスとは、クラスターの仮想サーバーを割引価格で購入できる方法です。アマゾン ウェブ サービスの余剰容量は、供給と需要に基づいて変動価格で提供されます。仮想サーバーの特定 の構成に対して支払う最大入札価格を設定します。そのタイプのサーバーに対するスポットインスタ ンスの価格が入札価格を下回っている場合は、クラスターにサーバーが追加され、スポット料金が請 求されます。スポット価格が入札価格を上回っている場合、サーバーは終了します。 クラスターでスポットインスタンスを効果的に使用する方法については、「(オプション)スポット インスタンスでコストを削減する (p. 43)」を参照してください。 AWS の統合 Amazon EMR は、Amazon EC2、Amazon S3、DynamoDB、Amazon RDS、CloudWatch、および AWS Data Pipeline などの他のアマゾン ウェブ サービスと統合されます。すなわち、AWS に保存さ れたデータに、クラスターから容易にアクセスできます。さらに、他のアマゾン ウェブ サービスで提 供されている機能を利用してクラスターを管理し、クラスターの出力を保存することができます。 例えば、Amazon EMR を使用することで、Amazon S3 に格納されているデータを分析し、結果を Amazon RDS または DynamoDB に出力することができます。CloudWatch を使用すると、クラス ターのパフォーマンスを監視し、AWS Data Pipeline でクラスターを自動的に繰り返すことができま す。新しいサービスが追加されたら、その新しいテクノロジーも利用できるようになります。詳細に ついては、「CloudWatch でメトリクスをモニタリングする (p. 436)」および「Amazon EMR によ る DynamoDB 内テーブルのエクスポート、インポート、クエリ、結合 (p. 395)」を参照してくださ い。 インスタンスのオプション Amazon EMR でクラスターを起動するときは、クラスターで使用される仮想サーバーのサイズと能力 を指定します。このようにして、仮想化されたサーバーを、クラスターの処理ニーズに対応させるこ とができます。コスト削減、パフォーマンス向上、または大量データの格納を実現する仮想サーバー インスタンスを選択できます。 例えば、データウェアハウスをホストするために、大容量ストレージを備えた仮想サーバーで 1 つ 目のクラスターを起動し、さらにパフォーマンスを向上させるために大容量メモリを備えた仮想 サーバーで 2 つ目のクラスターを起動する場合があります。物理サーバーの場合とは違い、専用の ハードウェア構成に固定されていないので、要件に合わせて各クラスターを調整することができま す。Amazon EMR を使用して行うことができるサーバー設定の詳細については、「インスタンスの数 とタイプを選択する (p. 33)」を参照してください。 MapR のサポート Amazon EMR では、複数の MapR ディストリビューションをサポートします。詳細については、 「Hadoop 用 MapR ディストリビューションを使用する (p. 224)」を参照してください。 ビジネスインテリジェンスツール Amazon EMR は、Tableau、MicroStrategy、Datameer などの一般的なビジネスインテリジェンス ツールと統合します。詳細については、「Amazon EMR でのビジネスインテリジェンスツールの使 用 (p. 223)」を参照してください。 ユーザーコントロール Amazon EMR を使用してクラスターを起動すると、クラスターへのルートアクセス権限が付与され るので、Hadoop を開始する前にソフトウェアをインストールしクラスターを設定することができま 6 Amazon EMR 開発者ガイド 管理ツール す。詳細については、「(オプション)追加のソフトウェアをインストールするためのブートスト ラップアクションの作成 (p. 121)」を参照してください。 管理ツール クラスターの管理は、Amazon EMR コンソール(ウェブベースのユーザーインターフェイス)、コマ ンドラインインターフェイス、ウェブサービス API、および種々の SDK を使用して行うことができま す。詳細については、「Amazon EMR と連携できるツールは何か (p. 12)」を参照してください。 セキュリティ ネットワーキングおよびセキュリティのルールを設定する Amazon VPC で Amazon EMR を実行で きます。Amazon EMR はまた IAM ユーザーおよびロールをサポートします。これらを使用すること で、クラスターへのアクセスと、クラスターで他のユーザーが実行できることを制約する権限とを制 御できます。詳細については、「クラスターへのアクセス設定 (p. 178)」を参照してください。 Amazon EMR の仕組み Amazon EMR(Amazon EMR)とは、管理する Hadoop クラスターをアマゾン ウェブ サービスで 実行する場合に使用できるサービスです。Hadoop クラスターとはサーバーセットであり、このサー バーセットは連動して、サーバー間で処理およびデータを分散することにより計算タスクを実行し ます。タスクの内容は、データの分析、データの格納、またはデータの移動と変換などが考えられま す。クラスター内で互いにリンクされた複数のコンピューターを使用することにより、膨大な量(数 ペタバイト)のデータを処理または保存するタスクを実行できます。 Amazon EMR は Hadoop クラスターを起動するとき、Amazon EC2 によって提供される仮想サー バーでクラスターを実行します。Amazon EMR では、AWS とのシームレスな動作を目的として、 サーバーにインストールする Hadoop のバージョンの強化を行いました。これにより、「Amazon EMR の機能 (p. 4)」に説明するようないくつかの利点がもたらされています。 Amazon EMR では、Hadoop を AWS と統合するだけでなく、ノードやステップなどの新しい概念が 分散処理に加えられています。 トピック • Hadoop (p. 7) • ノード (p. 8) • ステップ (p. 9) • クラスター (p. 10) Hadoop Apache Hadoop はオープンソースの Java ソフトウェアフレームワークで、サーバークラスター 全体で大量のデータ処理をサポートします。サーバ 1 台から数千台まで規模を問わずに動作しま す。Hadoop は MapReduce というプログラミングモデルに基づいて複数のサーバに処理を分散させ ます。また HDFS という分散ファイルシステムを実装しており、データを複数のサーバにまたがって 格納できます。Hadoop はクラスター内の各サーバの稼働状況を監視し、1 つまたは複数のノードが障 害を起こしても自動的に復帰させます。このように、Hadoop は処理能力やストレージ性能を向上さ せるだけでなく、高い可用性も提供するものです。 詳細については http://hadoop.apache.org をご覧ください。 トピック • MapReduce (p. 8) • HDFS (p. 8) 7 Amazon EMR 開発者ガイド ノード • ジョブおよびタスク (p. 8) • Hadoop アプリケーション (p. 8) MapReduce MapReduce は、分散コンピューティングのためのプログラミングモデルです。これは全てのロジッ クを Map と Reduce という 2 つの機能以外に集約することで、並行分散アプリケーションを書くプロ セスを単純化するものです。Map 機能は「中間結果」と呼ばれるキーと値のペアにデータをマップし ます。Reduce 機能は中間結果を集計し、追加アルゴリズムを適用して、最終出力を発生させます。 詳細については、http://wiki.apache.org/hadoop/HadoopMapReduce をご覧ください。 HDFS Hadoop Distributed File System(HDFS)は Hadoop が採用する、分散型のスケーラブルでポータブ ルなファイルシステムです。HDFS はデータをクラスター内の各サーバに分散して格納します。デー タの複数のコピーが複数のサーバに格納されるため、個々のサーバが障害を起こしてもデータが失わ れることはありません。HDFS はエフェメラルストレージであり、クラスターを終了するときに消去 されます。HDFS は MapReduce 処理中に中間結果をキャッシュしたり、長期間稼働するクラスター のためのデータウェアハウスを構築したりするのに便利です。 詳細については、http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/ HdfsUserGuide.html を参照してください。 Amazon EMR では、Hadoop が拡張され、Amazon S3 に格納されたデータをまるで HDFS のように 参照できるようになりました。クラスターではファイルシステムとして HDFS または Amazon S3 の いずれかを使用できます。ただし、中間結果を Amazon S3 に格納する場合は、クラスター内のすべ てのスレーブノードと Amazon S3 との間でそれぞれデータストリームが発生することに留意してく ださい。この場合、Amazon S3 に対する秒当たり 200 トランザクションという制限を超えてしまう 可能性があります。ほとんどの場合、Amazon S3 は入力データおよび出力データを格納する場合に使 用され、中間結果は HDFS に格納されます。 ジョブおよびタスク Hadoop では、ジョブはワークの単位です。各ジョブを 1 つ以上のタスクで構成し、成功するまで各 タスクを 1 回または複数回試行することが可能です。Amazon EMR では Hadoop に「ステップ」とい う新しいワークの単位が追加されています。ステップには 1 つまたは複数の Hadoop ジョブを含める ことができます。詳細については、「ステップ (p. 9)」を参照してください。 クラスターにはさまざまな方法でワークをサブミットできます。詳細については、「クラスターに ワークを送信する方法 (p. 10)」を参照してください。 Hadoop アプリケーション Hadoop は一般的なオープンソースの分散型コンピューティングアーキテクチャで す。Hive、Pig、HBase など、その他のオープンソースアプリケーションは Hadoop 上で動作してお り、これらはクラスターに保存されたデータのクエリやデータウェアハウス機能などを付加すること で、自身の機能を強化します。 詳細については、「Hive と Amazon EMR (EMR 3.x リリース) (p. 247)」、「Apache Pig (p. 309)」、および「Apache HBase (p. 317)」を参照してください。 ノード Amazon EMR では、クラスターでのサーバーに対する 3 つのロールを定義しています。この 3 種類 のロールは、ノードタイプとして参照されます。Amazon EMR ノードタイプは、Hadoop で定義され ているマスターロールとスレーブロールにマップされます。 8 Amazon EMR 開発者ガイド ステップ • マスターノード – クラスターの管理: コアおよびタスクインスタンスグループへの MapReduce 実行 可能ファイルおよび raw データのサブセットのディストリビューションを調整します。また、実行 される各タスクのステータスを追跡し、インスタンスグループの状態を監視します。クラスターに マスターノードは 1 つしか存在しません。これは Hadoop マスターノードにマップされます。 • コアノード – Hadoop Distributed File System(HDFS)を使用してタスクを実行し、データを格納 します。これは Hadoop スレーブノードにマップされます。 • タスクノード(オプション) – タスクを実行します。これは Hadoop スレーブノードにマップされ ます。 詳細については、「インスタンスグループ (p. 35)」を参照してください。以前のクラスターをイン スタンスグループにマッピングする方法については、「レガシークラスターのインスタンスグループ へのマッピング (p. 500)」を参照してください。 ステップ Amazon EMR ではステップと呼ばれるワークの単位を定義します。これには 1 つ以上の Hadoop ジョ ブを含むことができます。ステップは、データを操作する指示です。例えば、暗号化されたデータを 処理するクラスターには、以下のステップが含まれる場合があります。 • ステップ 1: データの復号化 • ステップ 2: データの処理 • ステップ 3: データの暗号化 • ステップ 4: データの保存 ステップの状態をチェックすることによって、その進捗状況を追跡できます。次の図に、一連のス テップの処理を示します。 クラスターは、1 つ以上のステップで構成されます。ステップは、クラスター内でリストされている 順番で処理されます。ステップは以下の順に実行されます。すべてのステップには PENDING に設定 9 Amazon EMR 開発者ガイド クラスター された状態があります。最初のステップが実行され、そのステップの状態が RUNNING に設定されま す。ステップが完了すると、ステップの状態は COMPLETED に変更されます。キュー内にある次のス テップが実行され、そのステップの状態は RUNNING に設定されます。各ステップが完了すると、そ のステップの状態は COMPLETED に設定され、キュー内にある次のステップが実行されます。残りの ステップがなくなるまで、ステップは実行されます。処理フローがクラスターに戻ります。 ステップが失敗すると、そのステップの状態は FAILED になり、状態が PENDING である残りのすべ てのステップは CANCELLED とマークされます。それ以上のステップは実行されず、処理はクラス ターに返されます。 データが 1 つのステップから次のステップに渡されるときは、通常、クラスターの Hadoop Distributed File System(HDFS)に格納されるファイルが使用されます。HDFS に格納されるデータ は、クラスターが実行されている間だけ存在します。クラスターがシャットダウンされると、すべて のデータは削除されます。クラスターの最後のステップでは、通常、Amazon S3 バケットに処理結果 が保存されます。 ステップのすべての状態のリストについては、『Amazon EMR API Reference』の 「StepExecutionStatusDetail」データタイプを参照してください。 AMI 3.1.1(Hadoop 2.x)および AMI 2.4.8(Hadoop 1.x)以降、クラスターで使用できる保留中のス テップとアクティブなステップの最大数は 256 です(これには、Pig のインストール、Hive のインス トール、HBase のインストール、デバッグの設定などのシステムステップも含まれます)。これらの AMI を使用して作成された長時間稼働クラスターが存続する間は、送信できるステップの数に制限は ありませんが、任意の時点でアクティブまたは保留中にできるステップは 256 ステップまでです。ス テップをクラスターに追加する方法の詳細については、「クラスターへの作業の送信 (p. 504)」を参 照してください。 クラスター クラスターは、ワークを実行する一連のサーバーです。Amazon EMR では、クラスターは EC2 イン スタンスとして動作する仮想サーバーセットとなります。 クラスターにワークを送信する方法 Amazon EMR でクラスターを実行する場合、行う必要があるワークを指定する方法についてはいくつ かのオプションがあります。 • Map および Reduce 機能で行うワークの定義全体を指定します。これは、通常、一定量のデータを 処理し処理が完了したときに終了するクラスターに対して実行されます。詳細については、「デー タを処理する Hadoop アプリケーションの実行 (p. 235)」を参照してください。 • 長時間稼働クラスターを作成し、コンソール、Amazon EMR API、AWS CLI、または Amazon EMR CLI を使用してステップを送信します。ステップには、1 つ以上の Hadoop ジョブが含まれている 場合があります。詳細については、「クラスターへの作業の送信 (p. 504)」を参照してください。 • Hive、Pig、HBase などの Hadoop アプリケーションがインストールされているクラスターを作成 し、アプリケーションによって提供されるインターフェイスを使用してクエリを送信します(ス クリプト化してまたは対話形式で)。詳細については、「Hive と Amazon EMR (EMR 3.x リリー ス) (p. 247)」、「Apache Pig (p. 309)」、および「Apache HBase (p. 317)」を参照してくだ さい。 • 長時間稼働クラスターを作成して接続し、Hadoop API を使用して Hadoop ジョブをサブミット します。詳細については、http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/ JobClient.htmlを参照してください。 クラスターのライフサイクル 次の図に、クラスターのライフサイクルと、各ステージが特定のクラスターの状態にマップされる方 法を示します。 10 Amazon EMR 開発者ガイド クラスター 成功する Amazon EMR(Amazon EMR)クラスターは、このプロセスをたどります。最初 に、Amazon EMR が Hadoop クラスターを提供します。このフェーズの間、クラスターの状態は STARTING です。次に、ユーザー定義のブートストラップアクションがあれば、それが実行されま す。このフェーズの間、クラスターの状態は BOOTSTRAPPING です。 Note クラスターがこの段階に達すると、プロビジョニングされた EC2 インスタンスに対する請求 が発生します。 すべてのブートストラップアクションが完了すると、クラスターの状態は RUNNING になります。こ のフェーズの間、ジョブフローはすべてのクラスターステップを順番に実行します。 キープアライブを有効にすることにより、クラスターを長時間稼働クラスターとして設定した場合、 クラスターは処理が完了した後に WAITING 状態になり、次の命令セットを待機します。詳細につい ては、クラスターにワークを送信する方法 (p. 10) および クラスターのライフサイクル(長時間稼 働または一時的)を選択する (p. 160) を参照してください。それ以上クラスターを必要としない場 合は、クラスターを手動で終了させる必要があります。 クラスターを一時的なクラスター として設定した場合、すべてのステップが完了した後でクラスター は自動的にシャットダウンします。 エラーなしでクラスターが終了した場合、状態は SHUTTING_DOWN に移行し、クラスターはシャット ダウンします。これによって仮想サーバーインスタンスも終了します。クラスターに保存されている データはすべて削除されます。Amazon S3 バケットなどの他の場所に格納されている情報は残りま す。最後に、クラスターのすべてのアクティビティが完了すると、クラスターの状態は COMPLETED としてマークされます。 終了保護が有効になっていない場合は、クラスタープロセス中に障害が発生すると、それによってク ラスターとそのすべての仮想サーバーインスタンスが終了します。クラスターに保存されているデー タはいずれも削除されます。クラスターの状態は、FAILED としてマークされます。詳細について は、「クラスター終了の管理 (p. 481)」を参照してください。 クラスターのすべての状態のリストについては、『Amazon EMR (Amazon EMR) API ReferenceAmazon EMR API Reference』の「JobFlowExecutionStatusDetail」データタイプを参照し てください。 11 Amazon EMR 開発者ガイド Amazon EMR と連携できるツールは何か Amazon EMR と連携できるツールは何か Amazon EMR とやり取りする方法はいくつかあります。 • コンソール – クラスターの起動と管理に使用できるグラフィカルインターフェイス。起動するク ラスターの詳細をウェブフォームに入力することで指定し、既存のクラスターの詳細を確認し、 クラスターのデバッグや終了を行うことができます。コンソールは、初めて Amazon EMR を使う 場合にもっとも簡単な方法です。プログラミングの知識は一切不要です。コンソールは、https:// console.aws.amazon.com/elasticmapreduce/ からオンラインで入手できます。 • AWS CLI (コマンドラインインターフェイス) – Amazon EMR に接続し、クラスターを作成して 管理するためにローカルマシンで実行するクライアントアプリケーション。AWS CLI には、機能が 豊富な Amazon EMR 固有のコマンド一式が含まれています。これを利用すると、クラスターの起 動と管理のプロセスをスクリプトで自動化できます。AWS CLI はコマンドラインから作業したい 方に最適の選択肢です。AWS CLI の使用方法の詳細については、http://docs.aws.amazon.com/cli/ latest/reference/emr を参照してください。 • Amazon EMR CLI - Amazon EMR に接続し、クラスターを作成して管理するためにローカルマシ ンで実行するレガシークライアントアプリケーション。これを利用すると、クラスターの起動と 管理のプロセスをスクリプトで自動化できます。Amazon EMR CLI は機能の開発が完了していま す。Amazon EMR CLI をご利用の場合は、AWS CLI に移行することをお勧めします。新しいユー ザーは、Amazon EMR CLI ではなく AWS CLI をダウンロードする必要があります。Amazon EMR CLI の使用方法の詳細については、「Amazon EMR のコマンドラインインターフェイスリファレン ス (p. 617)」を参照してください。 • Software Development Kit(SDK) – AWS は、Amazon EMR を呼び出してクラスターを作成し、 管理する機能を SDK に提供します。これを利用すると、クラスターの作成や管理のプロセスを自 動化するアプリケーションを作成できます。Amazon EMR の機能を拡張したりカスタマイズするに は、SDK が最適の選択肢です。http://aws.amazon.com/sdkforjava/ から、Java 用 AWS SDK をダ ウンロードできます。AWS SDK の詳細については、現在の AWS SDK のリストを参照してくださ い。ライブラリは、Java、C#、VB.NET、PHP に利用できます。詳細については、「Sample Code & Libraries」(http://aws.amazon.com/code/Elastic-MapReduce)を参照してください。 • Web Service API – AWS は、JSON を使用して直接ウェブサービスを呼び出すことができる低レベ ルインターフェイスを提供します。Amazon EMR を呼び出すカスタム SDK を作成するには、この API が一番の選択肢です。詳細については、Amazon EMR API Reference を参照してください。 次の表に、Amazon EMR インターフェイスの機能の比較を示します。 機能 コンソール AWS CLI API、SDK、 ライブラリ 複数のクラスターの作成 クラスターでのブートストラップアクションの作成 グラフィックインターフェイスを使って Hadoop ジョ ブ、タスク、およびタスクの試行のログを表示 Hadoop データ処理のプログラムによる実装 リアルタイムでのクラスターのモニタリング 12 Amazon EMR 開発者ガイド Amazon EMR とともに使用する Hadoop と AWS 製品についてさらに学習する 機能 コンソール 冗長なクラスターの詳細を提供 AWS CLI API、SDK、 ライブラリ 実行中のクラスターのサイズ変更 複数のステップがあるクラスターの実行 Hadoop、Hive、Pig のバージョンの選択 複数のコンピュータ言語での MapReduce 実行可能ファイ ルの指定 データを処理する EC2 インスタンスの数とタイプの指定 Amazon S3 との間におけるデータの自動的な転送 クラスターの終了 Amazon EMR とともに使用する Hadoop と AWS 製品についてさらに学習する • Hadoop. Hadoop についての詳細は、次のアドレスを参照してください:http://hadoop.apache.org/ core/ • Amazon Elastic Compute Cloud(Amazon EC2)、Amazon Simple Storage Service(Amazon S3)、および CloudWatch詳細については、それぞれ Linux インスタンス用 Amazon EC2 ユーザー ガイド、Amazon Simple Storage Service 開発者ガイド、Amazon SimpleDB 開発者ガイド、および Amazon CloudWatch ユーザーガイド を参照してください。 13 Amazon EMR 開発者ガイド ご利用開始にあたって このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このチュートリアルでは、コンソールを使用して長時間稼働 Amazon EMR クラスターを起動しま す。このチュートリアルで使用するコンソールの他にも、Amazon EMR はコマンドラインクライアン ト(REST に似た API)といくつかの SDK を提供し、お客様はこれらを利用してクラスターの起動と 管理を行えます。これらのインターフェイスの詳細については、「Amazon EMR と連携できるツール は何か (p. 12)」を参照してください。 クラスターを起動した後、一連の CloudFront ウェブディストリビューションのログファイルを分析す るために Hive スクリプトを実行します。スクリプトを実行した後、Hue ウェブインターフェイスを 使用してデータをクエリします。 チュートリアル費用 このチュートリアルを完了すると発生する AWS 利用料金は、3 個の m3.xlarge インスタンスを含む Amazon EMR クラスターを 1 時間実行する費用およびログと出力データを Amazon S3 に保存する費 用を含みます。このチュートリアルの全費用は約 $1.05 です(リージョンによって異なります)。実 際の費用はこの見積りと多少異なる場合があります。 サービス料金はリージョンによって異なります。新規のお客様の場合、無料利用枠で許可されている 容量を使用したことがなければ、AWS 使用の最初の 1 年間は、Amazon S3 のストレージ料金が自動 的に免除されます。このチュートリアルに起因する Amazon EC2 と Amazon EMR の料金は無料使用 枠には含まれませんが、ごくわずかです。 AWS 利用料金は変更されますのでご了承ください。現行の料金情報の詳細については、AWS Service Pricing Overview を参照し、AWS Simple Monthly Calculator を使用して利用料金を見積もりくださ い。 トピック • ステップ 1: AWS アカウントの作成 (p. 15) • ステップ 2: クラスターログおよび出力データ用 Amazon S3 バケットの作成 (p. 15) • ステップ 3: Amazon EMR クラスターの起動 (p. 16) • ステップ 4: Hive スクリプトをステップとして実行する (p. 22) • ステップ 5: Hue を使用したデータのクエリ (p. 25) • (オプション)ステップ 6: Amazon EMR の確認 (p. 27) 14 Amazon EMR 開発者ガイド ステップ 1: AWS アカウントの作成 • (オプション)ステップ 7: チュートリアルで使用したリソースの削除 (p. 29) ステップ 1: AWS アカウントの作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 開始する前に、AWS アカウントが必要です。アカウントをお持ちの場合は次の手順に進んでくださ い。 AWS アカウントをお持ちでない場合は、次に説明する手順に従ってアカウントを作成してください。 AWS にサインアップするには 1. https://aws.amazon.com/ を開き、[AWS アカウントの作成] を選択します。 2. オンラインの手順に従います。 アカウントがアクティブになり、使用可能な状態になったら、AWS から Eメールで通知されま す。AWS アカウントからすべてのサービスにアクセスできますが、料金はリソースを利用した分のみ に課金されます。 コンソールにアクセスするには、IAM ユーザー名とパスワードを使用し、IAM サインインページ か らAWS マネジメントコンソールにサインインします。IAM では、AWS アカウントでの AWS サー ビスとリソースへのアクセスを安全に制御できます。 アクセスキーの作成の詳細については、AWS General Reference の「How Do I Get Security Credentials?」を参照してください。 ステップ 2: クラスターログおよび出力データ用 Amazon S3 バケットの作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は Amazon S3 を使用して入力データ、ログファイル、および出力データを格納できま す。Amazon S3 は、これらのストレージロケーションをバケットとして参照します。このセクション では、Amazon S3 コンソールを使用して、クラスターログおよび出力データを格納するバケットを 作成する方法について説明します。Hadoop で Amazon S3 を使用することの詳細については、http:// wiki.apache.org/hadoop/AmazonS3 を参照してください。 クラスターログのパスを作成するかどうかはオプションです。コンソールを使用してクラスターを起 動するとき、Amazon S3 ログの場所を指定しない場合は、自動的に生成されます。 コンソールを使用して Amazon S3 バケットを作成するには 1. https://console.aws.amazon.com/s3/ にある Amazon S3 コンソールを開きます。 2. [Create Bucket] を選択します。 3. [Create a Bucket] ダイアログボックスで: • 「myemrbucket」などのバケット名を入力します。バケット名はグローバルに一意である必要 があります。入力した名前が別のバケットで使用されている場合は、異なる名前を入力してく ださい。 15 Amazon EMR 開発者ガイド ステップ 3: Amazon EMR クラスターの起動 Note Hadoop の要件により、Amazon EMR で使用する Amazon S3 バケット名には、小文 字、数字、ピリオド(.)、およびハイフン(-)のみを含めることができます。また、 バケット名の末尾に数字は使用できません。 • [Region] で、バケットのリージョンを選択します。リージョン間の帯域幅に対して料金が発 生しないようにするには、クラスターと同じリージョン内に Amazon S3 バケットを作成しま す。 4. [Create] を選択します。 5. リストでバケット名を選択し、[Create Folder] を選択します。 6. [Name] に「output」と入力して Enter キーを押します。これにより、出力データ用に次のパス が作成されます。s3: //myemrbucket/output. 7. (オプション) 再度 [Create Folder] を選択します。 8. [Name] に「logs」と入力して、Enter キーを押します。これにより、クラスターログ用に次のパ スが作成されます。s3: //myemrbucket/logs Note この手順は省略可能です。クラスターを起動する前に /logs フォルダを作成しない場 合、コンソールは [Log folder S3 location] フィールドの入力内容に基いてフォルダを生成 します。またはコンソールにログのパスを自動的に生成させることもできます。 ステップ 3: Amazon EMR クラスターの起動 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次のステップは、Amazon EMR クラスターの起動です。クラスターを起動するとき、計算処理を実 行するために Amazon EMR が Amazon EC2 インスタンス(仮想サーバー)をプロビジョニングし ます。これらのインスタンスは、Amazon EMR 用にカスタマイズされた Amazon マシンイメージ (AMI)を使用して作成されます。AMI には Hadoop とそのほかのビッグデータアプリケーションが 事前にロードされています。 Amazon EMR クラスターを起動するには コンソールを使用する クラスターログを維持する必要がない場合は、ログ作成オプションを無効にできます。 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Create Cluster] ページの [Cluster Configuration] セクションで、オプションをデフォルトのまま 使用します。次の表にこれらのオプションの定義を示します。 フィールド アクション クラスター名 クラスターの作成時には、デフォルト名は "My cluster" になります。 クラスターにはわかりやすい名前を入力することもできます。この名 前はオプションです。また、一意である必要はありません。 終了保護 デフォルトでは、コンソールを使用して作成したクラスターは、終了 保護が有効になっています ([Yes] に設定されています)。終了保護を有 効にすると、事故やエラーのためにクラスターがシャットダウンしま せん。 16 Amazon EMR 開発者ガイド ステップ 3: Amazon EMR クラスターの起動 フィールド アクション 通常、アプリケーションの作成中 (クラスターを終了するようなエラー を除去するため)、また長時間実行するクラスターを保護する場合、ま たはデータを保護する場合にのみ、終了保護を有効にします。 詳細については、「クラスター終了の管理 (p. 481)」を参照してくだ さい。 ログ記録 デフォルトでは、コンソールを使用して作成したクラスターは、ログ 作成が有効になってます。このオプションでは、Amazon EMR が詳細 なログデータを Amazon S3 に書き込むかどうかを指定します。 この値が設定されると、Amazon EMR はクラスターの EC2 インスタ ンスからのログファイルを Amazon S3 にコピーします。Amazon S3 へのログ作成は、クラスターの作成時にのみ有効にできます。 Amazon S3 へのログ作成により、クラスターの終了時およびクラス ターをホストしている EC2 が終了してもログファイルが失われるのを 回避できます。これらのログは、トラブルシューティングに役立ちま す。 詳細については、「ログファイルを表示する (p. 426)」を参照してく ださい。 ログフォルダ S3 の場 所 「s3://myemrbucket/logs」などを入力するかまたは Amazon S3 バケットを参照して Amazon EMR ログを保存するか、Amazon EMR を使用して Amazon S3 パスを生成できます。バケットに存在しない フォルダの名前を入力した場合、そのフォルダは自動的に作成されま す。 デバッグ ログ作成をデフォルトのまま有効にすると、デバッグも有効になりま す。このオプションでは、デバッグメッセージ処理のために Amazon SQS 交換が生成されます。SQS の詳細については、「Amazon SQS」製品情報ページを参照してください。デバッグの詳細について は、「デバッグオプション情報 (p. 208)」を参照してください。 4. [Tags] セクションで、オプションを空白のままにします。このチュートリアルでは、タグを使 用しません。タグ付けを使用すると、キーと値のペアを使用してリソースを分類することができ ます。Amazon EMR クラスターのタグは、基盤となる Amazon EC2 インスタンスに反映されま す。 5. [Software Configuration] セクションで、オプションをデフォルトのまま使用します。次の表にこ れらのオプションの定義を示します。 フィールド アクション Hadoop ディスト このオプションでは、クラスターで実行する Hadoop のディストリビュー リビューション ションを指定します。デフォルトでは、Hadoop の Amazon ディストリ ビューションが選択されていますが、MapR ディストリビューションのいず れかを実行するように選択することもできます。 MapR の詳細については、「Hadoop 用 MapR ディストリビューションを使 用する (p. 224)」を参照してください。 AMI のバージョ ン Amazon Elastic MapReduce (Amazon EMR) では、クラスターを実行する ために起動する EC2 インスタンスを、Amazon Machine Images (AMI) を 使用して初期化します。AMI には、Linux オペレーティングシステムである Hadoop と、クラスターを実行するために使用するその他のソフトウェア が含まれています。これらの AMI は Amazon EMR に固有であり、クラス 17 Amazon EMR 開発者ガイド ステップ 3: Amazon EMR クラスターの起動 フィールド アクション ターを実行するときにのみ使用されます。デフォルトでは、最新の Hadoop 2.x AMI が選択されます。リストから、特定の Hadoop 2.x AMI または特定 の Hadoop 1.x AMI を選択することもできます。 選択した AMI により、クラスターで実行する Hadoop および Hive または Pig などその他のアプリケーションのバージョンが決定されます。コンソー ルを使用して AMI を選択した場合、廃止された AMI はリストに表示されま せん。 Windows AMI の選択について詳しくは、「Amazon マシンイメージ (AMI) (p. 56)」を参照してください。 6. インストールす るアプリケー ション 最新の Hadoop 2.x AMI を選択すると、Hive、Pig、Hue はデフォルトでイ ンストールされます。インストールされるアプリケーションとアプリケー ションバージョンは、選択した AMI によって異なります。事前選択された アプリケーションを削除するには、[Remove] アイコンを選択します。 追加のアプリ ケーション このオプションにより、追加のアプリケーションをインストールすること ができます。AMI を選択した場合、AMI で利用できないアプリケーション はリストに表示されません。 [File System Configuration] セクションで、EMRFS のオプションをデフォルトのまま使用し ます。EMRFS は、Amazon EMR クラスターでデータを Amazon S3 に保存できるようにする HDFS の実装です。次の表に EMRFS のデフォルトのオプションの定義を示します。 フィールド アクション サーバー側の暗 号化 コンソールを使用してクラスターを作成するときに、サーバー側の暗号化 はデフォルトで選択解除されています。このオプションでは、EMRFS の Amazon S3 でのサーバー側の暗号化を有効にすることができます。 整合性のある ビュー コンソールを使用してクラスターを作成するとき、整合性のあるビュー はデフォルトで選択解除されています。このオプションを使用する と、EMRFS の整合性のあるビューを有効にできます。有効にした場 合、EMRFS メタデータストア、再試行回数、および再試行期間を指定する 必要があります。 EMRFS の詳細については、「EMR ファイルシステム(EMRFS)(オプ ション) (p. 135)」を参照してください。 7. [Hardware Configuration] セクションで、Core EC2 インスタンスタイプに m3.xlarge を選択し、 残りのオプションをデフォルトのまま使用します。次の表にこれらのオプションの定義を示しま す。 Note AWS アカウントあたりのデフォルトの最大ノード数は 20 です。クラスターが 2 つある 場合、両方のクラスターに対して実行するノード数は合わせて 20 個以下にする必要があ ります。この制限を超えるとクラスターエラーが発生します。20 個を超えてノードが必 要な場合は、Amazon EC2 インスタンス制限を増やすようにリクエストを送信する必要 があります。リクエストされた制限の増加に、ニーズにおける一時的な未計画の増加に 対応するための十分な容量があることを確認します。詳細については、「Amazon EC2 インスタンス上限緩和申請」を参照してください。 18 Amazon EMR 開発者ガイド ステップ 3: Amazon EMR クラスターの起動 フィールド アクション ネットワーク コンソールを使用してクラスターを作成した場合、デフォルトの VPC が自 動的に選択されます。追加の VPC がある場合は、リストから他の VPC を 選択できます。 デフォルト VPC の詳細については、「デフォルトの VPC とサブネット」 を参照してください。 EC2 サブネット デフォルトでは [No preference] が選択されており、これにより Amazon EMR でランダムなサブネットを選択できます。または、リストから特定の VPC サブネットを選択することもできます。 VPC サブネットの選択についての詳細は、「クラスターの Amazon VPC サ ブネットを選択する (p. 209)」を参照してください。 マスター マスターインスタンスは、Hadoop タスクをコアとタスクノードに割り当 て、ステータスをモニタリングします。Amazon EMR クラスターには、1 個のマスターノードを含める必要があります。マスターノードは、マス ターインスタンスグループに含まれています。 Amazon EMR インスタンスグループの詳細については、「インスタンスグ ループ (p. 35)」を参照してください。 • EC2 インスタンスタイプでは、Amazon EMR マスターノードの起動に使 用する仮想サーバーのタイプを指定します。選択したインスタンスタイ プによって、ノードの仮想コンピューティング環境 (処理能力、ストレー ジ容量、メモリなど) が決まります。 Amazon EMR でサポートされるインスタンスタイプの詳細については、 「仮想サーバー設定」を参照してください。 Hadoop 2.x のデフォルトのマスターインスタンスタイプは m3.xlarge で す。このインスタンスタイプは、テストや開発など、負荷の軽いワーク ロードに適しています。 • デフォルトでは、マスターノードの [Count] は [1] に設定されます。現 在、クラスターごとにマスターノードは 1 つしか存在しません。 • [Request spot] は、デフォルトではオフになっています。このオプション は、マスターノードをスポットインスタンス上で実行するかどうかを指 定します。 スポットインスタンスの使用の詳細については、「(オプション)ス ポットインスタンスでコストを削減する (p. 43)」を参照してくださ い。 19 Amazon EMR 開発者ガイド ステップ 3: Amazon EMR クラスターの起動 フィールド アクション コア コアインスタンスは、Hadoop タスクを実行し、Hadoop 分散ファイルシス テム (HDFS) を使用してデータを保存します。クラスターは、少なくとも 1 個のコアノードを含む必要があります。コアノードは、コアインスタンス グループに含まれています。 Amazon EMR インスタンスグループの詳細については、「インスタンスグ ループ (p. 35)」を参照してください。 • EC2 インスタンスタイプでは、Amazon EMR コアノードの起動に使用す る仮想サーバーのタイプを指定します。選択したインスタンスタイプに よって、ノードの仮想コンピューティング環境 (処理能力、ストレージ容 量、メモリなど) が決まります。 Amazon EMR でサポートされるインスタンスタイプの詳細については、 「仮想サーバー設定」を参照してください。 Hadoop 2.x のデフォルトのコアインスタンスタイプは、m1.large です。 これを必ず m3.xlarge に変更してください。m1.large インスタンスタイ プは、一部のリージョンで利用できない場合があります。m3.xlarge イン スタンスタイプは、テストや開発など、負荷の軽いワークロードに適し ています。 • デフォルトでは、コアノードの [Count] は [2] に設定されています。 • [Request spot] は、デフォルトではオフになっています。このオプション は、コアノードをスポットインスタンス上で実行するかどうかを指定し ます。 スポットインスタンスの使用の詳細については、「(オプション)ス ポットインスタンスでコストを削減する (p. 43)」を参照してくださ い。 20 Amazon EMR 開発者ガイド ステップ 3: Amazon EMR クラスターの起動 フィールド アクション タスク タスクインスタンスは、Hadoop タスクを実行します。タスクインスタンス では、HDFS を使用してデータを保存しません。タスクノードを使用した場 合、これらのノードはタスクインスタンスグループに含まれています。 Amazon EMR インスタンスグループの詳細については、「インスタンスグ ループ (p. 35)」を参照してください。 • EC2 インスタンスタイプでは、Amazon EMR タスクノードの起動に使用 する仮想サーバーのタイプを指定します。選択したインスタンスタイプ によって、ノードの仮想コンピューティング環境 (処理能力、ストレージ 容量、メモリなど) が決まります。 Amazon EMR でサポートされるインスタンスタイプの詳細については、 「仮想サーバー設定」を参照してください。 Hadoop 2.x のデフォルトのタスクインスタンスタイプは、m1.medium で す。このインスタンスタイプは、テストや開発など、負荷の軽いワーク ロードに適しています。 • デフォルトでは、タスクノードの [Count] は [0] に設定されていま す。Amazon EMR でのタスクノードの使用は任意です。タスクノードの インスタンス数を 0 にすると、タスクインスタンスグループは作成され ません。 • [Request spot] は、デフォルトではオフになっています。このオプション は、タスクノードをスポットインスタンス上で実行するかどうかを指定 します。 スポットインスタンスの使用の詳細については、「(オプション)ス ポットインスタンスでコストを削減する (p. 43)」を参照してくださ い。 8. [Security and Access] セクションの [EC2 key pair] で、リストからキーペアを選択し、残りのオ プションをデフォルトのまま使用します。次の表にこれらのオプションの定義を示します。 フィールド アクション EC2 key pair デフォルトでは、キーペアオプションは [Proceed without an EC2 key pair] に設定されます。このオプションにより、マスター、コア、およびタスク ノードへの接続での SSH の使用が回避されます。リストから Amazon EC2 キーペアを選択します。 SSH を使用してマスターノードに接続する方法の詳細について は、Amazon EMR 管理ガイド の「SSH を使用してマスターノードに接続 する (p. 459)」を参照してください。 IAM ユーザーア クセス デフォルトでは、[All other IAM users] が選択されています。このオプショ ンより、クラスターが AWS アカウントのすべての IAM ユーザーから表示 およびアクセス可能になります。 [No other IAM users] を選択すると、クラスターへのアクセスが現在の IAM ユーザーに制限されます。 クラスターアクセスの設定の詳細については、「IAM ロールを使用した ユーザーアクセス権限の設定 (p. 179)」を参照してください。 IAM; ロール [Default] が自動的に選択されます。このオプションを使用すると、デフォル トの EMR ロールとデフォルトの EC2 インスタンスプロファイルが生成さ 21 Amazon EMR 開発者ガイド ステップ 4: Hive スクリプトをステップとして実行する フィールド アクション れます。EMR ロールと EC2 インスタンスプロファイルは、コンソールを使 用してクラスターを作成するときに必要になります。 [Custom] では、独自の EMR ロールや EC2 インスタンスプロファイルを指 定できます。 Amazon EMR での IAM ロールの使用に関する詳細については、「IAM およ びアプリケーションの Amazon EMR ロールを設定する (p. 186)」を参照 してください。 9. [Bootstrap Actions] セクションで、デフォルトのオプション (なし) をそのまま使用します。ブー トストラップアクションは、Hadoop が各クラスターノード上で開始される前にセットアップ中 に実行されるスクリプトです。これらのアクションを使用して、追加のソフトウェアをインス トールし、アプリケーションをカスタマイズできます。このチュートリアルでは、ブートスト ラップアクションを使用しません。 ブートストラップアクションの使用の詳細については、「(オプション)追加のソフトウェアを インストールするためのブートストラップアクションの作成 (p. 121)」を参照してください。 10. [Steps] セクションで、オプションをデフォルトのまま使用します。次の表にこれらのオプション の定義を示します。 フィールド アクション ステップの追加 デフォルトでは、ユーザー定義のステップは設定されません。 ステップは、クラスターに送信する作業のユニットです。ステップには、1 つ以上の Hadoop ジョブか、アプリケーションのインストールまたは設定 指示が含まれています。 自動終了 デフォルトでは、自動終了が [No] に設定されています。これにより、クラ スターは終了するまで実行を続けます。 [Yes] に設定した場合、最後のステップが完了すると、クラスターが自動的 に終了されます。 クラスターに作業を送信する方法については、「クラスターへの作業の送 信 (p. 504)」を参照してください。 11. [Create cluster] を選択します。 12. [Cluster Details] ページで、Hive スクリプトをクラスターのステップとして実行し、Hue ウェブ インターフェイスを使用してデータをクエリするには、以下のステップに進みます。 ステップ 4: Hive スクリプトをステップとして実 行する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hue ウェブインターフェイスでデータをクエリする前に、Hive のテーブルにサンプルデータをロード して Amazon S3 に出力を書き込むクエリを送信する Hive スクリプトを実行します。スクリプトが完 了したら、出力データを確認します。 22 Amazon EMR 開発者ガイド Hive スクリプトの概要 Amazon EMR コンソールを使用して、Hive スクリプトをステップとして実行します。ステップと は、1 つ以上の Hadoop ジョブを含む作業単位です。スクリプトは Amazon S3 に格納された一連のサ ンプル CloudFront を読み込んでクエリします。 クラスターの作成時または稼働時(長時間稼働クラスターの場合)にクラスターにステップを送信で きます。このチュートリアルでは、コンソールを使用して実行中のクラスターに Hive のステップを送 信します。AWS CLI、API、または SDK を使用してステップを送信することもできます。 このモデル(ステップを使用してクラスターに作業をプログラム的に送信する)は、バッチ処理 を自動化している場合や後で分析するためにデータを処理する必要がある場合に便利です。たとえ ば、Hive のステップを使用して、後の分析と可視化のためにデータウェアハウスにデータをロードで きます。 Hive スクリプトの概要 このチュートリアルで使用されている Hive スクリプトは、一連の CloudFront ウェブディストリ ビューションのログファイルを読み込みます。ログファイルの各エントリには、次の形式で単一ユー ザーのリクエストに関する詳細が記載されています。 2014-07-05 20:00:00 LHR3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net / test-image-1.jpeg 200 - Mozilla/5.0%20(MacOS;%20U;%20Windows%20NT%205.1; %20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9 CloudFront ログの詳細については、『Amazon CloudFront 開発者ガイド』を参照してください。 このチュートリアルで実行する Hive スクリプトは、正規表現のシリアライザー/デシリアライザー (RegEx SerDe)を使用して CloudFront ログ入力を解析し、cloudfront_logs という名前の外部 Hive テーブルに書き込みます。テーブルを作成する Hive コードは次のようになります。 CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( Date Date, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, OS String, Browser String, BrowserVersion String ) RegEx SerDe を使用してログファイルを分析する Hive コードは次のようになります。 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\ \s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\ \s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://us-west-2.elasticmapreduce.samples/cloudfront/data/'; テーブルを作成すると、Hive スクリプトは、特定の期間のオペレーティングシステムごとのリクエス ト合計を取得する HiveQL クエリをデータに対して送信します。 23 Amazon EMR 開発者ガイド Hive スクリプトをステップとして送信する SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY os; クエリの結果は以前に作成した Amazon S3 バケットに書き込まれます。 Hive スクリプトをステップとして送信する コンソールを使用してクラスターに Hive スクリプトを送信するには、[Add Step] オプションを使用し ます。スクリプトで使用する Hive スクリプトとサンプルデータはお客様の Amazon S3 にアップロー ドされています。 Note スクリプトを実行する前に 「ステップ 2: クラスターログおよび出力データ用 Amazon S3 バ ケットの作成 (p. 15)」を完了する必要があります。 Hive スクリプトをステップとして送信するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] で、クラスターの名前を選択します。 3. 4. [Steps] セクションまでスクロールして展開し、[Add step] を選択します。 [Add Step] ダイアログボックスで、次のようにします。 • [Step type] では、[Hive program] を選択します。 • [Name] には、デフォルト名(Hive program)を使用するか、または新しい名前を入力します。 • [Script S3 location] には、「s3://[yourregion].elasticmapreduce.samples/ cloudfront/code/Hive_CloudFront.q」と入力します。 [yourregion](括弧を含みます)をお客様のリージョンで置き換えます。たと えば、「s3://us-west-2.elasticmapreduce.samples/cloudfront/code/ Hive_CloudFront.q」となります。 • [Input S3 location] には、「s3://[yourregion].elasticmapreduce.samples」と入力し ます。 [yourregion](括弧を含みます)をお客様のリージョンで置き換えます。たとえば、 「s3://us-west-2.elasticmapreduce.samples」となります。 • [Output S3 location] には、「s3://myemrbucket/output」(または以前に作成したバケット の名前)を入力または参照します。 5. 6. • [Arguments] は、フィールドを空のままにします。 • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 [Add] を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。 ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] を選択します。 ステップは約 1 分実行します。 結果の表示 ステップが正常に完了すると、Hive スクリプトで生成されたクエリ出力が、ステップの送信時に指定 した Amazon S3 出力フォルダに格納されます。 Hive スクリプトの出力を表示するには 1. https://console.aws.amazon.com/s3/ にある Amazon S3 コンソールを開きます。 24 Amazon EMR 開発者ガイド ステップ 5: Hue を使用したデータのクエリ 2. 出力データに使用したバケットを選択します。たとえば s3://myemrbucket/ です。 3. 4. 5. output フォルダーを選択します。 6. 7. クエリは結果を個別のフォルダに書き込みます。os_requests を選択します。 Hive のクエリの結果はテキストファイル形式で格納されます。ファイルをダウンロードするに は、そのファイルを右クリックして [Download] を選択し、[Download] リンクを右クリックし て、[Save Link As] を選択し、適切な場所にファイルを保存します。 このファイルをワードパッド(Windows)、テキストエディット(Mac OS)、またはジーエ ディット(Linux)などのテキストエディターを使用して開きます。出力ファイルには、オペレー ティングシステムごとのアクセスリクエストの数が表示されます。 次のステップに進みます。 ステップ 5: Hue を使用したデータのクエリ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 テーブルを作成してデータをロードする Hive スクリプトを実行した後、Hue ウェブインターフェ イスにログインし、そのデータに対してインタラクティブなクエリを送信します。Hue は Hadoop 向けのオープンソースウェブユーザーインターフェイスです。技術者および非技術者のユーザーが Hadoop および Amazon EMR エコシステムの一部である Hive、Pig そのほか多くのツールを活用でき ます。Hue を使用すると、データ分析者やデータ科学者はシンプルな方法でデータをクエリしたり、 スクリプトをインタラクティブに作成したりできます。 Hue にログインする前に、Amazon EMR マスターノードへの SSH トンネルを作成します。 マスターノードへの SSH トンネルの作成 Hue に接続してスクリプトを実行するためには、SSH を経由してマスターノードに接続し、ポート 8888 で実行する Hue へのトンネルを確立する必要があります。SSH 接続を作成するには以下が必要 です。 • PuTTY(Windows)または OpenSSH(Linux、Mac OS X)などの SSH クライアント • Amazon EC2 キーペアのプライベートキーファイル(Windows の場合は .ppk、Linux および Mac OS X の場合は .pem) ほとんどの場合、Linux コンピュータにはデフォルトで SSH クライアントがあります。たとえば、ほ とんどの Linux、Unix、および Mac OS X オペレーティングシステムには OpenSSH がインストール されています。SSH クライアントがあるかどうかを確認するには、シェルコマンドラインで「ssh」 と入力します。ご使用のコンピュータでこのコマンドが認識されない場合、マスターノードに接続す るために SSH クライアントをインストールする必要があります。OpenSSH プロジェクトが、SSH ツールの完全なスイートの無料実装を提供しています。詳細については、http://www.openssh.org を 参照してください。. SSH トンネルの作成の詳細については、「SSH を使用してマスターノードに接続する (p. 459)」を 参照してください。 OpenSSH を使用して Linux および Mac OS X でマスターノードへの SSH トンネルを作成す るには 1. 2. 3. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 コンソールの [Cluster List] ページで、クラスターを選択します。 [Cluster Details] ページで、上部に表示される [Master public DNS] の値を書き留めます。この値 は、SSH 接続を確立するために必要です。 25 Amazon EMR 開発者ガイド マスターノードへの SSH トンネルの作成 4. ターミナルウィンドウで、ローカルコンピュータで SSH トンネルを開くには、次のコマンドを入 力します。このコマンドは、ローカルポート 8157(ランダムに選択された未使用のローカルポー ト)のトラフィックを、マスターノードのポート 8888 に転送することによって、Hue ウェブイ ンターフェイスにアクセスします。コマンドでは、~/mykeypair.pem を .pem ファイルの場所 とファイル名に置き換え、ec2-###-##-##-###.compute-1.amazonaws.com をクラスターの マスターパブリック DNS 名に置き換えます。 ssh -i ~/mykeypair.pem -N -L 8157:ec2-###-##-#####.compute-1.amazonaws.com:8888 hadoop@ec2-###-##-#####.compute-1.amazonaws.com このコマンドを発行すると、ターミナルは開いたままになり、応答を返しません。 Note -L はローカルポートフォワーディングを使用することを示し、マスターノードのローカ ルウェブサーバーの指定されたリモートポートにデータを転送するために使用するロー カルポートを指定できます。 PuTTY を使用して Windows でマスターノードへの SSH トンネルをセットアップするには Windows ユーザーの場合は、PuTTY などの SSH クライアントを使用して、マスターノードに接続で きます。Amazon EMR マスターノードに接続する前に、PuTTY および PuTTYgen をダウンロードし てインストールする必要があります。これらのツールは、PuTTY ダウンロードページからダウンロー ドできます。 PuTTY は、Amazon EC2 によって生成されるプライベートキー形式(.pem)をネイティブにサポー トしていません。PuTTYgen を使用して、キーファイルを必要な PuTTY 形式(.ppk)に変換しま す。PuTTY を使用してマスターノードへの接続を試みる前に、キーをこの形式(.ppk)に変換する 必要があります。 キーの変換の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「PuTTYgen を使用したプライベートキーの変換」を参照してください。 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. コンソールの [Cluster List] ページで、クラスターを選択します。 3. [Cluster Details] ページで、表示される [Master public DNS] の値を書き留めます。この値 は、SSH 接続を確立するために必要です。 4. putty.exe を開いて PuTTY を起動します。Windows のプログラムの一覧から PuTTY を起動す ることもできます。 5. 必要に応じて、[Category] リストで、[Session] を選択します。 6. [Host Name (or IP address)] に、「hadoop@MasterPublicDNS」と入力します。たとえば、 「hadoop@ec2-###-##-##-###.compute-1########amazonaws.com を提供するようになり ました。 7. [Category] リストで、[Connection]、[SSH] の順に展開し、[Auth] を選択します。 8. [Private key file for authentication] では、[Browse] をクリックし、以前に生成した .ppk ファイル を選択します。 9. [Category] で、[Connection]、[SSH]、および [Tunnels] を選択します。 10. [Source port] で、未使用のローカル##### (8157 など) を入力します。 11. [Destination] に「MasterPublicDNS:8888」と入力して Hue インターフェイスにアクセスしま す。たとえば、「ec2-###-##-##-###.compute-1.amazonaws.com:8888 です。 12. [Local] オプションと [Auto] オプションは選択されたままにします。 13. [Add] を選択します。[Forwarded ports] フィールドに、L8157 ec2-###-##-#####.compute-1.amazonaws.com:8888 のようなエントリが表示されます。 26 Amazon EMR 開発者ガイド Hue へのログインとインタラ クティブな Hive クエリの送信 14. [Open] を選択し、[Yes] をクリックして PuTTY セキュリティ警告を閉じます。 Important マスターノードにログインするときにユーザー名の入力を求められた場合は、 「hadoop」と入力します。 Hue へのログインとインタラクティブな Hive クエ リの送信 Amazon EMR マスターノードへの SSH トンネルを設定したら、Hue にログインして Hive スクリプ トを実行します。 Hue で Hive スクリプトを実行するには 1. ブラウザに次の URL を入力します。http://localhost:8157 2. Hue のウェルカムページで、[Username] と [Password] を入力します。初めて Hue にログインす るときに使用する名前とパスワードが、Hue のスーパーユーザーの認証情報になります。 Note パスワードは最低 8 文字が必要です。また、大文字と小文字の両方、少なくとも 1 つの 数字、少なくとも 1 つの特殊文字を含んでいる必要があります。 3. [Did you know?] ダイアログで、[Got it, prof!] をクリックします。[My Documents] のページが開 くと、サンプルプロジェクトが表示されます。 4. メニューオプションから、[Query Editors > Hive] を選択します。 5. サンプルテキストを削除し、次を入力します。 SELECT browser, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN '2014-07-05' AND '2014-08-05' GROUP BY browser; この HiveQL クエリは、特定の期間のブラウザあたりの合計リクエストを取得します。 6. [Execute] を選択します。クエリを実行すると、ログエントリが下部ウィンドウの [Log] タブに表 示されます。クエリが完了すると、[Results] タブが表示されます。 7. クエリからの出力データを確認します。 8. 出力を検証した後はブラウザを閉じるか、または時間が許す限りさらに Hue を使ってみます。 (オプション)ステップ 6: Amazon EMR の確認 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 1 時間以内にこのチュートリアルを完了した場合(または 1 時間を超過する追加料金を選択した場合) は、『Amazon EMR 開発者ガイド』にある次の自習型アクティビティを完了させてみてください。 • クラスターの CloudWatch メトリクスを検証する – CloudWatch でのメトリクスのモニタリング • クラスターの終了保護をオフにする – クラスター終了の管理 • 1 つ以上のコアノードを追加してクラスターのサイズを変更する(クラスターにノードを追加する と、このチュートリアルのコストが増えますのでご注意ください) – 実行中のクラスターのサイズ を変更する 27 Amazon EMR 開発者ガイド (オプション)ステップ 6: Amazon EMR の確認 • Amazon S3 でクラスターログを検証する – ログファイルを表示する 別の時間に行う場合は、追加料金の発生を防ぐため、クラスターを終了します。詳細については、 「(オプション)ステップ 7: チュートリアルで使用したリソースの削除 (p. 29)」を参照してくだ さい。 次の Amazon EMR チュートリアルは、『Amazon EMR 開発者ガイド』でご利用いただけます。これ らのチュートリアルでは、別のクラスターを起動して追加料金が必要になる場合があります。 • Impala を使用したデータのクエリ: 「チュートリアル: Amazon EMR で Impala クラスターを起動お よびクエリする」 • Amazon Kinesis ストリームの分析: 「チュートリアル: Amazon EMR および Hive を使用した Amazon Kinesis Streams の分析」および「チュートリアル: Amazon EMR および Pig を使用した Amazon Kinesis Streams の分析」 • Elastic Load Balancing ログデータの分析: 「チュートリアル: Amazon Elastic MapReduce を使用し た Elastic Load Balancing アクセスログのクエリ」 次の Amazon EMR チュートリアルは『AWS の使用開始: ビッグデータの分析』でご利用いただけま す。これらのチュートリアルでは、別のクラスターを起動して追加料金が必要になる場合がありま す。 • 感情分析の実行: 「チュートリアル: 感情分析」 • Apache Hive を使用したウェブサーバーログの分析: 「チュートリアル: ウェブサーバーログの分 析」 次の Amazon EMR チュートリアルは、AWS ビッグデータのブログと AWS 公式ブログでご利用いた だけます。これらのチュートリアルでは、別のクラスターを起動して追加料金が必要になる場合があ ります。 • Spark の使用: 新機能 - Amazon EMR の Apache Spark • 機械学習と Spark: Amazon EMR で Spark を使用した大規模機械学習 • Node.js の使用: 「Amazon EMR での Node.js ストリーミング MapReduce」 • 推奨エンジンの構築: 「規模を問わない推奨エンジンの構築と実行」 • HBase の使用: 「HBase を Amazon EMR で実行し、Amazon Kinesis に接続する」 • ETL の処理: 「AWS Data Pipeline および Amazon EMR を使用した ETL の処理」 • Spark の使用: 「Amazon EMR クラスターに Apache Spark をインストールする」 • EMRFS の使用: 「ETL ワークフローで Amazon S3 および Amazon EMR を使用する場合の整合性 を確認する」 • R および RStudio の使用: 「Amazon EMR でオープンソース版の R および RStudio を使用した統計 分析」 • BI ツールの使用: 「SQL Workbench およびそのほかの BI ツールで Amazon EMR を使用する」 • データの可視化: 「Amazon EMR および Tableau を使用してデータを分析し可視化する」 • ブートストラップアクションの使用: 「Amazon EMR ブートストラップアクションの使用を開始す る」 • Mahout を使用したリコメンダの構築 : Amazon EMR (Amazon EMR) で Apache Mahout を使用して リコメンダを構築する 次の Amazon EMR チュートリアルは記事とチュートリアルページでご利用いただけます。これらの チュートリアルでは、別のクラスターを起動して追加料金が必要になる場合があります。 • DynamoDB の使用: 「Amazon EMR を使用して DynamoDB を使用する」 • Apache Accumulo の使用: 「Apache Accumulo と Amazon EMR」 28 Amazon EMR 開発者ガイド (オプション)ステップ 7: チュー トリアルで使用したリソースの削除 • Informatica の HParser の使用: 「Amazon EMR で Informatica の HParser を使用してビッグデータ を解析する」 • 広告での Apache Hive の使用: 「Apache Hive および Amazon EMR を使用したコンテキスト依存広 告」 • Apache Hive を使用したトレンドトピックの検索: 「Amazon EMR で Google Books の n-grams データおよび Apache Hive を使用してトレンドになっているトピックを見つける」 • ストリーミングを使用した類似アイテムの検索: 「Amazon EMR、Python、および Hadoop スト リーミングを利用して類似アイテムを見つける」 • Hive を使用したデータウェアハウスの運用: 「Hive、Amazon EMR および Amazon SimpleDB を使 用したデータウェアハウスの運用」 • CloudFront ログの分析: 「Amazon CloudFront の LogAnalyzer」 • Apache Hive を使用したログデータの分析: 「Apache Hive、Windows PowerShell、および Amazon EMR を使用してログデータを分析する」 (オプション)ステップ 7: チュートリアルで使 用したリソースの削除 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 チュートリアルを完了したら、追加料金を回避するために、作成したリソース(Amazon S3 バケッ トおよび長時間稼働 Amazon EMR クラスター)を削除する必要があります。クラスターを終了する と、関連付けられた EC2 インスタンスが終了し Amazon EMR 料金の加算が停止します。Amazon EMR はお客様の参照用に、完了したクラスターに関するメタデータ情報を 2 か月間無料で保管しま す。完了したクラスターをコンソールから削除することはできません。クラスターは 2 か月経つと自 動的に削除されます。 Amazon S3 バケットを削除するには 既存のバケットを使用した場合やバケットを作成していない場合は、このステップは省略可能です。 1. https://console.aws.amazon.com/s3/ にある Amazon S3 コンソールを開きます。 2. バケットを削除するには、まずその中のすべてのオブジェクトを削除する必要があります。ログ および出力データを保存したバケットを選択します。 3. SHIFT キーまたは CRTL キーを使用してバケット内のすべてのオブジェクトを選択します。 Tip Shift キーや Ctrl キーを使うと、複数のオブジェクトを選択し、選択したオブジェク トに対して同じ操作を同時に実行できます。 4. オブジェクトのコンテキストメニュー (右クリック) を開き、[Delete] を選択するか、[Actions]、 [Delete] の順に選択します。 5. プロンプトが表示されたら [OK] を選択して削除を確定します。 6. ウィンドウ上部のパンくずリストで [All Buckets] を選択します。 7. バケットのコンテキストメニュー (右クリック) を開き、[Delete]、[OK] の順に選択します。 Amazon EMR クラスターを終了するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] ページで、クラスターのチェックボックスをオンにし、[Terminate] を選択します。 29 Amazon EMR 開発者ガイド (オプション)ステップ 7: チュー トリアルで使用したリソースの削除 3. 4. デフォルトでは、コンソールを使用して作成したクラスターは終了保護を有効にした状態で起動 されます。[Terminate clusters] ダイアログボックスで、[Termination protection] の [Change] を選 択します。 [Off] を選択し、チェックマークを選択して変更を確定します。 5. [Terminate] を選択します。 30 Amazon EMR 開発者ガイド Amazon EMR クラスターの計画 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このドキュメントは、Amazon EMR の バージョン 4.x および 5.x を対象としています。Amazon EMR AMI バージョン 2.x および 3.x については、Amazon EMR 開発者ガイド (PDF) を参照してく ださい。 このセクションでは、Amazon EMR(Amazon EMR)クラスターを起動するための設定オプションに ついて説明します。クラスターを起動する前に、この情報を確認し、データ処理のニーズに応じてク ラスターオプションを選択します。選択するオプションは、次のような要因によって決まります。 • 処理するソースデータのタイプ • ソースデータの量と保存方法 • ソースデータを処理する許容される期間および頻度 • クラスター接続のネットワーク設定とアクセスコントロール要件 • クラスターアクティビティ、パフォーマンス、状態を監視するためのメトリクス • データの処理および分析用にクラスターにインストールすることを選択したソフトウェア • 選択したオプションに基づいてクラスターを実行するコスト 一部の設定ステップはオプションですが、利用可能なオプションについて理解し、それに応じてクラ スターを計画することをお勧めします。 トピック • AWS リージョンを選択する (p. 32) • インスタンスの数とタイプを選択する (p. 33) • ソフトウェアの設定 (p. 55) • Amazon EMR と互換性のあるファイルシステム (p. 132) • クラスターのライフサイクル(長時間稼働または一時的)を選択する (p. 160) • 入力データの準備(オプション) (p. 161) 31 Amazon EMR 開発者ガイド AWS リージョンを選択する • 出力の場所を準備する(オプション) (p. 173) • クラスターへのアクセス設定 (p. 178) • ログ記録およびデバッグの作成(オプション) (p. 204) • クラスターの Amazon VPC サブネットを選択する (p. 209) • Amazon EMR クラスターにタグを付ける (p. 217) • Amazon EMR でサードパーティアプリケーションを使用する(オプション) (p. 222) AWS リージョンを選択する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 アマゾン ウェブ サービスは世界中のデータセンターのサーバーで実行しています。これらは、地理的 リージョンで編成されています。Amazon EMR クラスターを起動するときは、リージョンを指定する 必要があります。レイテンシーを削減し、コストを最小限に抑えて規制用件に対応できるリージョン を選ぶとよいでしょう。Amazon EMR でサポートされているリージョンおよびエンドポイントのリス トについては、『アマゾン ウェブ サービス全般のリファレンス』の「リージョンとエンドポイント」 を参照してください。 最高のパフォーマンスのため、クラスターはデータと同じリージョンで起動する必要があります。た とえば、入力データを格納している Amazon S3 バケットが 米国西部 (オレゴン) リージョンにある場 合、リージョン間のデータ転送料を避けるため、米国西部 (オレゴン) リージョンでクラスターを起動 する必要があります。Amazon S3 バケットを使用して、クラスターの出力を受け取る場合、それも 米国西部 (オレゴン) リージョンで作成する必要があります。 Amazon EC2 キーペアをクラスターと関連付ける予定がある場合(SSH を使用して、マスターノード にログオンする場合に必要)、キーペアをクラスターと同じリージョンで作成する必要があります。 同様に、Amazon EMR がクラスターを管理するために作成するセキュリティグループは、クラスター と同じリージョンに作成します。 2012 年 10 月 10 日以降に AWS アカウントに登録した場合、AWS マネジメントコンソールからリ ソースにアクセスした場合のデフォルトリージョンは、米国西部 (オレゴン)(us-west-2)となりま す。それ以前のアカウントでのデフォルトリージョンは、米国東部(バージニア北部)(us-east-1) です。詳細については、Regions and Endpoints を参照してください。 一部の AWS 機能は限定されたリージョンでのみ使用できます。たとえば、クラスターコンピュー ティングインスタンスは 米国東部(バージニア北部) リージョンでのみ使用でき、アジアパシフィッ ク (シドニー) リージョンでは Hadoop 1.0.3 以降のみサポートされます。リージョンを選択する場合 は、リージョンで使用したい機能がサポートされていることを確認してください。 最高のパフォーマンスのため、クラスターで使用されるすべての AWS リソースに同じリージョンを 使用します。次の表に、サービス間でリージョン名をマッピングします。Amazon EMR リージョンの リストについては、『アマゾン ウェブ サービス全般のリファレンス』の「AWS リージョンとエンド ポイント」を参照してください。 コンソールを使用してリージョンを選択する デフォルトのリージョンは自動的に表示されます。 コンソールを使用してリージョンを変更するには • リージョンを切り替えるには、ナビゲーションバーのアカウント情報の右側にあるリージョンリ ストを選択します。 32 Amazon EMR 開発者ガイド AWS CLI を使用してリージョンを指定する AWS CLI を使用してリージョンを指定する aws configure コマンドまたは AWS_DEFAULT_REGION 環境変数を使用して、AWS CLI でデフォル トのリージョンを指定します。詳細については、AWS Command Line Interface ユーザーガイドの 「AWS リージョンの設定」を参照してください。 SDK または API を使用してリージョンを選択する には SDK を使用してリージョンを選択するには、リージョンのエンドポイントを使用するようにアプリ ケーションを設定します。AWS SDK を使用してクライアントアプリケーションを作成している場 合、以下の例のように setEndpoint を呼び出すことによってクライアントのエンドポイントを変更 できます。 client.setEndpoint("elasticmapreduce.us-west-2.amazonaws.com"); アプリケーションでエンドポイントを設定して、リージョンを指定したら、クラスターの EC2 イン スタンスのアベイラビリティーゾーンを設定できます。アベイラビリティーゾーンはそれぞれが地 理的に独立しており、他のゾーンの影響は受けません。また、同じリージョン内の他のアベイラビリ ティーゾーンへのネットワーク接続が低コストで、レイテンシーも短くなります。リージョンには 1 つまたは複数のアベイラビリティーゾーンが含まれます。パフォーマンスを最適化し、レイテンシー を低減するには、すべてのリソースを、それらを使用するクラスターと同じアベイラビリティーゾー ンに置く必要があります。 インスタンスの数とタイプを選択する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターを起動する場合に考慮すべき最も重要なことの 1 つが、クラスター内で起動するインスタ ンスの数とタイプです。これによって、クラスターの処理能力とストレージ容量が決まります。処理 する必要があるデータに合わせてクラスターをチューニングすることが重要です。容量が少なすぎる と、クラスターの実行が遅くなり、容量が多すぎると、不要なコストが発生します。 Amazon EMR クラスターで実行するサーバーは EC2 インスタンスです。これらは、m3.xlarge や c3.xlarge などさまざまな構成で提供され、CPU、入出力、ストレージ容量も異なります。詳細につ いては、「インスタンスの構成 (p. 36)」を参照してください。Amazon EMR クラスターのノード ロールごとに異なるインスタンスタイプを指定できます。 Amazon EMR では、仮想プライベートクラウド(VPC)内で管理している専用ハードウェアでクラ スターを起動できます。専用インスタンスを使ってクラスターを起動するには、VPC で起動するイン スタンスに dedicated テナンシー属性を設定するか、作成時に VPC 全体を設定します。詳細は、 『Amazon VPC ユーザーガイド』をご覧ください。 Amazon EMR クラスターの EC2 インスタンスで実行されるノードには、マスターノード、コアノー ド、タスクノードの 3 種類があります。1 つのマスターノードがクラスターを管理します。コアノー ドはデータを処理して、HDFS にデータを格納します。タスクノードはオプションで、データの処理 のみを実行します。詳細については、「インスタンスグループ (p. 35)」を参照してください。各 ロールのインスタンスの数とタイプを選択する場合、各ロールに必要な容量の違いを理解しておいて ください。タスクを割り当てるマスターノードは、あまり多くの処理能力を必要としません。タスク を処理し、HDFS にデータを格納するコアノードは、処理能力とストレージの両方が必要です。デー タを保存しないタスクノードには、処理能力のみが必要です。 33 Amazon EMR 開発者ガイド クラスターの HDFS 容量を計算する クラスターのインスタンスを計画する 1 つの方法は、代表的なデータのサンプルセットで、テストク ラスターを実行し、クラスター内のノードの使用状況を監視することです。詳細については、「クラ スターを表示し、モニタリングする (p. 421)」を参照してください。別の方法は、考慮するインスタ ンスの容量を計算し、その値をデータのサイズに対して比較することです。 クラスターの HDFS 容量を計算する クラスターで使用可能な HDFS ストレージの容量は、コアノードの数、コアノードに指定した EC2 インスタンスのタイプのストレージ容量、コアノードにアタッチする EBS ボリュームの数、および レプリケーション係数によって異なります。レプリケーション係数とは、RAID に似た冗長性を得る ために、HDFS に各データブロックが格納される回数です。デフォルトで、レプリケーション係数 は、10 個以上のノードのクラスターで 3、4~9 個のノードのクラスターで 2、3 個以下のノードのク ラスターで 1 です。 クラスターの HDFS 容量を計算するには、選択した EC2 インスタンスタイプのストレージ容量 を、EBS にアタッチした合計ボリュームストレージに加算し、その結果に各インスタンスグループ内 のノード数を掛けて、その合計をクラスターのレプリケーション係数で割ります。たとえば、10 個 のコアノードを持つタイプ m1.large のクラスターでは、850 GB の容量をインスタンスごとに HDFS で使用できます ((10 ノード X ノードあたりの容量 850 GB) ÷ レプリケーション係数 3)。インスタン スストアボリュームの詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「Amazon EC2 インスタンスストア」を参照してください。 計算した HDFS 容量の値がデータより小さい場合は、HDFS ストレージの容量を増やすことができ ます。これには、追加の EBS ボリュームを使用してクラスターを作成するか、EBS ボリュームをア タッチしたインスタンスグループを既存のクラスターに追加します。あるいは、コアノードを追加す る方法、ストレージ容量の大きい EC2 インスタンスタイプを選択する方法、データ圧縮を使用する 方法、Hadoop 設定を変更してレプリケーション係数を小さくする方法などがあります。レプリケー ション係数を減らすことは、HDFS データの冗長性や、クラスターの HDFS ブロックの損失や破損か ら復元する能力が低下するため、注意して使用する必要があります。 インスタンスの数とタイプのガイドライン ほとんどの Amazon EMR クラスターには次のガイドラインがあてはまります。 • マスターノードには大量の計算要件がありません。ノードが 50 個以下のほとんどのクラス ターでは、m3.xlarge の使用を検討してください。ノードが 50 個を超えるクラスターの場合 は、m3.2xlarge の使用を検討してください。 • コアノードとタスクノードの計算ニーズは、アプリケーションが実行する処理のタイプによって 異なります。m3.large インスタンスタイプでは多くのジョブを実行できます。これは、CPU、 ディスク領域、入出力に関して、バランスの取れたパフォーマンスを発揮します。アプリケーショ ンに遅延を招く外部依存関係 (データを収集するためのウェブのクローリングなど) がある場合 は、m3.xlarge インスタンスでクラスターを実行することによって、依存関係の終了をインスタン スが待機する間にかかるコストを削減することができます。パフォーマンスの向上のため、コア ノードとタスクノードには、m3.2xlarge インスタンスを使用して、クラスターを実行することを検 討してください。クラスターの段階によって必要な容量が異なる場合は、少ない数のコアノードか ら始め、タスクノードの数を増減してジョブフローでの容量要件の変化に合わせます。 • ほとんどの Amazon EMR クラスターは、m3.xlarge および m3.2xlarge などの標準 EC2 インスタン スタイプで実行できます。計算量の多いクラスターは、大きい CPU インスタンスで実行するとメ リットがあります。この場合、RAM メモリより CPU の方が比例的に大きくなります。データベー スおよびメモリキャッシュアプリケーションは、大きいメモリインスタンスで実行するとメリット があります。解析、NLP、機械学習のようなネットワークと CPU を多く使用するアプリケーション は、クラスターコンピューティングインスタンスで実行するとメリットがあります。この場合、比 例的に CPU リソースが大きくなり、ネットワークパフォーマンスが向上します。インスタンスタ イプの詳細については、「インスタンスの構成 (p. 36)」を参照してください。。 • 処理可能なデータの量は、コアノードの容量と、入力、処理時、および出力のデータのサイズに よって異なります。処理中に、入力、中間、および出力データセットはすべてクラスターに存在し ます。 34 Amazon EMR 開発者ガイド インスタンスグループ • デフォルトで、1 つの AWS アカウントで実行できる EC2 インスタンスの総数は 20 です。これは つまり、クラスターに構成できるノードの総数が 20 であることを意味します。アカウントのこの 制限を増やすように要求する方法について詳しくは、「Amazon EC2 インスタンス上限緩和申請 」 を参照してください。 • Amazon EMR では、m1.small および m1.medium インスタンスはテスト目的に限り推奨さ れ、m1.small は Hadoop 2 クラスターではサポートされません。 トピック • インスタンスグループ (p. 35) • インスタンスの構成 (p. 36) • Amazon EMR クラスターインスタンスのストレージタイプを選択する (p. 38) • リザーブドインスタンスで容量を確保する(オプション) (p. 43) • (オプション)スポットインスタンスでコストを削減する (p. 43) インスタンスグループ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR で実行される Apache Hadoop は管理されたバージョンであり、Hadoop クラスターを 実行するクラウドサーバーのインフラストラクチャを作成する際の詳細を処理します。Amazon EMR は、インスタンスグループの概念を定義します。インスタンスグループは、クラスターにインストー ルされている分散アプリケーションによって定義された一連のロールを実行する EC2 インスタンスの コレクションです。通常、これらのグループはマスターグループとスレーブグループです。インスタ ンスグループには、マスター、コア(スレーブ)、タスク(スレーブ)という 3 つのタイプがありま す。 各 Amazon EMR クラスターには、最大 50 個のインスタンスグループを含めることができます。つま り、1 個のマスターノードを含む 1 個のマスターインスタンスグループ、1 個以上のコアノードを含 む 1 個のコアインスタンスグループ、および数に制限なくタスクノードを含むことのできる最大 48 個のタスクインスタンスグループ(オプション)です。 1 個のノード上で実行されるクラスターでは、インスタンスが同時にマスターノードとコアノードに なります。複数のノードで実行されるクラスターでは、1 つのインスタンスがマスターノード、他の インスタンスはコアノードまたはタスクノードです。 インスタンスグループの詳細については、実行中のクラスターのサイズを手動で変更する (p. 494)を 参照してください。 マスターインスタンスグループ マスターインスタンスグループは、クラスターを管理し、通常はクラスターにインストールさ れている分散型アプリケーションのマスターコンポーネントを実行します。たとえば、YARN ResourceManager サービスを実行して、アプリケーションと HDFS NameNode サービスのリソース を管理します。さらに、クラスターに送信されたジョブのステータスを追跡し、インスタンスグルー プの状態を監視します。クラスターの進捗状況を監視するには、SSH によって Hadoop ユーザーとし てマスターノードに接続し、Hadoop ログファイルを直接確認するか、マスターノードで実行される ウェブサーバーに対して Hadoop または Spark が公開するユーザーインターフェイスにアクセスしま す。詳細については、「ログファイルを表示する (p. 426)」を参照してください。 Hadoop MapReduce または Spark ジョブ中、コアノードおよびタスクノード上のコンポーネントが データを処理して、出力を Amazon S3 または HDFS に転送し、ステータスメタデータをマスター ノードに戻します。単一ノードクラスターの場合、すべてのコンポーネントがマスターノードで実行 されます。 35 Amazon EMR 開発者ガイド インスタンスの構成 コアインスタンスグループ コアインスタンスグループには、1 つのクラスターのすべてのコアノードが含まれます。コアノード は、タスクを実行し、DataNode デーモンを実行することで Hadoop Distributed File System (HDFS) の一部としてデータを保存するクラスターの EC2 インスタンスです。たとえば、コアノードは YARN NodeManager デーモンを実行し、Hadoop MapReduce タスクと Spark エグゼキュータをスパークさ れます。 コアノードは、マスターノードによって管理されます。コアノードでは HDFS にデータが格納され るため、そのインスタンスグループに対するサイズ変更リクエストを発行することで、コアノード を削除できます。この "縮小" 操作では、グループ内のインスタンス数を安全に (たとえば、実行中の YARN ジョブやアプリケーションが存在しない場合に) 減らすよう試行することができます。 Caution 実行中のノードから HDFS デーモンを削除すると、データが失われるおそれがあります。 コアインスタンスグループの詳細については、実行中のクラスターのサイズを手動で変更す る (p. 494) を参照してください。 タスクインスタンスグループ タスクインスタンスグループには、クラスターのすべてのタスクノードが含まれます。タスクインス タンスグループはオプションです。クラスターを起動するときにタスクグループを追加するか、実行 中のクラスターにタスクグループを追加できます。タスクノードは、DataNode デーモンを実行した り、HDFS にデータを保存することがありません。タスクノードを追加および削除してクラスター内 の EC2 インスタンスの数を調整し、容量を増やすことでピークロードに対応したり、後から減らした りすることができます。 タスクノードは、マスターノードによって管理されます。クラスターの実行中に、タスクグループ 内のタスクノードの数を調整することができます。また、最大 48 個のタスクグループを追加できま す。クラスターにタスクグループを追加するときには、複数のインスタンスタイプを活用するグルー プを作成できます。たとえば、スポットインスタンスを利用するタスクグループを作成し、特定のイ ンスタンスタイプに対して利用可能な十分な数のスポットインスタンスがない場合、利用可能なス ポットインスタンス容量を持つ別のインスタンスタイプを利用する追加のタスクグループを作成でき ます。 スポットインスタンスを利用する複数のタスクグループを作成すると、コスト削減が可能にな る場合があります。詳細については、「(オプション)スポットインスタンスでコストを削減す る (p. 43)」を参照してください。 タスクインスタンスグループの詳細については、実行中のクラスターのサイズを手動で変更す る (p. 494) を参照してください。 インスタンスの構成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR では、クラスターを処理するクラスターを構成する EC2 インスタンスの数と種類を選 択することができます。Amazon EC2 には、いくつかの基本的なタイプがあります。 • 汎用 - Amazon EC2 汎用インスタンスはほとんどのアプリケーションで使用できます。 • コンピューティング最適化 – コンピューティングが中心のアプリケーション向けに、メモリ (RAM)よりも CPU リソースが比較的重視されます。クラスターコンピューティングインスタン スも、ネットワークパフォーマンスが向上しました。 36 Amazon EMR 開発者ガイド インスタンスの構成 • メモリ最適化 – データベースやメモリキャッシングアプリケーションなど、高スループットのアプ リケーション向けに、大容量のメモリサイズを提供します。 • ストレージ最適化 - 比較的大容量のストレージリソースを提供します。これらは、データウェアハ ウスアプリケーションに適しています。 • GPU インスタンス - GPU アシストのアプリケーションでの並列処理のパフォーマンス向上のた め、コンピューティングリソースを提供します。 サポートされるインスタンスタイプ 次の表に、Amazon EMR でサポートされているインスタンスタイプを示します。 インスタンスクラス インスタンスタイプ 汎用 m1.medium | m1.large | m1.xlarge | m3.xlarge | m3.2xlarge コンピューティングの最適化 c1.medium | c1.xlarge | c3.xlarge | c3.2xlarge | c3.4xlarge | c3.8xlarge | cc2.8xlarge | c4.large | c4.xlarge | c4.2xlarge | c4.4xlarge | c4.8xlarge メモリ最適化 m2.xlarge | m2.2xlarge | m2.4xlarge | r3.xlarge | r3.2xlarge | r3.4xlarge | r3.8xlarge | cr1.8xlarge | m4.large | m4.xlarge | m4.2xlarge | m4.4xlarge | m4.10xlarge | m4.16xlarge ストレージの最適化 hi1.4xlarge | hs1.2xlarge | hs1.4xlarge | hs1.8xlarge | i2.xlarge | i2.2xlarge | i2.4xlarge | i2.8xlarge | d2.xlarge | d2.2xlarge | d2.4xlarge | d2.8xlarge GPU インスタンス g2.2xlarge | cg1.4xlarge Note M4 および C4 インスタンスタイプは、Amazon EMR リリース 3.10.0 および 4.x 以上でのみ サポートされます。 仮想化タイプ 次の表は Amazon EMR で使用される各インスタンスファミリーの仮想化タイプを示します。 インスタンスファミリー 仮想化タイプ m1 PVM m2 PVM m3 PVM m4 HVM c1 PVM c3 PVM c4 HVM cc1 HVM cc2 HVM 37 Amazon EMR 開発者ガイド Amazon EMR クラスターインスタ ンスのストレージタイプを選択する インスタンスファミリー 仮想化タイプ cg1 HVM cr1 HVM g2 HVM hi1 PVM hs1 PVM i2 HVM r3 HVM d2 HVM これらのインスタンスタイプ、ファミリー、仮想化タイプの詳細については、「Amazon EC2 インス タンス」および「Amazon Linux AMI インスタンスタイプマトリックス」を参照してください。 拡張ネットワーキング いくつかのインスタンスタイプは、選択されたインスタンスタイプが HVM 仮想化タイプを使用する 場合、拡張ネットワーキングをサポートします (前のセクションの表を参照)。拡張ネットワーキング の詳細については、以下を参照してください。 • Linux AMI 仮想化タイプ • Enhanced Networking on Linux • プレイスメントグループ Amazon EMR クラスターインスタンスのストレー ジタイプを選択する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMR クラスターで使用するデータを格納する方法には、主に次の 3 種類があります。 • EMRFS (Amazon S3) – クラスターで直接 HDFS を使用する代わりに、Amazon S3 用に最適化され た Amazon EMR 用のコネクタを使用します。EMRFS は、中間ステップとして HDFS にデータを 取り込む代わりに、Amazon S3 でデータを直接操作します。これは、Spark、Hadoop、Hive など のポピュラーなアプリケーション内でデータを操作するための、信頼性が高くスケーラブルな方法 です。また、アプリケーションの "根拠"として Amazon S3 を保守していれば、クラスターの維持 を心配する必要はありません。EMRFS の詳細については、「EMR ファイルシステム(EMRFS) (オプション) (p. 135)」を参照してください。 • ローカルストレージ – ローカルストレージは、EC2 インスタンスに直接アタッチするエフェメラル ボリュームです。 インスタンスストレージは、EMR クラスター内でインスタンスの HDFS に使用されるデフォルト のエフェメラルストレージです。これらは、クラスターの有効期限内のみ存続する、エフェメラル ボリュームです。一部のアプリケーションでは、クラスターに一定の局所性を確保できるように、 データを HDFS に取り込む必要があります。また、一部のアプリケーションでは、一時ストレージ またはスクラッチストレージとしてインスタンスのローカルファイルシステムへの書き込みが行わ れる場合もあります。 38 Amazon EMR 開発者ガイド Amazon EMR クラスターインスタ ンスのストレージタイプを選択する Amazon Elastic Block Store (Amazon EBS) をベースにしたストレージ – EMR クラスターインスタ ンスにアタッチされた EBS ボリュームは、ローカルインスタンスストアの代わりに使用できます。 インスタンスにアタッチされた EBS ボリュームは、個々のインスタンスまたはクラスターが終了す ると削除されるため、データは保持されません。 Amazon EMR は、パフォーマンスを高めるため、EBS 汎用 SSD (gp2) 10 GB ボリュームをその AMI のルートデバイスとして使用します。EBS のコストは、実行中のリージョンの gp2 ボリューム に対する毎月の EBS 料金に基づいて、1 時間ごとに案分されます。たとえば、0.10 USD/GB-月が 請求されるリージョンで、EMR クラスターの各ノードのルートボリュームの 1 時間あたりの EBS コストは、1 時間あたり約 0.00139 USD (0.10 USD/GB-月を 30 日で割り、24 時間で割って 10 GB を掛ける) となります。EBS-backed AMI の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「ルートデバイスのストレージ」というトピックを参照してください。 Note Amazon EBS ストレージは、AMI バージョン 3.10 以降で使用可能です。 以下のセクションでは、エフェメラルストレージのオプションについて説明します。 トピック • Amazon EC2 インスタンスストア (p. 39) • Amazon EBS ボリューム (p. 39) Amazon EC2 インスタンスストア インスタンスストアは、インスタンス用のブロックレベルのデフォルトエフェメラルストレージを提 供します。このストレージは、ホストに物理的にアタッチされたディスク上にあります。インスタン スストアのサイズは、インスタンスタイプによって異なります。クラスターを作成すると、何もしな くてもこのストレージが追加されます。インスタンスストアは、HDFS や、バッファ、キャッシュ、 スクラッチデータ、その他の一時コンテンツのように、頻繁に変化する情報の一時ストレージに最適 です。 インスタンスストアは、ブロックデバイスとして表示される 1 つ以上のインスタンスストアボ リュームで構成されます。インスタンスストアボリュームの仮想デバイスは ephemeral[0-23] ] で す。1 つのインスタンスストアボリュームをサポートするインスタンスタイプには、ephemeral0 があります。2 つのインスタンスストアボリュームをサポートするインスタンスタイプ は、ephemeral0、ephemeral1 などを持ちます。インスタンスストアは特定のインスタンス専用に 割り当てられますが、ディスクサブシステムは、ホストコンピュータの複数のインスタンス間で共有 されます。 インスタンスストアデバイスは、クラスターまたはインスタンス (クラスターのサイズを変更する場 合) の存続期間中は保持されます。ただしデータを HDFS に保存している場合は、クラスターのサイ ズによって、複数のノードにデータレプリケーションが含まれる可能性があります。このため、クラ スターのインスタンスを終了しても、一部のデータが別の場所に残る可能性があります。 詳細については、「Amazon EC2 インスタンスストア」を参照してください。 Amazon EBS ボリューム Amazon EBS ボリュームは、1 つの EC2 インスタンスにアタッチできる、耐久性に優れたブロックレ ベルのストレージボリュームです。EBS ボリュームは、HDFS など、頻繁な更新を必要とするデータ のプライマリストレージとして使用できます。ボリュームは、インスタンスにアタッチした後、他の エフェメラルデバイスと同じように使用できます。ただしこちらには、特定のインスタンスタイプに アタッチされた固定インスタンスストレージより多くの容量オプションがあるという利点が加わりま す。Amazon EBS のボリュームタイプには、汎用 (SSD)、プロビジョンド IOPS (SSD)、スループッ ト最適化 (HDD)、コールド (HDD)、マグネティックがあります。これらはパフォーマンス特性と料 39 Amazon EMR 開発者ガイド Amazon EMR クラスターインスタ ンスのストレージタイプを選択する 金が異なるため、アプリケーションの分析ニーズとビジネスニーズに応じてストレージを調整できま す。たとえば、ディスクに書き込む必要のあるアプリケーションや、メモリ内や Amazon S3 の使用 で安全に動作するアプリケーションがあります。 Note Amazon EBS ストレージは、AMI バージョン 3.10 以降で使用可能です。 Amazon EMR では、クラスターに EBS ストレージを使用できます。ただし Amazon EBS で は、EMR クラスターインスタンスに対する動作が通常の Amazon EC2 インスタンスに対する動作と 異なります。 たとえば、EMR クラスターにアタッチされた EBS ボリュームはエフェメラルです。これらのボ リュームは、クラスターとインスタンスが終了すると (たとえば、インスタンスグループを縮小する 場合など) 削除されるため、データの永続性を期待しないように注意することが重要です。これらの ボリュームではデータの存続が一時的ですが、クラスター内のノードの数と仕様によっては、HDFS 内のデータがレプリケートされることもあります。EBS ボリュームを追加すると、これらは追加ボ リュームとしてマウントされます。これらは、ブートボリュームの一部ではなく、追加ストレージに 相当します。YARN は、すべての追加ボリュームを使用するように設定されますが、ローカルスト レージとしての追加ボリュームの割り当て (ローカルログファイル用など) は、お客様の責任で実施し ていただく必要があります。 EBS ボリュームをインスタンスにアタッチできるのは、クラスターの起動時のみです。ただし別の タスクノードインスタンスグループを追加した場合は、EBS ボリュームを追加できます。EMR クラ スター内のインスタンスに障害が発生した場合は、インスタンスおよびアタッチされている EBS ボ リュームの両方が、新しいものに置き換えられます。このため、EBS ボリュームを手動でデタッチす ると、Amazon EMR によって障害と見なされ、インスタンスとボリュームの両方が置き換えられま す。 EMR クラスターで Amazon EBS を使用する場合は、次の点にも注意する必要があります。 • Amazon EMR で使用されている EBS ボリュームのスナップショットは作成できません。 • EBS 暗号化ボリュームはサポートされません。 • Amazon EMR ウェブサービス API を使用してタグを適用した場合、これらの操作は EBS ボリュー ムに適用されます。 • インスタンスごとに 25 ボリュームという制限があります。 Amazon EBS ボリュームを追加する クラスターを作成する場合やタスクインスタンスグループをクラスターに追加する場合は EBS ボ リュームを追加します。 Important EMR インスタンスにアタッチされている EBS に関する情報を変更または取得する には、サービスロールで ec2:DeleteVolume, ec2:DescribeVolumeStatus, ec2:DescribeVolumes, ec2:DetachVolume の各アクセス許可が必要です。サービス ロールが管理ポリシーにアタッチされている場合、何もする必要はありません。 コンソールを使用して EBS ボリュームを追加するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Go to advanced options] を選択します。 4. [Software Configuration] でインストールするアプリケーションを選択し、[Next] を選択します。 40 Amazon EMR 開発者ガイド Amazon EMR クラスターインスタ ンスのストレージタイプを選択する 5. [Hardware Configuration] でノードタイプを選択し、[Storage per instance] 列で [Add EBS volumes] を選択します。 6. デフォルトをそのまま使用するか、サイズ、インスタンスごとのボリューム数、IOPS レートを 入力します。 Note [Storage per instance] の値には、インスタンスのブートボリューム用の 10 GiB が含まれ ます。"EBS のみ" のインスタンスタイプでは、デフォルト値は 32 GiB です。 41 Amazon EMR 開発者ガイド Amazon EMR クラスターインスタ ンスのストレージタイプを選択する (オプション) インスタンスグループ内のインスタンスを "EBS-optimized" にする場合は、[EBSOptimized instance] を選択します。この場合は Amazon EBS I/O 専用の容量が確保されます。詳 細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EBS 最適化イン スタンス」を参照してください。 7. (オプション) [Add EBS volumes] を選択して、このインスタンスグループに EBS ボリュームを追 加します。 Important キー値引数は、--instance-groups に対する EBS 引数として、インラインの JSON 構造 の形で埋め込む必要があります。例に示されているように、すべての引数を一重引用符で囲 む必要があります。 クラスターの作成時に AWS CLI を使用して EBS ボリュームを追加するには • 次の AWS CLI コマンドを使用し、EBS ボリュームのアタッチとインスタンスグループを指定し て、クラスターを作成します。 aws emr create-cluster --release-label emr-4.3.0 --use-default-roles \ --ec2-attributes KeyName=myKey --instance-groups 'InstanceGroupType=MASTER,InstanceCount=1,InstanceType=d2.xlarge' \ 'InstanceGroupType=CORE,InstanceType=d2.xlarge,InstanceCount=2,\ EbsConfiguration={EbsOptimized=true,EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeT \ {VolumeSpecification={VolumeType=io1,SizeInGB=100,Iops=100}, VolumesPerInstance=3}]}' 42 Amazon EMR 開発者ガイド リザーブドインスタンスで容量を確保する(オプション) AWS CLI を使用して EBS ボリュームを追加するには • 次の AWS CLI コマンドを使用して、EBS ボリュームのアタッチを指定し、インスタンスグルー プを追加します。 aws emr add-instance-groups --cluster-id j-clusterId --instance-groups 'InstanceGroupType=TASK, InstanceCount=1, \ InstanceType=m3.xlarge, EbsConfiguration={EbsOptimized=true, EbsBlockDeviceConfigs=[{VolumeSpecification={VolumeType=io1, SizeInGB=10, Iops=100}},\ {VolumeSpecification={VolumeType=standard,SizeInGB=10},VolumesPerInstance=3}]}' リザーブドインスタンスで容量を確保する(オプ ション) リザーブドインスタンスは、確保された容量を提供する、追加の Amazon EC2 価格オプションで す。1 つのインスタンスに対して 1 回だけの支払いを行って容量を予約し、時間あたりの利用料金 を減らすことができます。リザーブドインスタンスは、既存のAmazon EC2 オンデマンドインスタ ンスを補うものであり、コンピューティングコストを減らすための選択肢の 1 つです。On-Demand Instances では、実際に使用するコンピュート容量に対してのみ支払いを行い、インスタンスを使用し ない場合、その利用料金を支払うことはありません。 リザーブドインスタンスではまた、大幅なコスト節約を実現できます。詳細については、Amazon EC2 Reserved Instances を参照してください。 Amazon EMR でリザーブドインスタンスを使用するには、そのリザーブドインスタンスと同じアベイ ラビリティーゾーン内でクラスターを起動します。例えば、US-East で m1.small リザーブドインスタ ンスを 1 つ購入するとします。2 つの m1.small インスタンスを使用するクラスターを US-East リー ジョンの同じアベイラビリティーゾーン内で起動すると、1 つのインスタンスはリザーブドインスタ ンスの料金で請求され、もう 1 つのインスタンスはオンデマンドの料金で請求されます。起動するイ ンスタンスの合計数に対して十分な数のリザーブドインスタンスをお持ちであれば、適切な容量がプ ロビジョニングされます。オンデマンドインスタンスが作成される前に、必ずリザーブドインスタン スが使用されます。 リザーブドインスタンスを使用するには、Amazon EMR コンソール、コマンドラインインターフェイ ス(CLI)、Amazon EMR API のアクション、または AWS SDK を使用します。 関連トピック • Amazon EC2 リザーブドインスタンス (オプション)スポットインスタンスでコストを削 減する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EC2 に未使用の容量がある場合、スポット価格と呼ばれる割引料金で Amazon EC2 インスタ ンスが提供されます。この価格は、使用可能な容量と需要に基づいて変動します。スポットインスタ ンスを購入するには、そのインスタンスに対して支払える最高入札価格を含めてリクエストを送信し ます。スポット価格が入札価格を下回っている場合は、スポットインスタンスが起動し、スポット価 格が請求されます。スポット価格が入札価格を上回っている場合、Amazon EC2 はスポットインスタ ンスを終了します。 43 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する スポットインスタンスの詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の 「Using Spot Instances」を参照してください。 完了時間や必要な容量が柔軟な作業については、スポットインスタンスによってクラスターの運用コ ストを大幅に削減できます。例えば、アプリケーションのテスト、時間制約のない作業、実行時間が 長くロードにばらつきがあるクラスターなどが、スポットインスタンスの使用に適しています。 Note クラスターが一時的であると予想され、ワークロードが重要でない限り、マスターノードお よびコアノードにスポットインスタンスはお勧めしません。また、タイムクリティカルなク ラスターや、容量を確実に確保する必要があるクラスターにも、スポットインスタンスはお 勧めできません。このようなクラスターは、オンデマンドインスタンスを使用して起動して ください。 トピック • スポットインスタンスはどのような場合に使用しますか? (p. 44) • スポットインスタンスとして起動するインスタンスグループの選択 (p. 45) • Amazon EMR でのスポットインスタンスの価格 (p. 46) • アベイラビリティーゾーンとリージョン (p. 47) • クラスターでスポットインスタンスを起動する (p. 47) • クラスターのスポットインスタンスの数を変更する (p. 51) • スポットインスタンスのトラブルシューティング (p. 54) スポットインスタンスはどのような場合に使用しますか? スポットインスタンスを使って Amazon EMR クラスターを実行するのが便利なシナリオはいくつか あります。 長時間稼働クラスターおよびデータウェアハウス コンピューターの計算処理機能で変動を予測できる永続的な Amazon EMR クラスター(データウェ アハウスなど)を実行している場合は、スポットインスタンスによって低コストでピーク時の需要に 対応できます。マスターインスタンスグループとコアインスタンスグループについては、標準の容量 を処理するためにオンデマンドとして起動します。一方、タスクインスタンスグループは、スポット インスタンスとして起動し、ピーク時のロード要件に対応します。 コスト主導の作業 完了までの時間よりも、コストをかけないことの方が重要な一時クラスターを実行している場合、一 部の作業が失われてもよいときは、クラスター全体(マスター、コア、およびタスクインスタンスグ ループ)をスポットインスタンスとして実行して、最大限のコスト削減を実現できます。 データクリティカルな作業 完了までの時間よりも、コストをかけないことの方が重要な一時クラスターを実行している場合、す べての作業を保持する必要があるときは、マスターインスタンスグループとコアインスタンスグルー プをオンデマンドとして起動し、スポットインスタンスの 1 つ以上のタスクインスタンスグループで 補完します。マスターインスタンスグループとコアインスタンスグループをオンデマンドとして実行 すると、データが HDFS に確実に保持されるので、スポット市場の変動によるクラスター停止が発 生しなくなります。同時にスポットインスタンスとしてタスクインスタンスグループを実行すること で、コストを削減できます。 アプリケーションのテスト 実稼働環境で起動できるよう準備する目的で新しいアプリケーションをテストする場合は、クラス ター全体(マスター、コア、およびタスクインスタンスグループ)をスポットインスタンスとして実 行し、テストコストを削減できます。 44 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する スポットインスタンスとして起動するインスタンスグループの 選択 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR でクラスターを起動するとき、インスタンスグループ(マスター、コア、およびタス ク)の一部またはすべてをスポットインスタンスとして起動するように選択できます。各インスタン スグループタイプがクラスターではそれぞれ異なる役割を果たすので、スポットインスタンスとして 各インスタンスグループを起動したときの意味合いもそれぞれ異なります。 オンデマンドまたはスポットインスタンスのいずれかでインスタンスグループを起動した場合、クラ スターの実行中にその分類を変更することはできません。オンデマンドインスタンスグループをス ポットインスタンスに、またはスポットインスタンスをオンデマンドインスタンスグループに変更す るには、クラスターを終了し、新しいクラスターを起動する必要があります。 次の表は、さまざまなアプリケーションでスポットインスタンスを使用するための起動設定を示して います。 プロジェクト マスターインスタン スグループ コアインスタンスグ ループ タスクインスタンス グループ 長時間稼働クラスター オンデマンド オンデマンド スポット コスト主導の作業 スポット スポット スポット データクリティカルな作業 オンデマンド オンデマンド スポット アプリケーションのテスト スポット スポット スポット スポットインスタンスとしてのマスターインスタンスグループ マスターノードは、クラスターを制御し、指示を与えます。マスターノードが終了するとクラスター も終了するので、マスターノードは、突然終了しても問題が発生しないクラスターを実行している場 合にのみ、スポットインスタンスとして起動するようにします。例えば、新しいアプリケーションを テストしている場合、Amazon S3 などの外部ストアにクラスターのデータを定期的に保持している場 合、またはクラスターが確実に完了することよりもコストの方が重要なクラスターを実行している場 合などがこれに当てはまります。 マスターインスタンスグループをスポットインスタンスとして起動する場合、クラスターは、そのス ポットインスタンスリクエストが満たされるまで開始されません。入札価格を選択する場合は、この 点を考慮に入れてください。 スポットインスタンスマスターノードを追加できるのは、クラスターの起動時のみです。実行中のク ラスターに対してマスターノードを追加したり削除したりすることはできません。 通常は、クラスター全体(すべてのインスタンスグループ)をスポットインスタンスとして実行して いる場合にのみ、マスターノードをスポットインスタンスとして実行します。 スポットインスタンスとしてのコアインスタンスグループ コアノードはデータを処理して、HDFS を使用して情報を格納します。通常、タスクノードを実行し ていない場合や、スポットインスタンスとして実行している場合は、スポットインスタンスとしての みコアノードを実行します。 コアインスタンスグループをスポットインスタンスとして起動した場合、インスタンスグループが起 動するのは、リクエストされたすべてのコアインスタンスのプロビジョニングが完了してからです。 つまり、6 個のノードを持つコアインスタンスグループをリクエストした場合、入札価格以下で使用 45 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する できるノードが 5 個しかないと、インスタンスグループは起動しません。この場合、Amazon EMR は、6 個のコアノードすべてがお客様のスポット価格で使用できるようになるまで、または、お客様 自身がクラスターを停止するまで待ち続けます。 スポットインスタンスコアノードは、クラスターを起動するとき、または、実行中のクラスターに容 量を追加するときに追加できます。インスタンス数を減らして、実行中のクラスターのコアインスタ ンスグループのサイズを縮小することはできません。ただし、AWS CLI または API を使用して、コ アインスタンスグループのインスタンスを終了することはできます。そうする場合は、注意が必要で す。コアインスタンスグループのインスタンスを終了すると、データを喪失する危険性があり、イン スタンスの自動的な置換が行われなくなります。 スポットインスタンスとしてのタスクインスタンスグループ タスクノードはデータを処理しますが、HDFS に永続的データを保持しません。スポット価格が入札 価格を超えたためにタスクノードが終了しても、データが失われることはないので、クラスターへの 影響も最小限に抑えられます。 1 つ以上のタスクインスタンスグループをスポットインスタンスとして起動すると、入札価格で可能 な数だけタスクノードがプロビジョニングされます。つまり、つまり、6 個のノードを持つタスクイ ンスタンスグループをリクエストした場合、入札価格で使用できるスポットインスタンスノードが 5 個しかないと、インスタンスグループは 5 個のノードで起動され、後で使用できるようになったとき 6 個目が追加されます。 スポットインスタンスとしてタスクインスタンスグループを起動すると、最小限のコストで戦略的に クラスターの容量を拡大できます。マスターインスタンスグループとコアインスタンスグループをオ ンデマンドインスタンスとして起動すると、クラスターの実行中、その容量は確保されます。また、 必要に応じてタスクインスタンスをタスクインスタンスグループに追加し、ピーク時のトラフィック を処理したり、データ処理の速度を上げたりすることができます。 コンソール、AWS CLI、または API を使用してタスクノードを追加または削除できます。また、コン ソール、AWS CLI、または API を使用してタスクグループを追加することができますが、作成したタ スクグループを削除することはできません。 Amazon EMR でのスポットインスタンスの価格 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR の請求には 2 つのコンポーネントがあります。1 つはクラスターによって起動される EC2 インスタンスのコスト、もう 1 つはクラスターを管理するために Amazon EMR が追加する料金 です。スポットインスタンスを使用する場合、スポット価格は需要と供給の変動によって変わる可能 性がありますが、Amazon EMR の料金は固定です。 スポットインスタンスを購入する場合、入札価格は、インスタンスグループの起動時にのみ設定でき ます。この価格を後で変更することはできません。長時間稼働クラスターのインスタンスグループの 入札価格を設定するときは、この点を考慮する必要があります。 さまざまなインスタンスグループを、それぞれ異なる入札価格で起動できます。例えば、クラスター 全体がスポットインスタンスで実行されている場合、そのクラスターのマスターインスタンスグルー プの入札価格は、タスクインスタンスグループよりも高く設定します。これは、マスターが終了する と、クラスターが終了するからです。タスクインスタンスについては、終了しても置き換えることが できます。 クラスターでインスタンスを手動で開始および停止すると、1 時間に満たない分については、1 時間 分として請求されます。スポット価格が入札価格を上回ったために、AWS によってインスタンスが終 了した場合、1 時間に満たない分については、Amazon EC2 または Amazon EMR から請求されませ ん。 [Request Spot] を選択して [Bid Price] 横の情報ツールヒントにマウスを合わせると、コンソールにリ アルタイムのスポット価格を表示できます。選択したリージョンの各アベイラビリティーゾーンの価 46 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する 格が表示されます。最低価格は緑色の列です。インスタンスの最低価格およびオンデマンド料金の詳 細については、「Amazon EC2 料金表ページ」を参照してください。 アベイラビリティーゾーンとリージョン このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターを起動するときに、リージョン、アベイラビリティーゾーン(EC2 サブネットに基づ く)、スポット価格を指定するオプションがあります。コンソールの [Bid Price] ツールヒントで各 アベイラビリティーゾーンごとに表示されます。Amazon EMR は指定した入札価格の落札に基い て、選択したアベイラビリティーゾーンのすべてのインスタンスグループを起動します。また、[EC2 Subnet] を選択することで、クラスターを起動するアベイラビリティーゾーンを選択できます。サブ ネットを選択する場合、入札価格のツールヒントはこれに対応するアベイラビリティーゾーンとス ポット価格の列にアンダーラインを引いて示します。 アベイラビリティーゾーン間におけるスポット価格は変動するので、最低初期価格が設定されている アベイラビリティーゾーンを選択しても、クラスターの期間中にそれが最低価格になるとは限りませ ん。最適な結果を得られるようにするには、クラスターのアベイラビリティーゾーンを選択する前に アベイラビリティーゾーンの価格の履歴を確認する必要があります。 Note Amazon EMR では、コアインスタンスグループに対して指定した Amazon EC2 インスタンス タイプの空き容量に基づいてアベイラビリティーゾーンが選択されるので、クラスターは、 他の EC2 インスタンスタイプの空き容量が少ないアベイラビリティーゾーンで終了する可 能性があります。例えば、コアインスタンスグループをラージとして、またマスターインス タンスグループをエクストララージとして起動すると、マスターノードのスポットインスタ ンスリクエストを満たすために、未使用のエクストララージ容量が十分にないアベイラビリ ティーゾーンを起動する場合があります。この状況の場合、コアインスタンスグループをス ポットインスタンスとして起動しても、マスターインスタンスグループはオンデマンドとし て起動することができます。 クラスターのすべてのインスタンスグループが、オンデマンドかスポットインスタンスかに関わらず 1 つのアベイラビリティーゾーンで起動されます。複数のアベイラビリティーゾーンでインスタンス グループを実行すると、追加のデータ転送コストとパフォーマンスオーバーヘッドが発生し、好まし くありません。1 つのアベイラビリティーゾーンを使用するのは、このような理由からです。 クラスターでスポットインスタンスを起動する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 新しいインスタンスグループを起動するときに、オンデマンドまたはスポットインスタンスのいずれ かとして、そのグループで Amazon EC2 インスタンスを起動できます。スポットインスタンスを起動 する手順は、入札価格を指定することを除いて、オンデマンドインスタンスの起動と同じです。 Amazon EMR コンソールを使用してスポットインスタンスでクラスターを起 動する スポットインスタンスでクラスター全体を起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. 3. [Create cluster] を選択します。 [Hardware Configuration] セクションで、マスターノードをスポットインスタンスとして実行する には、[Master] 行の [Request Spot] をクリックして、[Bid Price] フィールドに、1 つのインスタ 47 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する ンスに対して支払える最大時間料金をインスタンスごとに入力します。コンソールで現在のリー ジョンのすべてのアベイラビリティーゾーンのスポット価格を表示するには、[Bid Price] フィー ルドの横にある情報ツールヒントにマウスを合わせます。ほとんどの場合、現在のスポット価格 を上回る価格を入力します。 4. コアノードをスポットインスタンスとして実行するには、[Core ] 行の [Request Spot] チェック ボックスをオンにして、[Spot Bid Price] フィールドに、1 つのインスタンスに対して支払える最 大時間料金をインスタンスごとに入力します。 5. タスクノードをスポットインスタンスとして実行するには、[Task] 行の [Request Spot] チェック ボックスをオンにして、[Spot Bid Price] フィールドに、1 つのインスタンスに対して支払える最 大時間料金をインスタンスごとに入力します。 Note また、[Add task instance group] をクリックし、スポットインスタンスを使用して追加の タスクインスタンスグループを作成することもできます(最大 48 個)。 6. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 AWS CLI を使用してスポットインスタンスでクラスターを起動する AWS CLI を使用してスポットインスタンスでクラスター全体を起動したり、スポットインスタンス で特定のインスタンスグループを起動したりできます。CLI および API を使用すると、アベイラビリ ティーゾーンを選択できます。アベイラビリティーゾーンを選択しない場合は、Amazon EMR が自動 的に選択します。 AWS CLI を使用してスポットインスタンスでクラスター全体を起動するには インスタンスグループが AWS CLI においてスポットインスタンスで起動されるように指定するに は、create-cluster サブコマンドを入力し、--instance-groups パラメーターを BidPrice 引 数と共に使用します。 • マスター、コア、およびタスクインスタンスグループがすべてスポットインスタンスを使用する クラスターを作成するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換え ます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Spot cluster" --ami-version 3.3 -applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1,BidPrice=0.25 \ InstanceGroupType=CORE,BidPrice=0.03,InstanceType=m3.xlarge,InstanceCount=2 \ InstanceGroupType=TASK,BidPrice=0.10,InstanceType=m3.xlarge,InstanceCount=3 • Windows ユーザー: aws emr create-cluster --name "Spot cluster" --amiversion 3.3 --applications Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1,BidPrice=0.25 InstanceGroupType=CORE,BidPrice=0.03,InstanceType=m3.xlarge,InstanceCount=2 InstanceGroupType=TASK,BidPrice=0.10,InstanceType=m3.xlarge,InstanceCount=3 48 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 Java SDK を使用してスポットインスタンスでクラスターを起動する Java SDK を使用してスポットインスタンスでクラスター全体を起動するには • インスタンスグループがスポットインスタンスとして起動されるように指定するには、そのイン スタンスグループに対してインスタンス化する withBidPrice オブジェクトの withMarket お よび InstanceGroupConfig プロパティを設定します。次のコードは、スポットインスタンス として実行されるマスター、コア、およびタスクインスタンスグループを定義する方法を示して います。 InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig() .withInstanceCount(1) .withInstanceRole(“MASTER”) .withInstanceType(“m3.xlarge”) .withMarket("SPOT") .withBidPrice(“0.25”); InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig() .withInstanceCount(4) .withInstanceRole(“CORE”) .withInstanceType(“m3.xlarge”) .withMarket("SPOT") .withBidPrice(“0.03”); InstanceGroupConfig instanceGroupConfigTask = new InstanceGroupConfig() .withInstanceCount(2) .withInstanceRole(“TASK”) .withInstanceType(“m3.xlarge”) .withMarket("SPOT") .withBidPrice(“0.10”); Amazon EMR コンソールを使用してスポットインスタンスでタスクグループ を起動する スポットインスタンスでタスクインスタンスグループを起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Hardware Configuration] セクションで、タスクノードのみをスポットインスタンスとして実行 するには、[Task ] 行の [Request Spot] をオンにして、[Bid Price] フィールドに、1 つのインスタ ンスに対して支払える最大時間料金をインスタンスごとに入力します。コンソールで現在のリー ジョンのすべてのアベイラビリティーゾーンのスポット価格を表示するには、[Bid Price] フィー ルドの横にある情報ツールヒントにマウスを合わせます。ほとんどの場合、現在のスポット価格 を上回る価格を入力します。 49 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する 4. 5. スポットインスタンスを使用するタスクインスタンスグループを追加するには、[Add task instance group] をクリックして、前のステップに従います。コンソールを使用して、最大 48 個 のタスクインスタンスグループを追加できます。 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 AWS CLI を使用してスポットインスタンスでタスクグループを起動する スポットインスタンスを使用してすべてのインスタンスグループを起動するのではなく、より一般的 なユースケースは、スポットインスタンスを使用して 1 つ以上のタスクグループを起動することで す。以下のセクションでは、コンソール、AWS CLI、SDK、および API を使用したスポットインスタ ンスとタスクグループの起動を示します。 AWS CLI を使用してスポットインスタンスでタスクインスタンスグループを起動するには AWS CLI を使用してスポットインスタンスでタスクインスタンスグループを起動するには、タスクイ ンスタンスグループの BidPrice を指定します。 • スポットインスタンスで単一のタスクインスタンスグループを起動するには、次のコマンドを入 力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Spot cluster" --ami-version 3.3 -applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1 \ InstanceGroupType=CORE,InstanceType=m3.xlarge,InstanceCount=2 \ InstanceGroupType=TASK,BidPrice=0.03,InstanceType=m3.xlarge,InstanceCount=4 • Windows ユーザー: aws emr create-cluster --name "Spot cluster" --amiversion 3.3 --applications Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1 InstanceGroupType=CORE,InstanceType=m3.xlarge,InstanceCount=2 InstanceGroupType=TASK,BidPrice=0.03,InstanceType=m3.xlarge,InstanceCount=4 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 • スポットインスタンスで複数のタスクインスタンスグループを起動するには、次のコマンドを入 力し、myKey を EC2 キーペアの名前に置き換えます。1 つのコマンドで最大 5 個のタスクイン スタンスグループを追加できます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Spot cluster" --ami-version 3.3 -applications Name=Hive Name=Pig \ 50 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1 \ InstanceGroupType=CORE,InstanceType=m3.xlarge,InstanceCount=2 \ InstanceGroupType=TASK,BidPrice=0.03,InstanceType=m3.xlarge,InstanceCount=4 \ InstanceGroupType=TASK,BidPrice=0.04,InstanceType=m3.xlarge,InstanceCount=2 • Windows ユーザー: aws emr create-cluster --name "Spot cluster" --amiversion 3.3 --applications Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1 InstanceGroupType=CORE,InstanceType=m3.xlarge,InstanceCount=2 InstanceGroupType=TASK,BidPrice=0.03,InstanceType=m3.xlarge,InstanceCount=4 InstanceGroupType=TASK,BidPrice=0.04,InstanceType=m3.xlarge,InstanceCount=2 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 Java SDK を使用してスポットインスタンスでタスクグループを起動する Java SDK を使用してスポットインスタンスでタスクインスタンスグループを起動するには • インスタンスグループがスポットインスタンスとして起動されるように指定するには、そのイン スタンスグループに対してインスタンス化する withBidPrice オブジェクトの withMarket お よび InstanceGroupConfig プロパティを設定します。次のコードでは、タイプ m1.large、イ ンスタンス数 10 のタスクインスタンスグループを作成します。これは 0.35 USD を最大入札価格 として指定し、スポットインスタンスでタスクグループを起動します。 InstanceGroupConfig instanceGroupConfigMaster = new InstanceGroupConfig() .withInstanceCount(1) .withInstanceRole(“MASTER”) .withInstanceType(“m3.xlarge”) InstanceGroupConfig instanceGroupConfigCore = new InstanceGroupConfig() .withInstanceCount(4) .withInstanceRole(“CORE”) .withInstanceType(“m3.xlarge”) InstanceGroupConfig instanceGroupConfig = new InstanceGroupConfig() .withInstanceCount(10) .withInstanceRole(“TASK”) .withInstanceType(“m3.xlarge”) .withMarket"("SPOT") .withBidPrice(“0.35”); クラスターのスポットインスタンスの数を変更する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 51 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する いくつかの制約はありますが、クラスターのスポットインスタンスの数を変更できます。たとえば、 マスターインスタンスグループに 1 つのインスタンスのみが含まれている場合、インスタンスグルー プがスポットインスタンスを使用しているかどうかにかかわらず、マスターグループのインスタンス 数を変更することはできません。 マスターノードしか含まれないクラスターを実行している場合は、インスタンスグループまたはイン スタンスをそのクラスターに追加することはできません。クラスターでインスタンスグループを追加 または変更するには、そのクラスターに 1 つ以上のコアインスタンスが必要です。 作成時にスポットインスタンスを使用してインスタンスグループを定義できるのみです。たとえば、 オンデマンドインスタンスを使用してコアインスタンスグループを起動する場合、後でスポットイン スタンスに変更することはできません。 以下の例は、コンソール、CLI、SDK、および API を使用して、インスタンスグループのスポットイ ンスタンスの数を変更する方法を示しています。 Amazon EMR コンソールを使用してスポットインスタンスの数を変更する 1 つ以上のインスタンスグループのスポットインスタンスを使用してクラスターを起動する場 合、Amazon EMR コンソールを使用して、それらのグループに対してリクエストされたスポットイ ンスタンス数を変更できます。タスクインスタンスの数は追加または削除できますが、クラスターの コアインスタンスは追加しかできません。タスクインスタンスの数をゼロに設定すると、すべてのス ポットインスタンスが削除されますが、インスタンスグループは削除されません。 コンソールを使用してインスタンスグループのスポットインスタンスの数を変更するには 1. Amazon EMR コンソールの [Cluster List] ページで、クラスターのリンクをクリックします。 2. [Resize] をクリックします。 3. [Resize Cluster] ダイアログの [Count] 列で、スポットインスタンスを追加するインスタンスグ ループの [Resize] リンクをクリックします。[Add task instance group] をクリックして、スポッ トインスタンスを使用するタスクグループを追加することもできます(最大 48 個)。 4. コアインスタンスまたはタスクインスタンスを追加するには、より大きな番号を [Count] 列に入 力し、チェックマークをクリックして変更を確認します。タスクインスタンス数を減らすには、 より小さな数を [Count] 列に入力し、チェックマークをクリックして変更を確認します。インス タンスの数を変更したら、[Close] をクリックします。 Note コンソールを使用してインスタンスグループにスポットインスタンスを追加または削除 するときは、入札価格を変更することはできません。また、タスクグループのインスタ ンス数を 0 に変更すると、すべてのスポットインスタンスが削除されますが、インスタ ンスグループは削除されません。 AWS CLI を使用してスポットインスタンスの数を変更する AWS CLI を使用すると、コアインスタンスグループのスポットインスタンスの数を増やす、タスクイ ンスタンスグループのスポットインスタンスの数を増減する、スポットインスタンスを含む 1 つ以上 のタスクインスタンスグループを追加する、またはコアインスタンスグループのスポットインスタン スを終了することができます。 AWS CLI を使用してインスタンスグループのスポットインスタンスの数を変更するには modify-instance-groups サブコマンドを InstanceCount パラメーターと共に使用して、コア グループまたはタスクグループにスポットインスタンスを追加したり、AWS CLI のタスクグルー プからインスタンスを削除したりできます。コアグループまたはタスクグループにインスタンス を追加するには、InstanceCount を増やします。タスクグループのインスタンス数を減らすに 52 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する は、InstanceCount を減らします。タスクグループのインスタンス数を 0 に変更すると、すべての スポットインスタンスが削除されますが、インスタンスグループは削除されません。 1. コンソールを使用するか、次のように入力して、変更するクラスターのクラスター ID を取得しま す。 aws emr list-clusters 2. インスタンスグループのインスタンス数を変更するには、InstanceGroupId が必要で す。InstanceGroupId を取得するには、 aws emr describe-cluster --cluster-id string のように、describe-cluster サブコマンドと共にクラスター ID を使用します。出力は、各イ ンスタンスグループの ID を含む、Cluster という名前の JSON のオブジェクトです。 grep、jq などのプログラムに JSON オブジェクトにパイプ処理することもできます。クラスター のインスタンスグループ名と ID を取得するには、Unix ベースのシステムで jq を使用して、次の ように入力します。 aws emr describe-cluster --cluster-id string | jq ".Cluster.InstanceGroups[] | {Name,Id}" 3. タスクインスタンスグループのスポットインスタンスの数を 3 から 4 に増やすには、次のように 入力します。 aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-31JXXXXXXBTO,InstanceCount=4 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 AWS CLI を使用して、スポットインスタンスの 1 つ以上のタスクインスタンスグループをク ラスターに追加するには AWS CLI を使用して、スポットインスタンスの 1 つ以上のタスクインスタンスグループを addinstance-groups でクラスターに追加できます。1 つのコマンドで最大 5 個のタスクインスタンス グループを追加できます。 1. スポットインスタンスの 1 つのタスクインスタンスグループをクラスターに追加するには、次の ように入力します。 aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,BidPrice=.25,InstanceGroupType=task,InstanceType=m3.xlarge 2. スポットインスタンスの複数のタスクインスタンスグループをクラスターに追加するには、次の ように入力します。 aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,BidPrice=.25,InstanceGroupType=task,InstanceType=m3.xlarge InstanceCount=4,BidPrice=.50,InstanceGroupType=task,InstanceType=m3.xlarge 3. AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 53 Amazon EMR 開発者ガイド (オプション)スポットインスタンスでコストを削減する AWS CLI を使用してコアインスタンスグループでスポットインスタンスを終了するには AWS CLI を使用して、コアインスタンスグループのスポットインスタンスを modify-instancegroups サブコマンドで終了できます。そうする場合は、注意が必要です。コアインスタンスグルー プのインスタンスを終了すると、データを喪失する危険性があり、インスタンスの自動的な置換が 行われなくなります。特定のインスタンスを終了するには、インスタンスグループ ID(aws emr describe-cluster --cluster-id コマンドによって返される)とインスタンス ID(aws emr list-instances --cluster-id コマンドによって返される)が必要です。 • 次のコマンドを入力して、コアインスタンスグループのインスタンスを終了します。 aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-6RXXXXXX07SA,EC2InstanceIdsToTerminate=i-f9XXXXf2 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Java SDK を使用してスポットインスタンスをインスタンスグループに追加す る Java SDK を使用してスポットインスタンスをクラスターに追加するには • インスタンスグループがスポットインスタンスとして起動されるように指定するには、そのイン スタンスグループに対してインスタンス化する withBidPrice オブジェクトの withMarket お よび InstanceGroupConfig プロパティを設定します。次のコードでは、タイプ m1.large、イ ンスタンス数 10 のタスクインスタンスグループを作成します。また、最高入札価格として 0.35 USD を指定し、スポットインスタンスとして実行します。インスタンスグループを変更するため の呼び出しを行うときに、次のオブジェクトインスタンスを渡します。 InstanceGroupConfig instanceGroupConfig = new InstanceGroupConfig() .withInstanceCount(10) .withInstanceRole(“TASK”) .withInstanceType(“m3.xlarge”) .withMarket("SPOT") .withBidPrice(“0.35”); スポットインスタンスのトラブルシューティング このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次のトピックでは、スポットインスタンスの使用時に発生する可能性がある問題に対処する方法につ いて説明します。クラスターの問題をデバッグする方法の詳細については、「クラスターをトラブル シューティングする (p. 510)」を参照してください。 スポットインスタンスを受け取れなかったのはなぜですか? スポットインスタンスは、使用可能な容量と入札価格に基づいてプロビジョニングされます。リクエ ストしたスポットインスタンスを受け取ることができなかった場合、それは入札価格が現在のスポッ ト価格を下回っているか、お客様の入札価格ではリクエストを満たすだけの容量を確保できないこと を意味します。 54 Amazon EMR 開発者ガイド ソフトウェアの設定 マスターインスタンスグループとコアインスタンスグループは、リクエストされたインスタンスがす べてプロビジョニングできるようになるまで利用できません。タスクノードについては、使用可能に なった時点で利用できます。 満たされていないスポットインスタンスリクエストに対処する 1 つの方法として、一度クラスターを 終了し、入札価格を高くして新しいクラスターを起動するというものがあります。スポットインスタ ンスの価格履歴に示されている最近の落札価格は、いくらで入札すれば一番コストを節約して落札で きるのかを判断するのに役立ちます。スポットインスタンスの価格履歴は、「Amazon EC2 料金表」 の「スポットインスタンス」で確認できます。 また、リクエストするインスタンスのタイプを変更するというオプションもあります。例えば、エク ストララージインスタンスをリクエストし、一定の期間が経過してもそのリクエストが満たされな かった場合は、クラスターを再起動して、4 つのラージインスタンスをリクエストすることを検討し ます。基本料金はインスタンスタイプごとに異なるので、入札価格はそれに応じて調整する必要があ ります。例えば、エクストララージインスタンスのオンデマンド料金の 80% で入札した場合、新しい スポットインスタンスリクエストの入札価格は、ラージインスタンスのオンデマンド料金の 80% にな るように調整します。 スポットインスタンスリクエストのフルフィルメントにおける final 変数は、ご利用のリージョンに 未使用の容量があるかどうかによっても変わります。他のリージョンでスポットインスタンスリクエ ストを起動して試すことができます。ただし、このオプションを選択する場合は、リージョン間での データ転送の影響を考慮してください。たとえば、データが格納されている Amazon Simple Storage (Amazon S3) バケットがリージョン us-east-1 にある場合、スポットインスタンスとしてクラスター を us-west-1 で起動すると、リージョン間のデータ転送に伴う追加コストが、スポットインスタンス によるコスト節約分を上回ることがあります。 スポットインスタンスが終了したのはなぜですか? スポットインスタンス価格が入札価格を上回ると、スポットインスタンスは自動的に終了するように 設計されています。 入札価格がスポットインスタンス価格以下の場合、インスタンスはクラスターの終了時に普段と同じ ように終了したか、エラーによって終了した可能性があります。クラスターのエラーをデバッグする 方法の詳細については、「クラスターをトラブルシューティングする (p. 510)」を参照してくださ い。 スポットインスタンスの価格履歴を確認するにはどうすればよいですか? スポットインスタンスの価格履歴は、「Amazon EC2 料金表」の「スポットインスタンス」で確認で きます。この価格情報は、定期的に更新されています。 ソフトウェアの設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は Amazon マシンイメージ(AMI)を使用して、クラスター内の起動するインスタンス 上の Linux、Hadoop、およびその他のソフトウェアをインストールします。Amazon EMR AMI の新 しいバージョンは定期的にリリースされ、新しい機能と問題が修正されます。可能な限り最新の AMI を使用して、クラスターを起動することをお勧めします。AMI の最新バージョンは、コンソールから クラスターを起動する場合のデフォルトです。 Amazon EMR によってインストールされる Hadoop の AWS バージョンは、Apache Hadoop を ベースにしたものであり、AWS での動作を効率的にするパッチおよび改良が追加されています。各 Amazon EMR AMI は、Hadoop のデフォルトバージョンと関連付けられています。アプリケーション で、デフォルトと異なるバージョンの Hadoop が必要な場合は、クラスターの起動時にその Hadoop バージョンを指定します。 55 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) クラスター上のインストールに使用できる標準ソフトウェアおよびアプリケーションに加えて、ブー トストラップアクションを使用して、カスタムソフトウェアをインストールし、クラスター上のアプ リケーションの構成を変更できます。ブートストラップアクションとは、Amazon EMR がクラスター を起動したときにインスタンスで実行されるスクリプトのことです。ブートストラップアクションを 記述することも、Amazon EMR によって提供される、事前に定義されたブートストラップアクション を使用することもできます。ブートストラップアクションの一般的な用途は、Hadoop 設定を変更す ることです。 詳細については、次のトピックを参照してください。 トピック • Amazon マシンイメージ(AMI) (p. 56) • Hadoop のバージョンを選択する (p. 112) • (オプション)追加のソフトウェアをインストールするためのブートストラップアクションの作 成 (p. 121) Amazon マシンイメージ(AMI) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR(Amazon EMR)では、クラスターを実行するために起動 EC2 インスタンス を、Amazon Machine Images(AMI)を使用して初期化します。AMI には、Linux オペレーティング システムと、クラスターを実行するために使用するその他のソフトウェアが含まれています。これ らの AMI は Amazon EMR に固有であり、クラスターを実行するときにのみ使用されます。Amazon EMR では Hadoop やその他のソフトウェアなど、新しいバージョンのアプリケーションによって AMI が定期的に更新され、ユーザーは改善点や新機能を利用することができます。更新された AMI を使用 して新しいクラスターを作成する場合、カスタムアプリケーションがそのクラスターに対して動作す ることを確認する必要があります。 AMI に関する一般的な情報については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「Amazon マシンイメージ(AMI)」を参照してください。Amazon EMR AMI に含まれるソフトウェ アのバージョンについては、「Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バー ジョン (p. 60)」を参照してください。 AMI のバージョニングでは、クラスターが EC2 インスタンスの起動に使用する特定の AMI を選択で きます。Hadoop の特定のバージョンまたは設定に依存するアプリケーションをお使いの場合は、新 しい AMI 上でアプリケーションのテストを完了するまでアップグレードを遅らせたいことがありま す。 コンソールまたは AWS CLI を使用するときは、クラスター作成中の AMI のバージョンの指定は必須 で、API および SDK では省略可能です。クラスター作成時に AMI のバージョンを指定すると、イン スタンスはその AMI を使って作成されます。これにより、長期にわたって実行するアプリケーション やミッションクリティカルなアプリケーションの安定性が得られます。トレードオフは、新しい AMI を使用して新しいクラスターを起動しなければ、アプリケーションは最新バージョンの AMI の新機 能を利用できないことです。AMI バージョンの指定の詳細については、「AMI バージョン番号 (バー ジョン 2.x、3.x) (p. 57)」を参照してください。 API および SDK では、AMI のバージョンは省略可能です。AMI のバージョンパラメーターを指定せ ずに、API または SDK を使用する場合、クラスターは使用しているツールのデフォルトの AMI バー ジョンで実行されます。 トピック • AMI バージョン番号 (バージョン 2.x、3.x) (p. 57) • 新しいクラスターの AMI バージョンの指定 (p. 57) 56 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) • 実行中のクラスターの AMI バージョンの表示 (p. 58) • Amazon EMR AMI の廃止 (p. 60) • Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バージョン (p. 60) AMI バージョン番号 (バージョン 2.x、3.x) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AMI バージョン番号は、##################.###という形式で 3 つの部分から構成されていま す。クラスターの起動に使用するツール(SDK、API、または AWS CLI)によって、クラスターの起 動に使用する AMI のバージョンを指定するには、いくつかの方法があります。 • Fully specified – 3 つの部分すべてを使用して AMI のバージョンを指定すると(例: --amiversion 2.0.1)、クラスターはそのとおりのバージョンで起動されます。これは、特定の AMI バージョンに依存するアプリケーションを実行する場合に便利です。すべてのツールはこのオプ ションをサポートします。 • Major-minor version specified – AMI のメジャーバージョンとマイナーバージョンだけを指定すると (例: --ami-version 2.0)、クラスターはその指定に一致し、最新のパッチが適用された AMI 上で起動されます。2.0 AMI シリーズの最新のパッチが .4 の場合、上記の例では、AMI 2.0.4 を使 用してクラスターを起動します。このオプションにより、指定した AMI シリーズの最新パッチの利 点が得られます。すべてのツールはこのオプションをサポートします。 新しいクラスターの AMI バージョンの指定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 新しいクラスターを作成したときに使用する AMI のバージョンを指定する必要があります。デフォル トの設定および AMI のバージョンで利用可能なアプリケーションの詳細については、「Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バージョン (p. 60)」を参照してください。 AWS CLI を使用してクラスターの起動中に AMI のバージョンを指定するには AWS CLI を使用してクラスターを作成する場合は、create-cluster サブコマンドに --amiversion パラメーターを追加します。AWS CLI を使用してクラスターを作成する場合、--amiversion パラメーターが必要です。 • クラスターを起動し、完全に AMI を指定する(AMI バージョン 3.11.0 を使用)するには、次の コマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-count 5 --instance-type m3.xlarge • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-count 5 --instance-type m3.xlarge 57 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマス ターノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノード が、--instance-type で指定したインスタンスタイプを使用します。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 以下の例では、メジャーバージョンとマイナーバージョンを使用して AMI を指定します。クラス ターは、この指定に一致し、最新のパッチが適用された AMI 上で起動されます。たとえば、最新 の AMI バージョンが 3.11.0 の場合、--ami-version 3 を指定すると、AMI 3.11.0 を使用して クラスターが起動されます。 aws emr create-cluster --name "Test cluster" --ami-version 2.4 -applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-count 5 --instance-type m3.xlarge AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 実行中のクラスターの AMI バージョンの表示 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターが実行している AMI のバージョンを確認する必要がある場合、コンソール、CLI、または API を使用してこの情報を引き出すことができます。 コンソールを使用して現在の AMI のバージョンを表示するには 1. 2. AWS マネジメントコンソールにサインインした後、Amazon EMR コンソール(https:// console.aws.amazon.com/elasticmapreduce/)を開きます。 [Cluster List] ページでクラスターリンクを選択します。[AMI Version]、およびクラスターに関す るその他の詳細が [Cluster Details] ページに表示されます。 AWS CLI を使用して現在の AMI のバージョンを表示するには AMI バージョンを含めてクラスターに関する情報を取得するには、describe-cluster サブコマン ドを cluster-id パラメーターと共に入力します。describe-cluster サブコマンドを使用するに は、クラスター識別子が必要です。コンソールまたは list-clusters サブコマンドを使用してクラ スター ID を取得できます。 • クラスター情報を表示するには、次のコマンドを入力します。 aws emr describe-cluster --cluster-id j-3QKHXXXXXXARD 出力はクラスターの AMI バージョンを示します。 { "Cluster": { 58 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) "Status": { "Timeline": { "EndDateTime": 1412976409.738, "CreationDateTime": 1412976134.334 }, "State": "TERMINATED", "StateChangeReason": { "Message": "Terminated by user request", "Code": "USER_REQUEST" } }, "Ec2InstanceAttributes": { "Ec2AvailabilityZone": "us-west-2c" }, "Name": "Static AMI Version", "Tags": [], "TerminationProtected": false, "RunningAmiVersion": "2.4.8", "NormalizedInstanceHours": 0, "InstanceGroups": [ { ... } AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 API を使用して現在の AMI のバージョンを表示するには • DescribeJobFlows を呼び出して、クラスターが使用している AMI のバージョンをチェックし ます。次の例に示すように、応答データの一部としてバージョンが返されます。応答のシンタッ クスの詳細については、Amazon EMR API Reference の DescribeJobFlows を参照してくださ い。 <DescribeJobFlowsResponse xmlns="http://elasticmapreduce.&apidomain;/doc/2009-03-31"> <DescribeJobFlowsResult> <JobFlows> <member> ... <AmiVersion> 2.1.3 </AmiVersion> ... </member> </JobFlows> </DescribeJobFlowsResult> <ResponseMetadata> <RequestId> 9cea3229-ed85-11dd-9877-6fad448a8419 </RequestId> </ResponseMetadata> </DescribeJobFlowsResponse> 59 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) Amazon EMR AMI の廃止 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 リリースから 18 か月が経過したバージョンの AMI については、Amazon EMR チームはサポートを打 ち切ることがあります。また、18 か月が経過する前でも、AMI のソフトウェアまたはオペレーティン グシステムにセキュリティ上の危険などの問題が認識された場合には、Amazon EMR チームはその AMI を廃止することがあります。廃止される AMI でクラスターが実行されている場合、そのクラス ターは影響を受けません。ただし、廃止されたバージョンの AMI で新規のクラスターを作成すること はできなくなります。ベストプラクティスは、AMI が古くなることを予定に入れておき、アプリケー ションにとって現実的な範囲でできるだけ早く、新しいバージョンの AMI に移行することです。 Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バージョン このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR では、以下のテーブルに示す AMI バージョン 3.x がサポートされます。一連の 2.x リ リースは、廃止されました。AWS CLI とコンソールを使用してクラスターを作成する場合は、使用す る AMI のバージョンを指定する必要があります。 Important Amazon EMR 4.x リリースへの移行をお勧めします。詳細については、Amazon EMR リリー ス ガイドを参照してください。 Hadoop 2 AMI のバージョン AMI のバー ジョン 含まれるもの コメント リリース日 3.11.0 • AWS SDK for Java 1.10.41 Amazon EMR AMI のこの バージョンで は、以下のバ グ修正と変更 を実施しまし た。 2016 年 1 月 4 日 • AWS SDK for Ruby 2.2.8 • Amazon Linux バージョン 2015.09 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7.1 • Pig 0.12.0 (p. ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u76 • Perl 5.16.3 • PHP 5.6.14 • Python 2.6.9 • R3.2.2 • Ruby 1.8.7 • Scala 2.11.1 60 • MapReduce JobHistory ログが Amazon S3 にプッシュ されるバグ を修正しま した。 • YARN コン テナログが Amazon S3 にプッシュ されるバグ Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント • Spark 1.3.1 3.10.0 を修正しま した。 • AWS SDK for Java 1.10.0 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2015.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7.1 • Pig 0.12.0 (p. リリース日 ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u76 • Perl 5.16.3 • PHP 5.6.9 • Python 2.6.9 • R3.1.1 • Ruby 2.0 • Scala 2.11.1 • Spark 1.3.1 61 Amazon EMR AMI のこの バージョンで は、以下のバ グ修正と変更 を実施しまし た。 2015 年 10 月 2日 • Amazon S3 のログ集計 問題の回 帰である YARN-90 のバグを 修正しまし た。 • YARN-3241 (YARN-3241.002.patch) がパッチさ れました。 • HBase ロ グレベルを WARN に 設定しまし た。 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.9.0 • AWS SDK for Java 1.10 Amazon EMR AMI のこの バージョン では、以下の 主なバグ修正 を実施しまし た。 2015 年 8 月 19 日 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2015.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7.1 • Pig 0.12.0 (p. ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u76 • Perl 5.16.3 • PHP 5.6.9 • Python 2.6.9 • R3.1.1 • Ruby 2.0 • Scala 2.11.1 • Spark 1.3.1 • 複数のサー ビスデーモ ンプロセス がジョブの 障害を発生 させていた 問題を修正 しました。 • 孤立した デーモンプ ロセスを、 新しいプロ セスを開始 する前に強 制終了でき ない問題を 修正しまし た。 • ジョブ履歴 のログが欠 落する問題 を修正しま した。 • インスト ラクショ ンファイ ルがない 状態で削 除すると例 外がキャッ チされず、 エラーが 発生する EMRFS ク ライアン ト側の暗号 化の問題を 修正しまし た。 • HBase シェ ルでの過度 なログ記録 の発生を修 正するブー トストラッ プアクショ 62 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント ンを提供し ました。 詳細につ いては、 「HBase シェルの過 剰なデバッ グログ記 録 (p. 512)」 を参照して ください。 63 リリース日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.3.0 • AWS SDK for Ruby 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2014 年 11 月 6日 • Amazon Linux バージョン 2014.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Hue 3.6 • Pig 0.12.0 (p. • HBase 0.94.18 (p. ) ) • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 64 主な機能更新 • Amazon EMR は Hue をサ ポートす るように なりまし た。Hue は、クラス ターの操作 を容易にす る、Hadoop 用のオープ ンソースの ユーザー インター フェイスで す。Hue を 使用する と、Hive クエリの 実行と作 成、HDFS でのファ イルの管 理、Pig ス クリプト の実行と 作成、お よびテー ブルの管 理を行うこ とができま す。Hue で は、Amazon S3 でファ イルを参照 し、使用す ることもで きます。詳 細について は、「デー タの表示、 照会、操作 に関する Hue の設 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 定 (p. 343)」 を参照して ください。 • Hue リリー スの一部と して Oozie が含まれま す。 レガシー AMI 以下の AMI は廃止されました。これらの AMI でクラスターを起動できる場合がありますが、欠点が あったり、サポートされなくなった古いソフトウェアが含まれる場合があります。ただし、参照のた めのドキュメントをここに維持しました。 廃止された Hadoop 2 AMI バージョン AMI のバー ジョン 含まれるもの コメント リリース日 3.8.0 • AWS SDK for Java 1.9 Amazon EMR AMI のこの バージョンで は、以下を実 施しました。 2015 年 6 月 10 日 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2015.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7 • Pig 0.12.0 (p. ) 主な機能リ リース ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u76 • Perl 5.16.3 • PHP 5.6.9 • Python 2.6.9 • R3.1.1 • Ruby 2.0 • Apache Spark のサ ポート。 詳細につ いては、 「Apache Spark (p. 275)」 を参照して ください。 主なバグ修正 • Scala 2.11.1 • Amazon EMRDynamoDB コネクタ に存在し ていた、マ スターイン スタンスタ イプとコア インスタン スタイプが 異なってい る場合にゼ • Spark 1.3.1 65 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 ロマップタ スクが正し く生成され ないバグを 修正しまし た。 • explain insert overwrite table オペ レーション のターゲッ ト S3 フォ ルダーが削 除された Hive の問題 を修正しま した。 • HIVE-8746、HIVE-8566、HIVE-8162、PIG-4496 の各パッチ が含まれま す。 その他の問題 • srcPrefixesFile を S3DistCp に追加し ました。 詳細につ いては、 「DistCp のオプショ ン (p. 387)」 を参照して ください。 • Amazon EMRDynamoDB コネクタを 使用して、 お客様がコ ネクタで使 用するカス タム AWS 認証情報プ ロバイダを ロードでき るようにな りました。 • 使用されて いないプ 66 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 ロパティ skips3scratch を hivedefault.xml から削除し ます。 67 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.7.0 • AWS SDK for Java 1.9 Amazon EMR AMI のこの バージョン では、以下の 機能がリリー スされていま す。 2015 年 4 月 21 日 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2015.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7 • Pig 0.12.0 (p. ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 68 主なバグ修正 • /var/log は /mnt/ var/log に移動さ れます。/ var/log に書き込ま れたファイ ルは、2 つ のパス間に シンボリッ クリンクが 備わったた め、/mnt/ var/log に書き込ま れます。 • 一部のコン ポーネント で /etc/ init.d に より実行さ れた特定の スクリプト が機能しな いために yum インス トーラで発 生する問題 が修正され ました。 • Hue のイン ストール時 に HBase Thrift サー バーが起動 される問題 が修正され ました。 • Python の ベースおよ びパッケー ジのインス トールで Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント easy_install ではなく pip が使用 されるよう になりまし た。 • デフォル トの Ruby は、Amazon Linux の最 新リリース に対応しま す。以前 は、Amazon EMR では 以前のバー ジョンの Ruby を使 用してい ました。 これらの インタプリ タは引き続 き有効です が、デフォ ルトで最新 バージョン の Amazon Linux に対 応するよう になりまし た。 その他の問題 • Amazon EMR は、VPC の DHCP 設定を完全 に優先する ようになり ます。完全 修飾ドメイ ン名を返す ために使用 される一部 のコマンド で、ホスト の Amazon EC2 名のみ が返される ようになり ました。こ 69 リリース日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 の動作を期 待するスク リプトは失 敗となりま す。詳細に ついては、 「START_FAILED となるエ ラー (p. 543)」 を参照して ください。 3.6.0 • AWS SDK for Java 1.9 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2014.09 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7 • Pig 0.12.0 (p. ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 70 Amazon EMR AMI のこの バージョン では、以下の 機能がリリー スされていま す。 主な機能リ リース • EMRFS が Amazon S3 クライアン ト側の暗号 化をサポー トします。 詳細につ いては、 「EMRFS での Amazon S3 クライアン ト側の暗 号化の使 用 (p. 153)」 を参照して ください。 2015 年 3 月 24 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.5.0 • AWS SDK for Java 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2015 年 3 月 10 日 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2014.09 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7 • Pig 0.12.0 (p. ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 主なバグ修正 • s3distcp で一時認 証情報 (Amazon STS トー クンなど) が使用でき ないバグを 修正しまし た。 • 個々のアッ プロードで Amazon S3 マルチパー トアップ ロードがハ ングする原 因となるバ グを修正し ました。 • HiveDynamoDB コネクタ に関するパ フォーマン スの問題を 修正しまし た。 • Scala 2.11.1 • Hue リダイ レクトミド ルウェアで 発生する問 題(SSL エ ンドポイン トへリダイ レクトされ るときに、 リダイレク トが失敗す る)を修正 しました。 71 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.4.0 • AWS SDK for Java 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2015 年 2 月 26 日 • AWS SDK for Ruby 1.9 • Amazon Linux バージョン 2014.09 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. • Hue 3.7 • Pig 0.12.0 (p. ) ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) ) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 主な機能更新 • Hue のバー ジョンを 3.6 から 3.7.1 に更 新しまし た。 • すべての リージョ ンにおけ る EBSbacked HVM イン スタンスの サポートを 追加しまし た。 • すべての リージョン で、EBSbacked HVM を使 用するすべ てのイン スタンス タイプ用 に、汎用 EBS ルー トボリュー ムを追加し ました。た だし、米国 東部(バー ジニア北 部)、米国 西部 (北カ リフォルニ ア)、アジア パシフィッ ク (東京) の 各リージョ ンは対象 外です。 これらの リージョン • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 72 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 では、イン スタンスが スタンダー ド EBS ボ リュームを 使用するた めです。 • Amazon Kinesis コ ネクタに変 更を加え ました。 これによ り、DynamoDB テーブル と Amazon EMR クラ スターを同 じリージョ ンに配置す る必要があ ります。 主なバグ修正 • パフォーマ ンスに関す る微細なバ グを修正し ました。 • このパッ チが含ま れます: HIVE-7323 73 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.3.2 • AWS SDK for Ruby 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2015 年 2 月 4 日 • Amazon Linux バージョン 2014.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Hue 3.6 • Pig 0.12.0 (p. • HBase 0.94.18 (p. ) ) • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u71 主な機能更新 • Python 2.6.9 • DynamoDB コネクタの パフォーマ ンスの問題 を修正しま す • R 3.0.2 • Ruby 2.0 主なバグ修正 • Perl 5.16.3 • PHP 5.3.28 • Scala 2.11.1 • HDFS から Amazon S3 に 64MB よ り大きな ファイルを コピーする ときに Hue に発生する 問題を修 正。 • 欧州 (フラ ンクフルト) リージョン および 中国 (北京) リー ジョンで非 ASCII キー 名の取り扱 いに不具合 が出る Hue S3 のブラ ウザの問題 を修正。 • 既存の Hue テーブルを 持つリモー ト Hive メ タストア データベー スを使用す るときに Hue に発生 する問題を 修正。 74 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント • 複数のス テートメン ト Hive ク エリからの 結果を保存 するときに Hue に発生 する問題を 修正しまし た。 • インストー ル済みのデ フォルトの Python と pip の間の 不一致を修 正。 • このパッ チが含ま れます: HIVE-7426 75 リリース日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.3.1 • AWS SDK for Ruby 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2014 年 11 月 20 日 • Amazon Linux バージョン 2014.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Hue 3.6 • Pig 0.12.0 (p. • HBase 0.94.18 (p. ) ) • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 主なバグ修正 • Impala のイ ンストール により特定 の Hive コ マンドが失 敗する問題 が修正され ます。 • 欧州 (フラ ンクフルト) リージョン で使用した ときに Hue Amazon S3 ブラウザで 発生する複 数の問題が 修正されま した。 • Scala 2.11.1 • ユーザーの ホームディ レクトリが 見つからな い場合は作 成され、外 部の Hue データベー スの再利用 によって一 部のサービ ス(特に Oozie)が 失敗する問 題が修正さ れます。 • Hue Pig エ ディター のセキュリ ティ上の問 題が修正さ れます。 • Hue 設定 オプション redirect_whitelist 76 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 が修正さ れ、Hue が リダイレク トできるド メインのホ ワイトリス ト作成が可 能になりま す。 • Firefox で Hue を参 照する場合 に、保存し たクエリの Hive Editor での読み込 みに関する 問題が修正 されます。 • Hue Amazon S3 ブラウザの アクセス権 限ボタンが 削除されま す。これら の操作はサ ポートされ ていないた めです。 • 使用すると ファイルの アクセス権 限が失われ た、configurehadoop ス クリプトに 関する問題 が修正され ます。 77 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.3.0 • AWS SDK for Ruby 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2014 年 11 月 6日 • Amazon Linux バージョン 2014.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Hue 3.6 • Pig 0.12.0 (p. • HBase 0.94.18 (p. ) ) • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u71 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 78 主な機能更新 • Amazon EMR は Hue をサ ポートす るように なりまし た。Hue は、クラス ターの操作 を容易にす る、Hadoop 用のオープ ンソースの ユーザー インター フェイスで す。Hue を 使用する と、Hive クエリの 実行と作 成、HDFS でのファ イルの管 理、Pig ス クリプト の実行と 作成、お よびテー ブルの管 理を行うこ とができま す。Hue で は、Amazon S3 でファ イルを参照 し、使用す ることもで きます。詳 細について は、「デー タの表示、 照会、操作 に関する Hue の設 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント 定 (p. 343)」 を参照して ください。 • Hue リリー スの一部と して Oozie が含まれま す。 79 リリース日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.2.3 • AWS SDK for Ruby 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2014 年 31 月 10 日 • Amazon Linux バージョン 2014.03 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. ) • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u65 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 主な機能更新 • EMRFS は、Amazon SQS に 対する Amazon S3 結果整合 性の通知 と、CloudWatch に対する結 果整合性の メトリクス をサポート するように なりまし た。 • EMRFS を 使用した Amazon S3 マルチパー トアップ ロードの パフォーマ ンスが最適 化されまし た。 • configurehadoop ブートスト ラップアク ションは、 さまざま な Hadoop デーモンの ログレベル の設定をサ ポートする ようになり ました。各 デーモン に異なる appender を設定で きるように なり、新し 80 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 い ID とし て、HADOOP、MAPRED、JHS、 および YARN が提 供されるよ うになりま した。 その他の機能 の更新 • 少なくと も 3 時間 分のログ ファイル が、デバッ グを向上さ せるために ディスクで 圧縮されず に保持され ます。古い ログは、ア クティブな アプリケー ションログ を除いて削 除されま す。これ らのログ は、log4j によって更 新されない 限り、ディ スク上で圧 縮されない ままになり ます。 • それらが 圧縮され ると、ロ グファイ ルは参照 を許可する 特別なヘッ ダーと共に Amazon S3 にアップ ロードされ ます(raw ログファイ ルのサイズ が 500MB より小さい 81 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント 場合)。 サイズが 500MB よ り大きい場 合、ファイ ルをダウン ロードする よう求めら れます。 • 圧縮ログ ファイル は元のログ と同じディ レクトリの 一時ディレ クトリで保 持されま す。ログ が /mnt/ var/log/ hadoop に ある場合、 圧縮ログ は、ログの 保持期間 の期限が 切れるま で /mnt/ tmp/mnt/ var/log/ hadoop に 保存されま す。 • 4GB を超 える圧縮ロ グファイル は Amazon S3にアップ ロードされ ません。 • /mnt/tmp の一時ファ イルを消 去する一 時ディレク トリクリー ナーが用意 されまし た。 主なバグ修正 • Hive サー バーがイ 82 リリース日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 ンストール 後に起動し ない問題が 修正されま す。 • Hive ウェ ブインター フェイスが 正常に機能 しない問題 が修正され ます。 • HBase 復 元の手順に よって、ま だ実行中の 場合にソー スクラス ターが破損 する問題が 修正されま す。 • Pig Zebra 形式の分 割計算ロ ジックで、 パフォーマ ンスを向上 させるため にファイル ステータス 再利用のサ ポートを追 加しまし た。 • MapReduce ジョブの終 了中に、パ フォーマン スを向上さ せるために Pig Zebra 形式イン デックス のマルチス レッドの作 成を追加し ました。 • piggybank.jar のレガシー の場所 (/home/ hadoop/ lib/ 83 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 pig/)のサ ポートを追 加しました • ソース ファイル システム が Amazon S3 の場合 に、Pig が 自動並列処 理を使用し ない問題が 修正されま す。 • S3DistCp がすべての -D CLI パラ メーターを 無視する問 題が修正さ れます。 • 次のパッ チが含ま れます: YARN-2008、YARN-1857、YARN-1198、YARN 84 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.2.1 • Amazon Linux バージョン 2014.03 Amazon EMR AMI のこの バージョン は、以下の修 正を備えてい ます。 2014 年 9 月 16 日 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) ) 主なバグ修正 • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u65 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 • EMRFS の 整合性のあ るビュー が追加さ れます。 これによ り、Amazon EMR から Amazon S3 に書き込 まれたオ ブジェクト の整合性の あるビュー を追跡でき ます。詳 細につい ては、the section called “整 合性のある ビュー” (p. 135)を 参照してく ださい。 その他のバグ 修正 • Hive で発生 したポート 転送の問題 が修正され ます。 • HiveMetaStoreChecker で発生する 問題が修正 されます。 • HIVE-7085 の問題の修 正が含まれ ます。 85 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.2.0 • Amazon Linux バージョン 2014.03 Amazon EMR AMI のこの バージョン は、以下の機 能を備えてい ます。 2014 年 9 月 3 日 • Hadoop 2.4.0 (p. 114) • Hive 0.13.1 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) ) 主な機能更新 • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u65 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 • Apache Hive 0.13.1 を追加しま した。詳細 について は、Hive バージョ ンのド キュメン ト (p. )と http:// hive.apache.org/ downloads.html を参照して ください。 • Amazon Kinesis の コネクタ がフラグ kinesis.iteration.timeout.ignore.fail をとるよ うに変更し て、タイム アウト値に 達した場合 でもチェッ クポイント 処理を続行 できるよう にしまし た。 主なバグ修正 • YARN パッ チを適用 しました (YARN-1718、YARN-1923、YARN-1889)。 86 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.1.4 • AWS SDK for Ruby 1.9 Amazon EMR AMI のこの バージョンで は、以下の機 能とバグ修正 を実施しまし た。 2014 年 31 月 10 日 • Amazon Linux バージョン 2014.03 • Hadoop 2.4.0 (p. 114) • Hive 0.11.0.2 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. ) • Impala 1.2.4 (p. 298) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u65 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 主な機能更新 • EMRFS は、Amazon SQS に 対する Amazon S3 結果整合 性の通知 と、CloudWatch に対する結 果整合性の メトリクス をサポート するように なりまし た。 • EMRFS を 使用した Amazon S3 マルチパー トアップ ロードの パフォーマ ンスが最適 化されまし た。 • configurehadoop ブートスト ラップアク ションは、 さまざま な Hadoop デーモンの ログレベル の設定をサ ポートする ようになり ました。各 デーモン に異なる appender を設定で きるように なり、新し 87 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 い ID とし て、HADOOP、MAPRED、JHS、 および YARN が提 供されるよ うになりま した。 その他の機能 の更新 • 少なくと も 3 時間 分のログ ファイル が、デバッ グを向上さ せるために ディスクで 圧縮されず に保持され ます。古い ログは、ア クティブな アプリケー ションログ を除いて削 除されま す。これ らのログ は、log4j によって更 新されない 限り、ディ スク上で圧 縮されない ままになり ます。 • それらが 圧縮され ると、ロ グファイ ルは参照 を許可する 特別なヘッ ダーと共に Amazon S3 にアップ ロードされ ます(raw ログファイ ルのサイズ が 500MB より小さい 88 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント 場合)。 サイズが 500MB よ り大きい場 合、ファイ ルをダウン ロードする よう求めら れます。 • 圧縮ログ ファイル は元のログ と同じディ レクトリの 一時ディレ クトリで保 持されま す。ログ が /mnt/ var/log/ hadoop に ある場合、 圧縮ログ は、ログの 保持期間 の期限が 切れるま で /mnt/ tmp/mnt/ var/log/ hadoop に 保存されま す。 • 4GB を超 える圧縮ロ グファイル は Amazon S3にアップ ロードされ ません。 • /mnt/tmp の一時ファ イルを消 去する一 時ディレク トリクリー ナーが用意 されまし た。 主なバグ修正 • ソース ファイル 89 リリース日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 システム が Amazon S3 の場合 に、Pig が 自動並列処 理を使用し ない問題が 修正されま す。 • HBase 復 元の手順に よって、ま だ実行中の 場合にソー スクラス ターが破損 する問題が 修正されま す。 • S3DistCp がすべての -D CLI パラ メーターを 無視する問 題が修正さ れます。 • 次のパッ チが含ま れます: YARN-2008、YARN-1857、YARN-1198、YARN 90 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.1.2 • Amazon Linux バージョン 2014.03 Amazon EMR AMI のこの バージョンで は、以下のバ グ修正を実施 しました。 2014 年 9 月 16 日 • Hadoop 2.4.0 (p. 114) • Hive 0.11.0.2 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) ) 主なバグ修正 • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u65 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • イメージで AWS CLI を使用する 場合に発生 する問題が 修正されま す。 • Hive で発生 したポート 転送のバグ が修正され ます。 • Scala 2.11.1 • HiveMetaStoreChecker で発生する 問題が修正 されます。 • 次のパッ チが含ま れます: MAPREDUCE-5956、YARN-2026、YARN-2187 91 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.1.1 • Amazon Linux バージョン 2014.03 Amazon EMR AMI のこの バージョンで は、以下のバ グ修正と機能 強化を実施し ました。 2014 年 8 月 15 日 • Hadoop 2.4.0 (p. 114) • Hive 0.11.0.2 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) ) • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u65 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • Scala 2.11.1 92 主な機能更新 • クラスター の有効期間 中に、ある 時点で最大 256 個のア クティブま たは保留中 のステップ まで無制限 のステップ と、最大 1,000 個の ステップレ コード(シ ステムス テップを含 む)の表示 を可能にし ます。詳細 については: the section called “ク ラスターへ の作業の送 信” (p. 504). • C3、R3、 および I2 のインスタ ンスタイプ に拡張ネッ トワーキン グを追加し ました。詳 細について は、『AWS EC2 ユー ザーガイ ド』の「拡 張ネット ワーキン グ」を参照 してくださ い。 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 • Java の バージョン を 7u65 に 更新しまし た。詳細に ついては、 「JDK 7 Update 65 Release」 を参照して ください。 • Impala を 除くすべて のコンポー ネントに AWS SDK 1.7.8 のサ ポートを 追加しまし た。 • Amazon EMR の CloudWatch メトリクス サポートの 拡張性を高 めました。 • 有効 fuse_dfs. 詳細に ついて は、MountableHDFS のウェブサ イトを参照 してくださ い。 主なバグ修正 • Application Master サービス を Task グ ループの インスタ ンスに配置 するバグを 修正しまし た。特定の Application Master デー モンが突然 終了する原 因になって 93 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 いた可能性 がありま す。 • クラスター で 5 GB を 超えるファ イルを移 動または コピーでき ないバグを 修正しまし た。 • ユーザーが Hive をロー カルモード で起動でき ないバグを 修正しまし た。 • NodeManager が利用可能 なすべての マウントポ イントを使 用できない バグを修正 しました。 特定のイン スタンスで エフェメラ ルドライブ を使用する 際に問題が 発生してい ました。 • ResourceManager の問題を修 正しまし た。ユー ザーが localhost の ユーザーイ ンターフェ イスにアク セスできな くなってい ました。 • Amazon S3 バケットに JobHistory ログを保存 できなく なる可能 性のある 94 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 JobHistory のバグを 修正しまし た。 • Hadoop パッチを適 用しました (HDFS-6701、HDFS-6460、HADOOP-10456、 • YARN-1864 を Hadoop 2 に移植し ました。 • Hive の性能 低下を修正 しました。 • Hive を JDK 1.7 で コンパイル しました。 • Hive パッ チを適用 しました (HIVE-6938、HIVE-7429)。 • HBase のバ グをいくつ か修正しま した。 • Amazon Kinesis 用 のコネク タでは当 面、Amazon Kinesis が 利用でき るすべての リージョン をサポート します。 95 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.1.0 • Amazon Linux バージョン 2014.03 Amazon EMR AMI のこの バージョン は、以下の機 能を備えてい ます。 2014 年 5 月 15 日 • Hadoop 2.4.0 (p. 114) • Hive 0.11.0.2 (p. ) • Pig 0.12 (p. ) • HBase 0.94.18 (p. • Impala 1.2.4 (p. 298) ) 主な機能更新 • Mahout 0.9 (p. 120) • Java: Oracle/Sun jdk-7u60 • Perl 5.16.3 • PHP 5.3.28 • Python 2.6.9 • R 3.0.2 • Ruby 2.0 • 新しいパッ ケージと Amazon EMR 機能 をサポー トするため の重要な更 新と機能向 上。詳細に ついては、 以下を参照 してくださ い。Hadoop 2.4.0 (p. 114)、Pig 0.12 (p. )、Impala 1.2.4 (p. 298)、HBase 0.94.18 (p. )、Mahout 0.9 (p. 120)、 および Ruby 2.0。 • Hadoop による Amazon S3 サーバーサ イド暗号化 を有効にし ました。 詳細につ いては、 「Amazon S3 サー バー側の 暗号化を 有効にして クラスター を作成す る (p. 152)」 を参照して ください。 • Java のバー ジョンを 7u60(先 行ダウン ロードリ 96 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 リース) に更新し ました。詳 細について は、「JDK 7 Update 60 Early Access Release」 を参照して ください。 • Hadoop MapReduce の問題 MAPREDUCE-2980 を修正 するため に、Jetty をバー ジョン 6.1.26.emr に更新しま した。 • Hive UDAFPercentile のログの レベルを DEBUG に 変更しまし た。 主なバグ修正 • クラスター の作成時に log-uri 値が指定さ れていない ときに発生 する問題を 修正しまし た。 • Amazon Hadoop ディストリ ビューショ ンのバー ジョンを正 確に表示す るように、 バージョン ユーティリ ティを修正 しました。 97 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 • HADOOP_NAMENODE_HEAPSIZE と HADOOP_DATANODE_HEAPSIZE で設定され たメモリの 値を採用す るように Hadoop を 修正しまし た。 • YARN_HEAPSIZE を YARN_RESOURCEMANAGER_HEAPSIZE で置き 換えまし た。YARN_NODEMANAGER_HEAPSIZE および YARN_PROXYSERVER_HEAPSIZE でより詳細 に設定で きます。 詳細につ いては、 「hadoopuserenv.sh の設 定 (p. 560)」 を参照して ください。 • メモリ設定 HADOOP_JOB_HISTORYSERVER_HEAPSIZE を追加しま した。 • Amazon S3 パスとの 併用時に hdfs -get で発生する 問題を修正 しました。 • Hadoop 向 け HTTPFS サービスの 問題を修正 しました。 • 前のジョブ が強制終了 された後に ジョブの障 害を発生さ せていた問 題を修正し ました。 98 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 • その他の機 能向上とバ グ修正。 3.0.4 • Amazon Linux バージョン 2013.09 • Hadoop 2.2.0 (p. 115) • Hive 0.11.0.2 (p. ) • Pig 0.11.1.1 (p. ) • HBase 0.94.7 (p. 317) • Impala 1.2.1 (p. ) • Mahout 0.8 • Java: Oracle/Sun jdk-7u60 • Perl 5.10.1 • PHP 5.3.28 • Python 2.6.9 • R 3.0.1 • Ruby 1.8.7 Amazon EMR AMI のこの バージョン は、以下の機 能を備えてい ます。 • Amazon Kinesis の コネクタ を追加し ます。こ れによっ て、Amazon EMR クラ スター内 で標準の Hadoop と エコシステ ムツールを 使用してス トリーミン グデータを 処理できま す。詳細に ついては、 「Amazon Kinesis データ を分析す る (p. 355)」 を参照して ください。 • JobHistory サーバーが 完全に設定 されない ことの原 因であっ た yarnsite.xml 設定ファ イルの問題 を修正しま す。 • AWS SDK 1.7.0 のサ ポートを追 加。 99 2014 年 2 月 19 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.0.3 • Amazon Linux バージョン 2013.03 Amazon EMR AMI のこの バージョン は、以下の機 能を備えてい ます。 2014 年 2 月 11 日 • Hadoop 2.2.0 (p. 115) • Hive 0.11.0.2 (p. ) • Pig 0.11.1.1 (p. ) • HBase 0.94.7 (p. 317) • Impala 1.2.1 (p. ) • AWS SDK 1.6.10 のサ ポートを追 加。 • AWS SDK 1.6.10 と の互換性 を持つに は、HttpClient をバージョ ン 4.2 に更 新します。 • Mahout 0.8 • Oracle/Sun jdk-7u45 • Perl 5.10.1 • PHP 5.3.28 • Python 2.6.9 • R 3.0.1 • Ruby 1.8.7 • 孤立した Amazon EBS ボ リュームに 関連した問 題を修正。 • Hive 0.11.0.2 の サポートを 追加しま す。 • Protobuf を バージョ ン 2.5 に更 新。 Note Protobuf 2.5 へ の アッ プ グ レー ド に は、protoc ツー ル に よ り 以 100 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 前 に 生 成 さ れ た す べ て の Java コー ド を 再 生 成 し、 再 コ ン パ イ ル す る 必 要 が あ り ま す。 101 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.0.2 • Amazon Linux バージョン 2013.03 Amazon EMR AMI のこの バージョン は、以下の機 能を備えてい ます。 2013年12月12 日 • Hadoop 2.2.0 (p. 115) • Hive 0.11.0.2 (p. ) • Pig 0.11.1.1 (p. ) • HBase 0.94.7 (p. 317) • Impala 1.2.1 (p. ) • Impala 1.2.1 と Hadoop 2 を追加。 詳細につ いては、 「Impala (p. 286)」 を参照して ください。 • 再試行ポリ シーを使用 するために uploadMultiParts 関数を変 更。 • Mahout 0.8 • Oracle/Sun jdk-7u45 • Perl 5.10.1 • PHP 5.3.28 • Python 2.6.9 • R 3.0.1 • Ruby 1.8.7 3.0.1 • Amazon Linux バージョン 2013.03 • Hadoop 2.2.0 (p. 115) • Hive 0.11.0.1 (p. ) • Pig 0.11.1.1 (p. ) • HBase 0.94.7 (p. 317) • Impala 1.2.1 (p. ) Amazon EMR AMI のこの バージョン は、以下の機 能を備えてい ます。 • EMR コン ソールで Hadoop 2 のタスク試 行のログを 表示するた めのサポー トを追加。 • Mahout 0.8 • Oracle/Sun jdk-7u45 • Perl 5.10.1 • PHP 5.3.28 • Python 2.6.9 • R 3.0.1 • Ruby 1.8.7 • R 3.0.1 の 問題を修 正。 102 2013 年 11 月 8日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 含まれるもの コメント リリース日 3.0.0 • Amazon Linux バージョン 2013.03 Amazon EMR AMI のこの新 しいメジャー バージョン は、以下の機 能を備えてい ます。 2013 年 10 月 28 日 • Hadoop 2.2.0 (p. 115) • Hive 0.11.0.1 (p. ) • Pig 0.11.1.1 (p. ) • HBase 0.94.7 (p. 317) • Impala 1.2.1 (p. ) • Mahout 0.8 • この Amazon EMR AMI は、Amazon Linux Release 2012.09 に 基づいてい ます。詳細 について は、Amazon Linux AMI 2012.09 Release Notes を参 照してくだ さい。 • Hadoop 2.2.0 のサ ポートを追 加します。 詳細につい ては、「サ ポートされ る Hadoop のバージョ ン (p. 112)」 を参照して ください。 • 0.94.7 の サポート を追加し ます。詳 細について は、Apache HBase ウェ ブサイトを 参照してく ださい。 • Hadoop、HBase、 および Pig の Java 7 サポート を追加しま す。 • Oracle/Sun jdk-7u45 • Perl 5.10.1 • PHP 5.3.28 • Python 2.6.9 • R 3.0.1 • Ruby 1.8.7 103 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) Hadoop 1 以前の AMI を廃止しました AMI のバー ジョン 説明 リリース日 2.4.11 Amazon EMR AMI のこのバージョンでは、以下を実施し ました。 2015 年 2 月 26 日 • パフォーマンスに関する微細なバグを修正しました。 2.4.10 Amazon EMR AMI のこのバージョンでは、以下のバグ修 正を実施しました。 2015 年 2 月 13 日 • 破損ファイルや不適切なアクセス権限によりログが正常 に扱われない問題を修正。 • ステップが適切に完了しない可能性がある問題を修正。 2.4.9 Amazon EMR AMI のこのバージョンでは、以下のバグ修 正を実施しました。 2014 年 31 月 10 日 • Bash 問題のパッチ(CVE-2014-6271 および CVE-2014-7169)が含まれます。 • Hadoop パッチ MAPREDUCE-5877 が移植されます。 • ローカルリデューサーからの正常な取得により、不 正な TaskTracker ノードが実行されないようにな る、JobTracker に関する問題が修正されます。 2.4.8 Amazon EMR AMI のこのバージョンでは、以下の機能と バグ修正を実施しました。 2014 年 9 月 16 日 主な機能更新 • クラスターの有効期間中に、ある時点で最大 256 個の アクティブまたは保留中のステップまで無制限のステッ プと、最大 1,000 個のステップレコード(システムス テップを含む)の表示を可能にします。詳細について は、「クラスターへの作業の送信 (p. 504)」を参照し てください。 主なバグ修正 • このスクリプトによって行われた設定が HBase によっ て無視される、hbase-user-env.sh の問題が修正されま す。 • 正規表現で .* を使用する場合に不具合が発生する s3distcp の問題を修正。 2.4.7 他の機能強化とバグ修正に加えて、Amazon EMR AMI の このバージョンでは以下の問題を修正します。 2014 年 7 月 30 日 • /mnt/var/log に保存されたログの問題を修正しま す。ボリュームのディスク容量をすべて消費する場合が ありました。 • ステップの追加時に発生するデッドロックの問題を修正 します。 2.4.6 Amazon EMR AMI のこのバージョンは、以下の機能を備 えています。 104 2014 年 5 月 15 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 • Cascading 2.5 のサポートを追加します。 • 新しいインスタンスタイプのサポートを追加します。 • Hadoop のアクセス許可の問題を修正しました。 • さまざまなその他の機能向上とバグ修正。 2.4.5 Amazon EMR AMI のこのバージョンは、以下の機能を備 えています。 • 米国東部(バージニア北部)、米国西部 (オレゴン)、米 国西部 (北カリフォルニア)、欧州 (アイルランド)、アジ アパシフィック (シンガポール)、アジアパシフィック (シドニー)、アジアパシフィック (東京)、南米 (サンパ ウロ) の各リージョンで、HVM AMI のサポートを追加 します。 • AWS SDK 1.7.0 のサポートを追加します。 • Python 2.7 のサポートを追加。 • Hive 0.11.0.2 のサポートを追加します。 • Protobuf をバージョン 2.5 に更新。 Note Protobuf 2.5 へのアップグレードには、protoc ツールにより以前に生成されたすべての Java コードを再生成し、再コンパイルする必要があ ります。 • Java バージョンを 7u60(先行ダウンロードリリース) に更新。詳細については、「JDK 7 Update 60 Early Access Release」を参照してください。 • Jetty を Hadoop MapReduce の問題 MAPREDUCE-2980 を修正するバージョン 6.1.26.emr.1 に更新。 • クラスターの作成時に log-uri が指定されていないと きに発生する問題を修正します。 • Amazon Hadoop ディストリビューションのバージョン を正確に表示するように、バージョンユーティリティを 修正します。 • その他の機能向上とバグ修正。 105 2014 年 3 月 27 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 2.4.3 Amazon EMR AMI のこのバージョンは、以下の機能を備 えています。 2014 年 1 月 3 日 • Python 2.7 のサポートを追加。 • Jetty を Hadoop MapReduce の問題 MAPREDUCE-2980 を修正するバージョン 6.1.26.emr.1 に更新します。 • Java バージョンを 7u60(先行ダウンロードリリース) に更新。詳細については、「JDK 7 Update 60 Early Access Release」を参照してください。 • Hive 0.11.0.2 のサポートを追加します。 • Protobuf をバージョン 2.5 に更新。 Note Protobuf 2.5 へのアップグレードには、protoc ツールにより以前に生成されたすべての Java コードを再生成し、再コンパイルする必要があ ります。 2.4.2 前バージョンの AMI と同じ、ただし以下を追加。 2013 年 10 月 7 日 • マップ側ローカルデータの最適化を制限していたホスト 解決内のバグを修正。Fair Scheduler を使用するお客様 は、システムによるデータ局所性の強調に起因して発生 するジョブ実行の変化を確認することができます。スケ ジュールでは、タスクをローカルで実行するために、タ スクを保留できるようになりました。 • Hadoop 1.0.3、Java 1.7、Perl 5.10.1、Python 2.6.6、 および R 2.11 を含む 2.4.1 前バージョンの AMI と同じ、ただし以下を追加。 • HBase シェルが正常に機能しなくなるバグを修正。 • エラー「concurrent modifications exception」により一 部のクラスターが停止するバグを修正。 • インスタンスコントローラに、長時間にわたっ て、Hadoop によりブラックリストに登録されたインス タンスを検出して再起動する新しいロジックを追加。 • Hadoop 1.0.3、Java 1.7、Perl 5.10.1、Python 2.6.6、 および R 2.11 を含む 106 2013 年 8 月 20 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 2.4 前バージョンの AMI と同じ、ただし以下を追加。 2013 年 8 月 1 日 • Hadoop および HBase を使用した Java 7 のサポートを 追加。Hive and Pig など、他の Amazon EMR 機能を使 用するには、今後も Java 6 が必要。 • マッパーに問題があるためにリデューサーがスタックし た場合の、JobTracker の検出と応答時間を改善。 • マッパーに問題があるために、一部の Hadoop リ デューサーがマップ出力データを取得できず、ジョブに 遅延が発生する問題を修正。 • すべての取得のエラーと成功、およびそのタイムスタン プを追跡する FetchStatusMap を追加。 • タスクの起動時に「Text File Busy」エラーが発生する 問題を修正。詳細については、MAPREDUCE-2374 を 参照してください。 2.3.6 2.3.5 と同じ、ただし以下を追加。 2013 年 5 月 17 日 • Ganglia など、特定のブートストラップアクションが失 敗した原因の Debian sources.lst と設定ファイルの問題 を修正。AMI バージョン 2.0.0 から 2.3.5 をご使用の場 合、一覧に EMR Debian Patch という追加のブートス トラップアクションが表示される場合があります。 2.3.5 2.3.3 と同じ、ただし以下を追加。 2013 年 4 月 26 日 • 特定の URL エンコードされたファイル名の場合に、 無効なマニフェストファイルエントリを作成する S3DistCp バグを修正。 • ログのプッシュ機能を改善し、クラスター上のログファ イルにいて 7 日間の保管ポリシーを追加。7 日間以上変 更されないログファイルはクラスターから削除されま す。 • マッパーキーを発行しないストリーミング設定オプショ ンを追加。詳細については、MAPREDUCE-1785 を参 照してください。 • --s3ServerSideEncryption オプションを S3DistCp tool に追加。詳細については、「DistCp のオプショ ン (p. 387)」を参照してください。 2.3.4 Note 2013 年 4 月 16 日 AMI 2.3.4 には問題があったため、このバージョ ンは廃止されました。代わりに他のバージョンの AMI を使用することをお勧めします。 2.3.3 2.3.2 と同じ、ただし以下を追加。 • 期限切れの Hadoop TaskTrackers および Hadoop の細 かい改善を考慮して CloudWatch LiveTaskTracker メト リックを改善。 107 2013 年 3 月 1 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 2.3.2 2.3.1 と同じ、ただし以下を追加。 2013 年 2 月 0 日 • お客様が Amazon EMR コンソールでデバッグ機能を使 用できなくなる問題を修正。 2.3.1 2.3.0 と同じ、ただし以下を追加。 2012 年 12 月 24 日 • hs1.8xlarge インスタンス上で実行するクラスターのサ ポートを改善。 2.3.0 2.2.4 と同じ、ただし以下を追加。 2012 年 12 月 20 日 • IAM ロールのサポートを追加。詳細については、「IAM およびアプリケーションの Amazon EMR ロールを設定 する (p. 186)」を参照してください。 2.2.4 2.2.3 と同じ、ただし以下を追加。 2012 年 12 月 6 日 • Snappy 解凍プログラムでのエラー処理を改善。詳細に ついては、HADOOP-8151 を参照してください。 • MapFile.Reader の LZO の読み取りまたは Snappy 圧縮ファイルの問題を修正。詳細について は、HADOOP-8423 を参照してください。 • AWS バージョン 3.2.30-49.59 にカーネルを更新。 2.2.3 2.2.1 と同じ、ただし以下を追加。 2012 年 11 月 30 日 • HBase バックアップ機能の向上。 • Java 用 AWS SDK をバージョン 1.3.23 に更新。 • ジョブトラッカーのユーザーインターフェイスに関する 問題を解決。 • Hadoop における Amazon S3 ファイルシステムの処理 を向上。 • Hadoop における NameNode 機能の向上。 2.2.2 Note 2012 年 11 月 23 日 AMI 2.2.2 には問題があったため、このバージョ ンは廃止されました。代わりに他のバージョンの AMI を使用することをお勧めします。 2.2.1 2.2.0 と同じ、ただし以下を追加。 • HBase のバックアップ機能に関する問題を修正。 • fs.s3n.blockSize で指定されている Amazon S3 のブ ロックサイズよりも大きなファイルに対して、デフォル トでマルチパートアップロードを有効にします。詳細に ついては、「Amazon S3 用のマルチパートアップロー ドを設定する (p. 165)」を参照してください。 108 2012 年 8 月 30 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 2.2.0 2.1.3 と同じ、ただし以下を追加。 2012 年 8 月 6 日 • Hadoop 1.0.3 のサポートを追加。 • Hadoop 0.18 および Hadoop 0.20.205 を除外。 オペレーティングシステム: Debian 6.0.5(Squeeze) アプリケーション: Hadoop 1.0.3、Hive 0.8.1.3、Pig 0.9.2.2、HBase 0.92.0 言語: Perl 5.10.1、PHP 5.3.3、Python 2.6.6、R 2.11.1、Ruby 1.8.7 ファイルシステム: ルートは ext3、エフェメラルは xfs 2.1.4 2.1.3 と同じ、ただし以下を追加。 2012 年 8 月 30 日 • ネイティブ Amazon S3 ファイルシステムでの問題を修 正。 • デフォルトでマルチパートアップロードを有効化。詳 細については、「Amazon S3 用のマルチパートアップ ロードを設定する (p. 165)」を参照してください。 2.1.3 2.1.2 と同じ、ただし以下を追加。 2012 年 8 月 6 日 • HBase での問題を修正。 2.1.2 2.1.1 と同じ、ただし以下を追加。 2012 年 8 月 6 日 • MapR の使用時に CloudWatch メトリクスをサポート。 CloudWatch にメトリクスをレポートする際の信頼性を 向上。 2.1.1 2.1.0 と同じ、ただし以下を追加。 • ログ出力の信頼性を向上。 • Amazon VPC における HBase のサポートを追加。 • DNS の再試行機能を向上。 109 2012 年 7 月 3 日 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 2.1.0 AMI 2.0.5 と同じ、ただし以下を追加。 2012 年 6 月 12 日 • HBase クラスターの起動をサポート。詳細について は、「Apache HBase (p. 317)」を参照してくださ い。 • MapR Editon M3 および Edition M5 の実行をサポート。 詳細については、「Hadoop 用 MapR ディストリビュー ションを使用する (p. 224)」を参照してください。 • dfs.support.append 内で、HDFS の付加をデフォ ルトで有効化する true を hdfs/hdfs-default.xml に設定。コード内のデフォルト値も true に設定されま す。 • インスタンスコントローラにおける競合状態を修正。 • mapreduce.user.classpath.first のデフォルト を true に変更。この構成設定は、クラスターの JAR ファイルと Hadoop システムの lib ディレクトリのどち らからクラスを最初にロードするかを示します。この変 更は、Hadoop 内のクラスを簡単にオーバーライドでき るようにするために行われました。 • オペレーティングシステムとして Debian 6.0.5(Squeeze)を使用。 2.0.5 Note 2012 年 4 月 19 日 AMI 2.0.5 には問題があったため、このバージョ ンは廃止されました。代わりに他のバージョンの AMI を使用することをお勧めします。 AMI 2.0.4 と同じ、ただし以下を追加。 • マッパー用のリサイクルされたコンプレッサオブジェク トの再初期化を、マッパーが GZip 圧縮コーデックを出 力に使用するように設定されている場合に限定すること により、Hadoop のパフォーマンスを向上。 • システムディレクトリに対する 許可を設定するために使用する mapreduce.jobtracker.system.dir.permission という設定変数を Hadoop に追加。詳細につい ては、「システムディレクトリに対する許可の設 定 (p. 203)」を参照してください。 • マシンで実行されている MySQL インスタンスで はなく埋め込みデータベースを使用するように InstanceController を変更。デフォルトで、MySQL は引 き続きインストールおよび実行されます。 • collectd 設定を向上。collectd の詳細については、http:// collectd.org/ を参照してください。 • InstanceController における稀な競合状態を修正。 • デフォルトのシェルを dash から bash に変更。 • オペレーティングシステムとして Debian 6.0.4(Squeeze)を使用。 110 Amazon EMR 開発者ガイド Amazon マシンイメージ(AMI) AMI のバー ジョン 説明 リリース日 2.0.4 AMI 2.0.3 と同じ、ただし以下を追加。 2012 年 1 月 30 日 • fs.s3n.blockSize のデフォルトを 33554432(32MiB) に変更。 • Amazon S3 から長さがゼロのファイルを読み取るとき のバグを修正。 2.0.3 AMI 2.0.2 と同じ、ただし以下を追加。 2012 年 1 月 24 日 • CloudWatch に Amazon EMR メトリクスのサポートを 追加。 • Amazon S3 におけるシーク操作のパフォーマンスを向 上。 2.0.2 AMI 2.0.1 と同じ、ただし以下を追加。 2012 年 1 月 17 日 • Python API Dumbo のサポートを追加。Dumbo の詳細 については、https://github.com/klbostee/dumbo/wiki/ を 参照してください。 • デフォルトで Network Time Protocol Daemon(NTPD)を実行するように変更。NTPD の詳 細については、http://en.wikipedia.org/wiki/Ntpd を参照 してください。 • アマゾン ウェブ サービス SDK をバージョン 1.2.16 に 更新。 • Amazon S3 ファイルシステムの初期化で Amazon S3 バケットの存在をチェックする方法を改善。 • Amazon S3 のブロックサイズを設定するサポートを 追加して、Amazon S3 におけるファイルの分割を容易 に。これは、fs.s3n.blockSize パラメーターで設定 します。このパラメーターは、configure-hadoop ブー トストラップアクションを使用して設定します。デフォ ルト値は 9223372036854775807(8 EiB)です。 • /dev/sd symlink for each /dev/xvd デバイスを追加。例 えば、/dev/xvdb には、これをポイントする /dev/sdb と いう symlink が用意されるようになりました。これによ り、AMI 1.0 と 2.0 で同じデバイス名を使用できます。 2.0.1 以下のバグ修正を除いて AMI 2.0 と同じ。 2011 年 12 月 19 日 • タスク試行ログが Amazon S3 に出力される。 • 32 ビット AMI における /mnt マウントを修正。 • オペレーティングシステムとして Debian 6.0.3(Squeeze)を使用。 2.0.0 Operating system: Debian 6.0.2(Squeeze) Applications: Hadoop 0.20.205、Hive 0.7.1、Pig 0.9.1 Languages: Perl 5.10.1、PHP 5.3.3、Python 2.6.6、R 2.11.1、Ruby 1.8.7 File system: ルートは ext3、エフェメラルは xfs 注: 追加サポート Snappy 圧縮/解凍ライブラリのサポート を追加。 111 2011 年 12 月 11 日 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する AMI のバー ジョン 説明 リリース日 1.0.1 以下の変更を除いて AMI 1.0 と同じ。 2012 年 4 月 3 日 • archive.debian.org 内の Lenny ディストリビューション の新しい場所を反映するように sources.list を更新。 1.0.0 オペレーティングシステム: Debian 5.0(Lenny) アプリケーション: Hadoop 0.20 および 0.18(デフォ ルト)、Hive 0.5, 0.7(デフォルト)、0.7.1、Pig 0.3(Hadoop 0.18 上)、0.6(Hadoop 0.20 上) 言語: Perl 5.10.0、PHP 5.2.6、Python 2.5.2、R 2.7.1、Ruby 1.8.7 ファイルシステム: ルートとエフェメラルは ext3 カーネル: Red Hat 2011 年 4 月 26 日 注: これは、AMI のバージョニングをサポートするために CLI が更新される前にリリースされた最後の AMI です。 下位互換性のために、2011 年 12 月 11 日よりも前にダウ ンロードされた CLI から起動されたジョブフローは、こ のバージョンを使用します。 Hadoop のバージョンを選択する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR によってインストールされる Hadoop の AWS バージョンは、Apache Hadoop を ベースにしたものであり、AWS での動作を効率的にするパッチおよび改良が追加されています。各 Amazon EMR AMI は、Hadoop のデフォルトバージョンと関連付けられています。最新の AMI バー ジョンでクラスターを起動し、可能な限り Hadoop のデフォルトバージョンを実行することをお勧め します。そうすることで、最新の機能と最新のバグ修正内容にアクセスできます。 Hadoop のデフォルト以外のバージョンがアプリケーションで必要とされる場合は、クラスターを起 動するときに該当する Hadoop のバージョンを指定できます。Hadoop の MapR ディストリビュー ションを使用して Amazon EMR クラスターを起動することもできます。詳細については、「Hadoop 用 MapR ディストリビューションを使用する (p. 224)」を参照してください。 トピック • サポートされる Hadoop のバージョン (p. 112) • Amazon EMR Hadoop は Apache Hadoop とどのように異なりますか? (p. 118) • Amazon EMR に適用される Hadoop パッチ (p. 118) • サポートされる Mahout バージョン (p. 120) サポートされる Hadoop のバージョン このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 112 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する Amazon EMR を使用すれば、実行する Hadoop のバージョンを選択できます。これを行うには、次の 表に示したように、CLI を使用して --ami-version を設定します。パフォーマンスの拡張と新機能 を利用できる最新バージョンの Hadoop を使用することをお勧めします。 Note AMI バージョンで Hadoop のバージョンを決定し、--hadoop-version パラメーターがサ ポートされなくなっています。 Hadoop のバー AMI バージョン ジョン 2.4.0 --ami-version 3.1.X 以降(3.1 および 3.2 のすべてのバージョン) 2.2.0 --ami-version 3.0.X(3.0 のすべてのバージョン) 1.0.3 --ami-version 2.2.X、2.3.X、2.4.X(2.2、2.3、2.4 のすべてのバージョン) 0.20.205 --ami-version 2.1.4 0.20 --ami-version 1.0 デフォルトの設定、および Amazon EMR(Amazon EMR)で使用される AMI で利用可能なソフト ウェアの詳細については、Amazon マシンイメージ(AMI) (p. 56) を参照してください。 Note アジアパシフィック (シドニー) リージョンと AWS GovCloud (US) リージョンでは、Hadoop 1.0.3 以降のみがサポートされます。AWS GovCloud (US) では、さらに AMI 2.3.0 以降が必要 です。 AWS CLI を使用して Hadoop のバージョンを指定するには AWS CLI を使用して Hadoop のバージョンを指定するには、create-cluster サブコマンドを入 力して --ami-version パラメーターを指定します。AMI バージョンでは、使用する Amazon EMR 用 Hadoop のバージョンを決定します。AMI で利用可能な Hadoop のバージョンの詳細については、 「Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バージョン (p. 60)」を参照して ください。 • AMI バージョン 3.3 を使用して Hadoop 2.4.0 を実行するクラスターを起動するには、次のコマン ドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-count 5 --instance-type m3.xlarge • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-count 5 --instance-type m3.xlarge 113 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Hadoop 2.4.0 の新機能 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop 2.4.0 の機能強化では、主に HDFS と YARN に重点が置かれました。このリリースで強化さ れた点については、以下を参照してください。 HDFS • HDFS に対する HTTPS のフルサポート(HDFS-5305) • HDFS でのアクセスコントロールリスト(ACL)のサポート(HDFS-4685) • スムーズな運用のアップグレードのための HDFS FSImage のプロトコルバッファの使用 (HDFS-5698) YARN • アプリケーション履歴サーバー(YARN-321)およびアプリケーションタイムラインサーバー (YARN-1530)での YARN の新しいアプリケーションに対するサポートの強化 • 優先使用による YARN CapacityScheduler での強力な SLA のサポート(YARN-185) Hadoop 2.4.0 で利用可能な新しい機能と修正の詳細な一覧については、「Hadoop 2.4.0 Release Notes」を参照してください。 Hadoop 2.3.0 に含まれている以下の変更は、Amazon EMR のお客様に関係するものです。 • HDFS 用の異機種ストレージ(HDFS-2832) • DataNode を介した HDFS に常駐するデータ用のインメモリキャッシュ(HDFS-4949) Note 通常、Amazon EMR は Hadoop の一般的なリリースで示される機能をサポートしますが、こ の Hadoop 2.4.0 の Amazon リリースでは、以下の機能はサポートされません。 • HDFS のローリングアップグレードでのローリングアップグレードのネイティブサポート • HDFS Federation と HDFS NameNode の高可用性(HA) • YARN ResourceManager の自動フェイルオーバーのサポート(YARN-149) 114 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する Amazon EMR の機能強化 以下の強化機能は AMI 3.1.0 以降で使用できます。 • ログとデバッグが有効なとき、サブフォルダ "jobs" の下の "Log folder S3 location" で自分のジョブ ログを確認できるようになりました。ログ作成の詳細については、「ログ記録およびデバッグの作 成(オプション) (p. 204)」を参照してください。 • 現在、タスク試行ログがリダイレクトされる Amazon S3 バケットを指定できます。ただし、これ らのログは個々試行レベルで保存されるため、1 つのジョブが数千個のログファイルを生成するこ とがあります。これらのログを表示および分析しやすくするために、すべてのタスク試行ログを集 計してファイル数を少なくすることができるようになりました。ログの集計を有効にする方法の詳 細については、「the section called “Amazon S3 にログファイルをアーカイブする” (p. 205)」を 参照してください。 Hadoop 2.2.0 の新機能 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop 2.2.0 は、次の新機能をサポートします。 • 一般的なビッグデータ処理プラットフォームとしての MapReduce NextGen(YARN)リソース管 理 システム。YARN は、JobTracker の 2 つの主要な機能(リソース管理とジョブライフサイクル 管理)を独立したコンポーネントに分割し、新しい ResourceManager を導入した新しいアーキテ クチャです。詳細については、Apache Hadoop NextGen MapReduce(YARN) および Amazon EMR クラスターでホストされているウェブサイトの表示 (p. 464) を参照してください。 • プラグ可能なシャッフルおよびプラグ可能なソート。詳細については、「Pluggable Shuffle and Pluggable Sort」を参照してください。 • キャパシティスケジューラおよびフェアスケジューラ。詳細については、「Capacity Scheduler」 および「Fair Scheduler」を参照してください。 • Hadoop Distributed File System(HDFS)スナップショット。詳細については、HDFS Snapshots を参照してください。 • ショートサーキット読み込みなどパフォーマンス関連の向上。詳細については、「HDFS ShortCircuit Local Reads」を参照してください。 • アプリケーションマスターによる分散ジョブのライフサイクル管理 • さまざまなセキュリティの向上 Hadoop 2.2.0 で利用可能な新機能と実施された修正の詳細については、Hadoop 2.2.0 Release Notes を参照してください。 Note Amazon EMR は通常、[Hadoop Common Releases] にリストされている機能をサポートしま すが、HDFS フェデレーションおよび HDFS 名のノードの高可用性(HA)は Hadoop 2.2.0 のこの Amazon リリースではサポートされません。また、Hadoop 2.2.0 は m1.small インス タンスではサポートされません。 Hadoop 1 から Hadoop 2 への主要な変更 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 115 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する 現在の Hadoop 1 ユーザーは、Hadoop 2 で導入された複数の主要な変更に注意する必要があります。 • 新しい ResourceManager を含む新しい URL を備えた、更新された Hadoop ユーザーインター フェイス。詳細については、「Amazon EMR クラスターでホストされているウェブサイトの表 示 (p. 464)」を参照してください。 • 更新された Hadoop 設定ファイル。詳細については、「JSON の設定ファイル (p. 556)」を参照し てください。 • Hadoop デーモンを設定するブートストラップアクションへの変更。詳細については、「(オ プション)追加のソフトウェアをインストールするためのブートストラップアクションの作 成 (p. 121)」を参照してください。 Hadoop 2.2.0 への移行に関する考慮事項 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop 2.2 の一般的な入手可能性(GA)は 2013 年 10 月 16 日に発表されました。Apache Software Foundation によれば、Hadoop 2.2 は、"一般的な入手可能性の指定を受けられる安定性とエンタープ ライズに対する準備のレベルを達成" しました。Amazon では、Hadoop 1.0.3 で引き続きミッション クリティカルなアプリケーションを実行し、Hadoop 2.2 でアプリケーションを慎重にテストしてから 切り替えることをお勧めします。Hadoop コミュニティでは、Hadoop 1 から Hadoop 2 への移行が一 般的傾向として見られます。 Hadoop 1.0 の新機能 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR における Hadoop 1.0.3 のサポートには、Hadoop の一般的なリリースに示されている 特徴が含まれます。具体的には、以下のとおりです。 • HDFS 向けの RESTful API。HTTP 経由で HDFS にアクセスするための全面的な FileSystem 実装を 提供します。 • HBase で、hflush/sync の進行中に新しい書き込みを実行できます。 • HBase で、ローカルファイルへのアクセスのパフォーマンスが向上します。 • 次のようにして、Hadoop、Hive、および Pig のジョブを他のユーザーとして実行する機能: $ export HADOOP_USER_NAME=usernamehere HADOOP_USER_NAME 環境変数をエクスポートすることにより、ジョブは指定したユーザー名で実 行されます。 Note HDFS を使用する場合は、指定されたユーザー名に対する READ および WRITE アクセス を許すように HDFS の許可を変更するか、HDFS で許可チェックを無効にする必要があり ます。それには、dfs.permissionsmapred-site.xmlfalse ファイルで設定変数 # に設 定してから、次のようにネームノードを再起動します: <property> <name>dfs.permissions</name> 116 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する <value>false</value> </property> • S3 ファイルの分割サイズ変数が fs.s3.blockSize から fs.s3.block.size に変更され、デフォルトが 64 MB に設定されます。これは、パッチ HADOOP-5861 で追加された変数と整合性を保つためです。 Amazon EMR 上の Hadoop 1.0.3 では、Amazon S3 で作成されたファイルにアクセス許可を設定する こともサポートされるようになりました。詳細については、「所有していない Amazon S3 バケット にデータを書き込む方法 (p. 175)」を参照してください。 Amazon EMR バージョンの Hadoop 1.0.3 に適用されるパッチのリストは、Hadoop 1.0.3 向けパッ チ (p. 118) を参照してください。 Hadoop の新機能 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop 0.18 は、複数の小さいファイルを効率的に扱えるようには設計されていませんでし た。Hadoop 0.20 以降での以下の拡張により、小さいファイルを処理するパフォーマンスが向上して います。 • Hadoop 0.20 以降では、複数のタスクをハートビートに合わせて割り当てます。ハートビートは、 クライアントがアライブ状態であるかどうかを定期的に確認するための方法です。複数のタスクを 割り当てることによって Hadoop はタスクをスレーブノードに高速で分散でき、それによってパ フォーマンスが向上します。タスクを分散させるためにかかる時間は、処理時間の使われ方の中で 重要な部分です。 • Hadoop は以前から、各タスクを固有の Java Virtual Machine(JVM)で処理しています。処理に数 秒しか必要としない小さいファイルが大量にある場合は、タスクごとに JVM を起動するオーバー ヘッドが多大になります。Hadoop 0.20 以降では、1 つの JVM を複数のタスクで共有できるため、 処理時間が大幅に短縮されます。 • Hadoop 0.20 以降では、同じマップタスク内の複数のファイルを処理できるため、タスクの設定に 関係するオーバーヘッドを減らすことができます。1 つのタスクで複数の小さなファイルを処理で きます。 Hadoop 0.20 以降では、以下の機能もサポートされます。 • 新しいコマンドラインオプション -libjars。指定した JAR ファイルを各タスクのクラスパスに含 めることができます。 • ファイル全体ではなく、個別のレコードをスキップする機能。Hadoop の以前のバージョンでは、 レコード処理が失敗すると、その不良レコードを含むファイル全体がスキップされていました。今 まで失敗していたジョブも、これからは部分的な結果を返します。 Hadoop 0.18 のストリーミングに関するパラメーターに加えて、Hadoop 0.20 以降では次の表に示す 3 つの新しいパラメーターがストリーミングに関して追加されています。 パラメーター 定義 -files マップリデュースクラスターにコピーするカンマ区切りファイルを指定しま す。 -archives コンピュートマシンに復元するカンマ区切りアーカイブを指定します。 -D 入力するキーに対応する値を <key>=<value> という形式で指定します。 117 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する Amazon EMR バージョンの Hadoop 0.20.205 に適用されるパッチのリストは、Hadoop 0.20.205 向け パッチ (p. 119) を参照してください。 Amazon EMR Hadoop は Apache Hadoop とどのように異なり ますか? このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR クラスターを起動するときにインストールされる Hadoop の AWS バージョン は、Apache Hadoop をベースにしたものですが、このバージョンには AWS での動作を効率的にする パッチおよび改良が追加されています。必要に応じて、Amazon EMR チームによって記述された改良 点が Apache Hadoop コードベースにサブミットされています。AWS Hadoop に適用されるパッチの 詳細については、「Amazon EMR に適用される Hadoop パッチ (p. 118)」を参照してください。 Amazon EMR に適用される Hadoop パッチ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 以下のセクションでは、Amazon EMR AMI にロードされる Hadoop に Amazon EMR(Amazon EMR)チームが適用したパッチの詳細を説明します。 トピック • Hadoop 1.0.3 向けパッチ (p. 118) • Hadoop 0.20.205 向けパッチ (p. 119) Hadoop 1.0.3 向けパッチ Amazon EMR チームは今までに、Amazon EMR AMI バージョン 2.2 上の Hadoop 1.0.3 に以下のパッ チを適用しています。 パッチ 説明 すべてのパッチは、Amazon EMR バージョンの Hadoop 0.20.205 に適用されます。 詳細については、「Hadoop 0.20.205 向けパッチ (p. 119)」を参 照してください。 HADOOP-5861 ネイティブの Amazon S3 ファイルシステムに格納されてい る、s3n:// という形式の URL を持つファイルは、fs.s3n.block.size によって決定されるブロックサイズをレポートするようになり ました。詳細については、https://issues.apache.org/jira/browse/ HADOOP-5861 を参照してください。 Status: 修正済み Fixed in AWS Hadoop Version: 1.0.3 Fixed in Apache Hadoop Version: 0.21.0 HADOOP-6346 解凍するファイルを決定するパターンを RunJar.unJar に 対して指定するようにサポート。詳細については、https:// issues.apache.org/jira/browse/HADOOP-6346 を参照してくださ い。 Status: 修正済み Fixed in AWS Hadoop Version: 1.0.3 118 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する パッチ 説明 Fixed in Apache Hadoop Version: 0.21.0 MAPREDUCE-967 TaskTracker ノードがジョブジャーをジョブキャッシュディレ クトリに完全にアンジャーしないように変更。詳細について は、https://issues.apache.org/jira/browse/MAPREDUCE-967 を参 照してください。 Status: 修正済み Fixed in AWS Hadoop Version: 1.0.3 Fixed in Apache Hadoop Version: 0.21.0 MAPREDUCE-2219 スタートアップ時に、mapred.system.dir ディレクトリ自体を削除 するのではなく、その内容を削除するように JobTracker サービ スを変更。詳細については、https://issues.apache.org/jira/browse/ MAPREDUCE-2219 を参照してください。 Status: 修正済み 修正対象の AWS Hadoop のバージョン: 1.0.3 修正対象の Apache Hadoop のバージョン: 0.22.0 Hadoop 0.20.205 向けパッチ Amazon EMR チームは今までに、Amazon EMR AMI バージョン 2.0 上の Hadoop 0.20.205 に以下の パッチを適用しています。 パッチ 説明 hadoop-lzo の追加 サードパーティパッケージ hadoop-lzo をインストール。hadooplzo の詳細については、https://github.com/kevinweil/hadoop-lzo を 参照してください。 ステータス: サードバーティパッケージ 修正対象の AWS Hadoop のバージョン: 0.20.205 修正対象の Apache Hadoop のバージョン: n/a hadoop-snappy ライブラリの インストール snappy 圧縮へのアクセスを提供するために hadoop-snappy ライブラリを追加。このライブラリの詳細については、http:// code.google.com/p/hadoop-snappy/ を参照してください。 ステータス: サードパーティライブラリ 修正対象の AWS Hadoop のバージョン: 0.20.205 修正対象の Apache Hadoop のバージョン: n/a MAPREDUCE-1597/2021/2046 CombineFileInputFormat での分割位置および分割可能 なファイルの処理方法に関する修正。これらのパッチの 詳細については、https://issues.apache.org/jira/browse/ MAPREDUCE-1597、https://issues.apache.org/jira/browse/ MAPREDUCE-2021、https://issues.apache.org/jira/browse/ MAPREDUCE-2046 を参照してください。 Status: 解決済み、修正済み Fixed in AWS Hadoop Version: 0.20.205 Fixed in Apache Hadoop Version: 0.22.0 HADOOP-6436 ネイティブビルドの automake および autoconf によって生成 されたファイルを削除し、代わりにホストの automake および 119 Amazon EMR 開発者ガイド Hadoop のバージョンを選択する パッチ 説明 autoconf を使用してファイルを生成。このパッチの詳細について は、https://issues.apache.org/jira/browse/HADOOP-6436 を参照し てください。 Status: 終了済み、修正済み 修正対象の AWS Hadoop のバージョン: 0.20.205 修正対象の Apache Hadoop のバージョン: 0.22.0,0.23.0 MAPREDUCE-2185 CombineFileInputFormat を使用して分割を行ったときに無限ルー プが発生するのを回避。このパッチの詳細については、https:// issues.apache.org/jira/browse/MAPREDUCE-2185 を参照してく ださい。 Status: 終了済み、修正済み Fixed in AWS Hadoop Version: 0.20.205 Fixed in Apache Hadoop Version: 0.23.0 HADOOP-7082 出力中に Configuration.writeXML がロックを保持しないように変 更。このパッチの詳細については、https://issues.apache.org/jira/ browse/HADOOP-7082 を参照してください。 Status: 解決済み、修正済み Fixed in AWS Hadoop Version: 0.20.205 Fixed in Apache Hadoop Version: 0.22.0 HADOOP-7015 マルチスレッドまたはマルチプロセス環境など、エ ントリの変更があるディレクトリを処理するために RawLocalFileSystem#listStatus を更新。このパッチの詳細につい ては、https://issues.apache.org/jira/browse/HADOOP-7015 を参照 してください。 Status: 終了済み、修正済み Fixed in AWS Hadoop Version: 0.20.205 Fixed in Apache Hadoop Version: 0.23.0 HADOOP-4675 Ganglia 3.1 と互換性を持つように Ganglia メトリクスを更新。こ のパッチの詳細については、https://issues.apache.org/jira/browse/ HADOOP-4675 を参照してください。 Status: 解決済み、修正済み Fixed in AWS Hadoop Version: 0.20.205 Fixed in Apache Hadoop Version: 0.22.0 サポートされる Mahout バージョン このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は現在、以下の Apache Mahout バージョンをサポートします。 Mahout バージョン AMI のバージョン Mahout バージョンの詳細 0.9 3.1.0 以降 • Apache CMS に基づく、 新規および強化された 120 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 Mahout バージョン AMI のバージョン Mahout バージョンの詳細 Mahout ウェブサイト (MAHOUT-1245) • Multi-Layer Perceptron(MLP)分 類機能の初期の実装 (MAHOUT-1265) • Scala DSL Bindings for Mahout Math Linear Algebra(MAHOUT-1297) • 検索の推奨機能 (MAHOUT-1288) • 簡単に動作するマトリックス 表示および関連機能のサポー ト(MAHOUT-1300) • ClusterDumper の JSON 出力 形式(MAHOUT-1343) • Carrot RandomizedRunner を 使用した、すべての Mahout モジュール用の有効なラ ンダムに選択されるテスト (MAHOUT-1345) • 一次元クラスタリングを使用 して正確な変位値を計算する ためのオンラインアルゴリズ ム(MAHOUT-1361) • Lucene 4.6.1 へのアップグ レード(MAHOUT-1364) 0.8 3.0-3.0.4 0.8 2.2 以降(ブートストラップア クションインストール使用) Mahout リリースの詳細については、「https://mahout.apache.org」を参照してください。 (オプション)追加のソフトウェアをインストール するためのブートストラップアクションの作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 ブートストラップアクションを使用することにより、追加のソフトウェアのインストール、およびク ラスター上にあるアプリケーションの設定変更を行うことができます。ブートストラップアクション とは、Amazon EMR がクラスターを起動したときにクラスターノードで実行されるスクリプトのこと です。ブートストラップアクションは、Hadoop の開始前、およびノードによるデータ処理の開始前 に実行されます。カスタムブートストラップアクションを作成することも、Amazon EMR に用意さ れている定義済みのブートストラップアクションを使用することもできます。ブートストラップアク ションの一般的な用途は、Hadoop 設定を変更することです。 目次 • ブートストラップアクションの基本 (p. 122) 121 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 • 事前に定義されたブートストラップアクションの使用 (p. 122) • シャットダウンアクション (p. 130) • カスタムブートストラップアクションの使用 (p. 130) ブートストラップアクションの基本 デフォルトでは、ブートストラップアクションは Hadoop ユーザーとして実行されます。ブートスト ラップアクションは、sudo を使用し、ルート権限で実行できます。 すべての Amazon EMR 管理インターフェイスでブートストラップアクションがサポートされていま す。コンソール、AWS CLI、または API から複数の bootstrap-action パラメーターを指定する と、クラスターごとに最大 16 個のブートストラップアクションを指定できます。 クラスターの作成時に、Amazon EMR コンソールからオプションでブートストラップアクションを指 定できます。 CLI を使用する場合、create-cluster コマンドを使用してクラスターを作成するときに -bootstrap-action パラメーターを追加して、Amazon EMR にブートストラップアクションスクリ プトへの参照を渡すことができます。--bootstrap-action パラメーターのシンタックスは次のと おりです。 AWS CLI --bootstrap-action Path=s3://mybucket/filename",Args=[arg1,arg2] ブートストラップアクションがゼロ以外のエラーコードを返すと、Amazon EMR はそれをエラーとし て処理し、インスタンスを終了します。ブートストラップアクションがエラーになるインスタンスが 多すぎると、Amazon EMR は、クラスターを終了します。ごくわずかのインスタンスでエラーになっ た場合、Amazon EMR は失敗したインスタンスの再割り当てを試み、処理を継続します。クラスター の lastStateChangeReason エラーコードを使用して、ブートストラップアクションによって引き 起こされたエラーを識別します。 事前に定義されたブートストラップアクションの使用 Amazon EMR には、事前に定義されたブートストラップアクションスクリプトが多数用意されてお り、これらを使用して Hadoop 設定をカスタマイズできます。このセクションでは、事前に定義され た使用可能なブートストラップアクションについて説明します。事前に定義されたブートストラップ アクションスクリプトへのリファレンスを Amazon EMR に渡すには、bootstrap-action パラメー ターを使用します。 目次 • Configure Daemons ブートストラップ アクション (p. 122) • Configure Hadoop ブートストラップアクション (p. 125) • Run If ブートストラップアクション (p. 128) • S3Get ブートストラップアクション (p. 129) Configure Daemons ブートストラップ アクション この事前に定義されたブートストラップアクションを使用すると、Hadoop デーモン用のヒープサイ ズや他の Java 仮想マシン(JVM)オプションを指定できます。たとえば、Hadoop がデフォルトで 割り当てるよりも多くのメモリを必要とする大きなジョブに対して Hadoop を設定できます。また、 ブートストラップアクションをガベージコレクター(GC)動作など、高度な JVM オプションの変更 に使用することもできます。 122 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 スクリプトは s3://elasticmapreduce/bootstrap-actions/configure-daemons にありま す。 次の表にスクリプトの有効なパラメーターを示します。表では、daemon は namenode、datanode、jobtracker、tasktracker、client(Hadoop 1.x の場合)、または namenode、datanode、resourcemanager、nodemanager、client(Hadoop 2.x の場合)に該当 します。例: --namenode-heap-size=2048,--namenode-opts=\"-XX:GCTimeRatio=19\" 設定パラメーター 説明 --daemon-heap-size 指定されたデーモンにヒープサイズを設定します(メガバイト単 位)。 Note --client-heap-size は何も実行しません。代わり に、--client-opts=\"-Xmx#####M\" と同等なものに 変更します。##### は数値です。 --daemon-opts 指定されたデーモンに追加の Java オプションを設定します。 --replace 既存の hadoop-user-env.sh ファイルを置き換えます(存在する場 合)。 設定デーモンのブートストラップアクションでは、設定ファイル yarn-site.xml を使用して Hadoop 2.x をサポートします。その設定ファイルキーワードは、yarn です。 以下の例では、NameNode JVM ヒープサイズを 2048 MB に設定し、NameNode に JVM GC オプ ションを設定します。 AWS CLI を使用して NameNode ヒープサイズを設定するには AWS CLI を使用してブートストラップアクションを含めるときは、Path と Args をカンマ区切りリ ストとして指定します。 • クラスターを作成し、Hadoop NameNode デーモンのヒープサイズを設定するブートストラップ アクションを実行するには、次のコマンドを入力して myKey を Amazon EC2 キーペアの名前に 置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hue Name=Hive Name=Pig \ --instance-count 5 --instance-type m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-daemons,Args=["--namenode-heap-size=2048","--namenode-opts=XX:GCTimeRatio=19"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 --usedefault-roles --ec2-attributes KeyName=myKey --applications Name=Hue Name=Hive Name=Pig --instance-count 5 --instance-type m3.xlarge --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-daemons,Args=["--namenode-heap-size=2048","--namenode-opts=XX:GCTimeRatio=19"] 123 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと Amazon EC2 インスタンスプロ ファイルを作成していない場合は、「aws emr create-default-roles」と入力して それらを作成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 また、引数や複数のブートストラップアクションのリストが長くなる場合は、JSON 構文をファ イルで指定することもできます。たとえば、JSON ファイル configuredaemons.json は、次 のようになります。 [ { "Path": "s3://elasticmapreduce/bootstrap-actions/configure-daemons", "Args": ["--namenode-heap-size=2048","--namenode-opts=XX:GCTimeRatio=19"], "Name": "Configure Daemons" } ] Amazon EMR CLI を使用して NameNode ヒープサイズを設定するには Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configuredaemons \ --args --namenode-heap-size=2048,--namenode-opts=-XX:GCTimeRatio=19 • Windows: ruby elastic-mapreduce --create --alive --bootstrap-action s3:// elasticmapreduce/bootstrap-actions/configure-daemons --args --namenodeheap-size=2048,--namenode-opts=-XX:GCTimeRatio=19 124 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 Configure Hadoop ブートストラップアクション このブートストラップアクションを使用して、クラスター全体の Hadoop 設定を指定できます。スク リプトは s3://elasticmapreduce/bootstrap-actions/configure-hadoop にあります。この スクリプトでは、次のコマンドラインオプションを使用できます。 • --keyword-config-file – Amazon S3 やローカルファイルシステムにアップロードされるユーザー指 定の XML 設定ファイルに、既存の Hadoop 設定をマージします。ユーザー指定のファイルには任 意の名前を付けることができます。 • --keyword-key-value – Hadoop 設定ファイルに含まれている特定のキーと値のペアをオーバーライ ドします。 両方のオプションでは、コマンドラインの --keyword 部分を、次の表に示す 5 つの Hadoop 設定ファ イルのいずれかを表すキーワードと置き換えます(または、キーワードの代わりに 1 文字のショー トカットを使用します)。1 文字のショートカットは同じコマンド内で併用できるので、大文字は ショートカットが設定ファイルを参照することを示し、小文字はショートカットがキーと値のペアを 参照することを示します。複数のオプションを指定すると、先に指定したオプションは後で指定した オプションにオーバーライドされます。 設定ファイル名 設定ファイルキーワード ファイル名 ショートカッ ト キー値ペア ショートカッ ト log4j.properties log4j L I core-site.xml core C c hadoopdefault.xml (deprecated) デフォルト D d hadoopsite.xml(廃止) サイト S の hdfs-site.xml hdfs H h mapred-site.xml mapred M m yarn-site.xml yarn Y y httpsfs-site.xml httpfs T t emrfs-site.xml emrfs E e capacityscheduler.xml capacity Z z Hadoop 設定変数については、Hadoop のドキュメント(例: http://hadoop.apache.org/docs/r2.2.0/ hadoop-project-dist/hadoop-common/core-default.xml)を参照してください。 複数のインスタンスタイプに対して複数の設定を指定できます。たとえば、コアグループとは異なる インスタンスタイプから成るタスクグループがあるとします。[configure-hadoop] ブートストラッ プアクションには [instance-type-config] というオプションがあり、それぞれのインスタンスタ イプの設定を指定する Amazon S3 URI または JSON ファイルのローカルパスを受け入れます。ファ イルは次のようになります: { "m1.small":{ 125 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 "log4j":{ "key1":"value1" }, "site":{ "key3":"value3" } }, "m1.xlarge":{ "yarn":{ "lkey1":"lvalue1", "lkey11":"lvalue12" }, "emrfs":{ "lkey2":"lvalue2" }, "site":{ "lkey3":"lvalue3" } } } Note 特定のインスタンスタイプの値を設定しない場合は、JSON のリストに空白のエントリを指定 する必要があります。たとえば次のとおりです。 { "m1.small":{ } } 次の例では、設定ファイルキーワード(この例では "mapred")を使用して、ユーザー指定の設定ファ イル(config.xml)を Hadoop の mapred-site.xml ファイルとマージし、mapred-site.xml ファイル内で最大マップタスク値を 2 に設定する方法を示します。Amazon S3 バケットに提供する設 定ファイルは、有効な Hadoop 設定ファイルであることが必要です。次に例を示します。 <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.userlog.retain.hours</name> <value>4</value> </property> </configuration> Hadoop 0.18 の設定ファイルが hadoop-site.xml であること。Hadoop 0.20 以降の場合、古い設定 ファイルは 3 つの新しいファイル core-site.xml、mapred-site.xml、および hdfs-site.xml で置き換えられます。 Hadoop 0.18 については、設定ファイルの名前と場所は /conf/hadoop-site.xml です。 設定オプションは、ブートストラップアクションスクリプトで記述されている順番に適用されます。 後ろの方で指定されている設定は、前の方で指定されている設定に優先します。 126 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 AWS CLI を使用してマップタスクの最大数を変更するには AWS CLI を使用してブートストラップアクションを含めるときは、Path と Args をカンマ区切りリ ストとして指定します。 • マップタスクの最大数を設定するブートストラップアクションでクラスターを起動するには、次 のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3.0 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hue Name=Hive Name=Pig \ --instance-count 5 --instance-type m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Args=["-M","s3://myawsbucket/config.xml","m","mapred.tasktracker.map.tasks.maximum=2"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3.0 --usedefault-roles --ec2-attributes KeyName=myKey --applications Name=Hue Name=Hive Name=Pig --instance-count 5 --instance-type m3.xlarge --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Args=["-M","s3://myawsbucket/config.xml","m","mapred.tasktracker.map.tasks.maximum=2"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 また、引数や複数のブートストラップアクションのリストが長くなる場合は、JSON ファイルを 指定することもできます。たとえば、JSON ファイル configuredaemons.json は次のように なります。 [ { "Path": "s3://elasticmapreduce/bootstrap-actions/configure-hadoop", "Args": ["-M","s3://myawsbucket/config.xml","m","mapred.tasktracker.map.tasks.maximum=2"], "Name": "Configure Hadoop" } ] AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 127 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 Amazon EMR CLI を使用してマップタスクの最大数を変更するには Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --args "-M,s3://mybucket/config.xml,m,mapred.tasktracker.map.tasks.maximum=2" • Windows: ruby elastic-mapreduce --create --bootstrap-action s3:// elasticmapreduce/bootstrap-actions/configure-hadoop --args "-M,s3:// myawsbucket/config.xml,-m,mapred.tasktracker.map.tasks.maximum=2" AWS CLI を使用して複数の設定を指定するには • AWS CLI および configure-hadoop ブートストラップアクションを使用して異なるインスタン スタイプの構成でクラスターを起動するには、instance-type-config オプションに URI また は JSON 構成ファイルのパスを指定します。 aws emr create-cluster --name "Test cluster" --ami-version 3.3.2 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hue Name=Hive Name=Pig \ --instance-count 5 --instance-type m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Args=["instance-type-config","s3://myBucket/ myInstanceConfigfile.json"] Run If ブートストラップアクション 事前に定義されたこのブートストラップアクションを使用すると、インスタンス固有の値が instance.json ファイルや job-flow.json ファイルで見つかったときに、条件付きでコマンドを 実行できます。コマンドは、Amazon EMR がダウンロードして実行できる、Amazon S3 のファイル を参照できます。 スクリプトは s3://elasticmapreduce/bootstrap-actions/run-if にあります。 次の例では、ノードがマスターの場合に、"running on master node" という文字列をそのまま返しま す。 AWS CLI を使用して条件付きでコマンドを実行するには AWS CLI を使用してブートストラップアクションを含めるときは、Path と Args をカンマ区切りリ ストとして指定します。 128 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 • インスタンス固有の値が instance.json ファイルまたは job-flow.json ファイルで見つかっ たときに条件付きでコマンドを実行するブートストラップアクションでクラスターを起動するに は、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hue Name=Hive Name=Pig \ --instance-count 5 --instance-type m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/runif,Args=["instance.isMaster=true","echo running on master node"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 --usedefault-roles --ec2-attributes KeyName=myKey --applications Name=Hue Name=Hive Name=Pig --instance-count 5 --instance-type m3.xlarge -bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/runif,Args=["instance.isMaster=true","echo running on master node"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 S3Get ブートストラップアクション Note このブートストラップアクションは、3.4.0 よりも後のバージョンの AMI でのみ使用できま す。 事前に定義されたこのブートストラップアクションを使用すると、Amazon S3 からファイルを取得 し、それらのファイルをクラスター内の各ノード上のパスに配置できます。s3get はクラスターから 見てローカルなブートストラップアクションであり、スクリプトの場所は file:/usr/share/aws/ emr/scripts/s3get になります。 このスクリプトは、Amazon EMR クラスター内の各ノードに配置する必要がある、Amazon S3 内 のアーティファクトを使用する場合に役立ちます。たとえば、EMRFS でのクライアント側暗号化で は、場合によっては、カスタム EncryptionMaterialsProvider クラスの JAR を指定する必要がありま す。s3get を使用すると、S3 バケットから JAR を取得し、その JAR をクラスター内にあるすべての ノード上のターゲットパスに配置できます。 s3get のオプションは次のとおりです。 129 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 -s path | --src=path Amazon S3 ソースパス。 -d path | --dst=path EMR クラスターでの配置先のパス。 -f | --force ファイルがその場所にすでにある場合は、配置先のパスを上書きします。 シャットダウンアクション ブートストラップアクションスクリプトでは、1 つ以上のシャットダウンアクションを作成できま す。そのためには、スクリプトを /mnt/var/lib/instance-controller/public/shutdownactions/ ディレクトリに書き込みます。クラスターが終了すると、ディレクトリ内のすべてのスク リプトが並行して実行されます。各スクリプトが 60 秒以内に実行され完了しなければなりません。 ノードの終了時にエラーが発生した場合、シャットダウンアクションスクリプトが実行される保証は ありません。 Note Amazon EMR バージョン 4.0 以降 を使用する場合、手動でマスターノードに /mnt/var/ lib/instance-controller/public/shutdown-actions/ ディレクトリを作成する必要 があります。デフォルトでは存在しませんが、作成後は、このディレクトリのスクリプトが シャットダウンの前に実行されます。ディレクトリを作成するためのマスターノードへの接 続の詳細については、「SSH を使用してマスターノードに接続する (p. 459)」を参照してく ださい。 カスタムブートストラップアクションの使用 カスタムスクリプトを作成すると、カスタマイズされたブートストラップアクションを実行しま す。Amazon EMR インターフェイスはすべて、カスタムブートストラップアクションを参照できま す。 目次 • AWS CLI または Amazon EMR CLI を使用したカスタムブートストラップアクションの追 加 (p. 130) • コンソールを使用したカスタムブートストラップアクションの追加 (p. 132) AWS CLI または Amazon EMR CLI を使用したカスタムブートストラップアク ションの追加 次の例は、ブートストラップアクションスクリプトを使用して、圧縮された TAR アーカ イブを Amazon S3 からダウンロードし、抽出しています。サンプルスクリプトは http:// elasticmapreduce.s3.amazonaws.com/bootstrap-actions/download.sh に格納されています。 サンプルスクリプトを次に示します。 #!/bin/bash set -e wget -S -T 10 -t 5 http://elasticmapreduce.s3.amazonaws.com/bootstrapactions/file.tar.gz mkdir -p /home/hadoop/contents tar -xzf file.tar.gz -C /home/hadoop/contents 130 Amazon EMR 開発者ガイド (オプション)追加のソフトウェアをインストー ルするためのブートストラップアクションの作成 AWS CLI を使用してカスタムブートストラップアクションでクラスターを作成するには AWS CLI を使用してブートストラップアクションを含めるときは、Path と Args をカンマ区切りリ ストとして指定します。次の例では、引数リストが使用されていません。 • カスタムブートストラップアクションでクラスターを起動するには、次のコマンドを入力 し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --use-default-roles --ec2-attributes KeyName=myKey \ --applications Name=Hue Name=Hive Name=Pig \ --instance-count 5 --instance-type m3.xlarge \ --bootstrap-action Path="s3://elasticmapreduce/bootstrap-actions/ download.sh" • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 --usedefault-roles --ec2-attributes KeyName=myKey --applications Name=Hue Name=Hive Name=Pig --instance-count 5 --instance-type m3.xlarge --bootstrap-action Path="s3://elasticmapreduce/bootstrap-actions/ download.sh" --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Amazon EMR CLI を使用してカスタムブートストラップアクションでクラスターを作成する には Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --bootstrap-action "s3:// elasticmapreduce/bootstrap-actions/download.sh" • Windows: 131 Amazon EMR 開発者ガイド Amazon EMR と互換性のあるファイルシステム ruby elastic-mapreduce --create --alive --bootstrap-action "s3:// elasticmapreduce/bootstrap-actions/download.sh" コンソールを使用したカスタムブートストラップアクションの追加 次の手順では、独自のカスタムブートストラップアクションを使用する方法について説明します。 コンソールを使用してカスタムブートストラップアクションでクラスターを作成するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. 4. [Go to advanced options] をクリックします。 [Create Cluster] - [Advanced Options] で、説明に従ってステップ 1 と 2 でオプションを選択し、 「Step 3: General Cluster Settings」に進みます。 5. [Bootstrap Actions] で [Configure and add] を選択して、ブートストラップアクションの [Name]、 [JAR location]、および引数を指定します。[Add] を選択します。 6. オプションで、必要に応じてさらにブートストラップアクションを追加します。 7. クラスターの作成に進みます。ブートストラップアクションは、クラスターがプロビジョニング および初期化された後で実行されます。 クラスターのマスターノードの実行中には、マスターノードに接続して、/mnt/var/log/ bootstrap-actions/1 ディレクトリにブートストラップアクションが生成したログファイルを確認 できます。 関連トピック • ログファイルを表示する (p. 426) Amazon EMR と互換性のあるファイルシステム このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR および Hadoop には、クラスターステップの処理に使用できるさまざまなファイルシ ステムが用意されています。どのファイルシステムを使用するかは、データへのアクセスに使用する URI のプレフィックスで指定します。たとえば、s3://myawsbucket/path は、EMRFS を使用して Amazon S3 バケットを参照します。次の表に、使用可能なファイルシステムと、それぞれの使用が推 奨される条件を示します。 Amazon EMR および Hadoop は通常、クラスターを処理するときに以下のうち少なくとも 2 つのファ イルシステムを使用します。HDFS と EMRFS は、Amazon EMR とともに使用される 2 つの主なファ イルシステムです。 ファイルシステム プレフィッ クス 説明 HDFS hdfs:// (またはプ レフィック スなし) HDFS は分散型のスケーラブルかつポータブルな Hadoop 用ファイルシステムです。HDFS の利点は、ク ラスターを管理する Hadoop クラスターノードと個別 のステップを管理する Hadoop クラスターノードの間 でのデータ認識です。HDFS のしくみの詳細について は、Hadoop のドキュメントを参照してください。 132 Amazon EMR 開発者ガイド ファイルシステムへのアクセス ファイルシステム プレフィッ クス 説明 HDFS は、マスターノードおよびコアノードによって 使用されます。1 つの利点は高速であることです。欠点 は、エフェメラルなストレージであり、クラスターが 終了すると回収されてしまうことです。最適な用途は、 ジョブフローの中間ステップで得られた結果のキャッ シュ場所です。 EMRFS s3:// EMRFS は、通常のファイルを Amazon EMR から Amazon S3 に直接読み書きするために使用される HDFS の実装です。EMRFS は Hadoop で使用するために Amazon S3 で永続的なデータを保存できるようにしなが ら、Amazon S3 のサーバー側の暗号化、"書き込み後の 読み取り" 整合性、リストの整合性といった機能も提供 します。 Note 以前は、Amazon EMR は URI スキーム s3n で、S3 ネイティブファイルシステムを使用して いました。これは現在でも動作しますが、最適 なパフォーマンス、セキュリティ、および信頼 性のためには、s3 URI スキームを使用すること をお勧めします。 ローカルファイルシステ ム ローカルファイルシステムとは、ローカルに接続され ているディスクを指します。Hadoop クラスターを作成 すると、インスタンスストアと呼ばれる、あらかじめ アタッチされたディスクストレージのブロックが事前 設定されている EC2 インスタンスから、各ノードが作 成されます。インスタンスストアボリューム上のデータ は、EC2 インスタンスの存続中のみ使用できます。イン スタンスストアボリュームは、バッファやキャッシュ、 作業データのように絶えず変化する一時的データを保存 するのに最適です。詳細については、「Amazon EC2 イ ンスタンスストレージ」を参照してください。 (レガシーの)Amazon S3 ブロックファイルシステ ム s3bfs:// Amazon S3 ブロックファイルシステムは、レガシーの ファイル保管システムです。このシステムは、使用しな いことを強くお勧めします。 Important このファイルシステムは、クラスター障害の原 因となる競合状態を引き起こすことがあるた め、利用はお勧めしません。ただし、レガシー アプリケーションでは必要になることがありま す。 ファイルシステムへのアクセス どのファイルシステムを使用するかは、データへのアクセスに使用するユニフォームリソースアイデ ンティファイア(URI)のプレフィックスで指定します。次の手順は、数種類のファイルシステムを 参照する方法を示しています。 133 Amazon EMR 開発者ガイド ファイルシステムへのアクセス ローカルの HDFS にアクセスするには • URI に hdfs:/// プレフィックスを指定します。Amazon EMR は、URI 内にプレフィックス が指定されていないパスをローカルの HDFS として解決します。例えば、次の URI はどちらも HDFS 内の同じ場所に解決されます。 hdfs:///path-to-data /path-to-data リモートの HDFS にアクセスするには • 次の例に示すように、URI にマスターノードの IP アドレスを含めます。 hdfs://master-ip-address/path-to-data master-ip-address/path-to-data Amazon S3 にアクセスするには • s3:// プレフィックスを使用します。 s3://bucket-name/path-to-file-in-bucket Amazon S3 ブロックファイルシステムにアクセスするには • Amazon S3 ブロックファイルシステムを必要とするレガシーアプリケーションでのみ使用して ください。このファイルシステムでデータにアクセス、またはデータを格納するには、URI で s3bfs:// プレフィックスを使用します。 Amazon S3 ブロックファイルシステムは、Amazon S3 への 5 GB を超えるサイズのアップロー ドをサポートするために使われていたレガシーファイルシステムです。Amazon EMR が AWS Java SDK を通じて提供するマルチパートアップロード機能により、最大 5 TB のサイズのファ イルを Amazon S3 ネイティブファイルシステムにアップロードすることができ、Amazon S3 ブ ロックファイルシステムは廃止されました。 Caution このレガシーファイルシステムは競合状態を引き起こす可能性があり、それによって ファイルシステムが破壊されるおそれがあるため、この形式は避け、代わりに EMRFS を使用してください。 s3bfs://bucket-name/path-to-file-in-bucket 134 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) EMR ファイルシステム(EMRFS)(オプション) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMR ファイルシステム (EMRFS) および Hadoop Distributed File System (HDFS) は、いずれも EMR クラスターにインストールされます。EMRFS は、Amazon S3 にデータを保存する EMR クラスター を可能にする HDFS の実装です。AWS マネジメントコンソール、AWS CLI を使用して、EMRFS に対して Amazon S3 のサーバー側およびクライアント側の暗号化と整合性のあるビューを有効 にすることができます。あるいは、(CLI または SDK で)ブートストラップアクションを使用し て、EMRFS の追加設定を行うことができます。 Amazon S3 のサーバー側の暗号化を有効にすることで、EMRFS によって Amazon S3 に書き込ま れるオブジェクトを暗号化することができます。EMRFS は Amazon S3 クライアント側の暗号化 をサポートしており、Amazon S3 暗号化クライアントを使用して、以前に暗号化された S3 オブ ジェクトをクラスターで処理できます。整合性のあるビューでは、リストに対する整合性チェック と、Amazon S3 のオブジェクトに対する書き込み後の読み取り(新しい PUT リクエストが対象)が 行われます。整合性のあるビューを有効にする場合、EMRFS のメタデータを Amazon DynamoDB に 保存する必要があります。メタデータが存在しない場合は、自動的に作成されます。 整合性のあるビュー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMRFS の整合性のあるビューでは、EMRFS によって書き込まれるか同期されるオブジェクトの Amazon S3 のリストの整合性、EMRFS によって削除されるオブジェクトの削除の整合性、および EMRFS によって書き込まれた新しいオブジェクトの "書き込み後の読み取り" の整合性がモニタリン グされます。 Amazon S3 は、結果整合性が提供されるように設計されています。たとえば、すべてのリージョンの バケットは、新しいオブジェクトの PUT リクエストに対して書き込み後の読み取りの整合性、およ び上書き PUT および DELETE リクエストの結果整合性を提供します。したがって、新しいオブジェ クトを配置した直後に Amazon S3 バケットのオブジェクトを一覧表示する場合、Amazon S3 で整合 性のあるリストが返されることは保証されず、不完全となる場合があります。これは、Amazon S3 を データストアとして使用するクイックシーケンシャル MapReduce ジョブで比較的よく起こります。 には、マスターノードでのコマンドラインユーティリティ、emrfsemrfs が含まれています。これに より、管理者はインポート、削除、同期などのメタデータで操作を実行することができます。EMRFS CLI の詳細については、「the section called “EMRFS CLI リファレンス” (p. 144)」を参照してくだ さい。 EMRFS は、特定のパスについて、EMRFS メタデータで一覧表示されるオブジェクトと、Amazon S3 によって直接返されるオブジェクトのセットを返します。Amazon S3 は、パスのオブジェクトに ついてはまだ情報源であるため、EMRFS は、指定された Amazon S3 パスのすべては、メタデータで 追跡されるかどうかにかかわらず処理されるようにします。ただし、EMRFS の整合性のあるビュー により、追跡しているフォルダのオブジェクトが整合性について確認されます。以下のトピックは、 整合性のあるビューを有効にして使用する方法について、さらに詳細を示しています。 Note EMRFS のメタデータで追跡されているオブジェクトを Amazon S3 から直接削除する場 合、EMRFS はメタデータでそのオブジェクトのエントリを確認しますが、Amazon S3 リ ストのオブジェクトや GET リクエストは確認しません。したがって、EMRFS はオブジェ クトを整合性がないものとして処理し、すべての再試行回数に到達すると例外をスローしま 135 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) す。Amazon S3 から直接オブジェクトを削除したら、すぐに EMRFS を使用して、整合性の あるビューで追跡中の Amazon S3のオブジェクトの削除、Amazon S3 で直接削除されるオブ ジェクトのメタデータのエントリの消去、または Amazon S3 の整合性のあるビューの同期を 行う必要があります。 EMRFS の整合性に関する記事を読むには、AWS ビッグデータブログの「ETL ワークフローに Amazon S3 および Amazon Elastic MapReduce を使用する場合の整合性の確保」を参照してくださ い。 トピック • 整合性あるビューを有効にする方法 (p. 136) • EMRFS で追跡されるオブジェクト (p. 137) • 再試行ロジック (p. 138) • EMRFS のメタデータ (p. 138) • CloudWatch および Amazon SQS の整合性に関する通知の設定 (p. 141) • 整合性のあるビューの設定 (p. 142) • EMRFS CLI リファレンス (p. 144) 整合性あるビューを有効にする方法 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS マネジメントコンソール または AWS CLI を使用して、EMRFS に対して Amazon S3 のサー バー側の暗号化または整合性のあるビューを有効にすることができます。または、ブートストラップ アクションを使用して EMRFSを使用することができます。 コンソールを使用して整合性のあるビューを設定するには 1. [Create Cluster] を選択します。 2. [File System Configuration] セクションに移動します。 3. [Consistent view] を有効にするには、[Enabled] を選択します。 4. [EMRFS Metadata store] に、メタデータストアの名前を入力します。デフォルト値は EmrFSMetadata です。EmrFSMetadata テーブルが存在しない場合、自動的に DynamoDB で作 成されます。 Note Amazon EMR は、クラスターの終了時に自動的に DynamoDB から EMRFS のメタデー タを削除しません。 5. [Number of retries] に整数値を入力します。この値は、不整合が検出された場合に、EMRFS が Amazon S3 を呼び出す再試行回数を表します。デフォルト値は 5 です。 6. [Retry period (in seconds)] に、整数値を入力します。この値は EMRFS が Amazon S3の呼び出し を再試行する前の時間を表します。デフォルト値は 10 です。 Note それ以降の再試行では、エクスポネンシャルパックオフが使用されます。 AWS CLI を使用して、整合性のあるビューを有効にしてクラスターを起動するには 136 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) Note 最新バージョンの AWS CLI をインストールする必要があります。最新リリースをダウンロー ドするには、https://aws.amazon.com//cli/ を参照してください。 整合性のあるビューを有効にして、次のコマンドを入力して Amazon EMR クラスターを起動しま す。 aws emr create-cluster --instance-type m1.large --instance-count 3 --emrfs Consistent=true --ami-version=3.9 --ec2-attributes KeyName=myKey Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 AWS マネジメントコンソール を使用して整合性のあるビューが有効かどうかを確認するには コンソールで整合性のあるビューが有効かどうかを確認するには、[Cluster List] に移動し、クラ スター名を選択して [Cluster Details] を表示します。[EMRFS consistent view] フィールドの値 は、Enabled または Disabled です。 整合性のあるビューが有効になっているかどうかを確認するには、emrfs-site.xml ファイルを調べ ます。 整合性が有効になっているかどうかは、クラスターのマスターノードの emrfs-site.xml 設定ファ イルを調べることで確認できます。fs.s3.consistent のブール値が true に設定されている場 合、Amazon S3 が関連するファイルシステム操作に対して整合性のあるビューが有効になっていま す。 EMRFS で追跡されるオブジェクト このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMRFS は、オブジェクトに関する情報を EMRFS のメタデータに追加して、Amazon S3 でそれらの オブジェクトの整合性のあるビューを作成します。EMRFS は、次の場合にこれらの一覧をそのメタ データに追加します。 • Amazon EMR ジョブの実行中に、EMRFS によってオブジェクトが書き込まれた。 • EMRFS CLI を使用してオブジェクトが EMRFS のメタデータと同期化されたか、EMRFS にイン ポートされた. EMRFS によって読み取られたオブジェクトはメタデータに自動的に追加されません。オブジェクト が EMRFS によって削除されると、リストが EMRFS CLI を使用して消去されるまで、削除された 状態でメタデータに残ります。CLI の詳細については、「the section called “EMRFS CLI リファレン ス” (p. 144)」を参照してください。EMRFS のメタデータでの一覧消去の詳細については、「the section called “EMRFS のメタデータ” (p. 138)」を参照してください。 EMRFS は、すべての Amazon S3 操作で、整合性のあるビューのオブジェクトのセットに関する情 報についてメタデータを確認します。EMRFS が、これらのいずれかの操作中に Amazon S3 の整合 性がないことを見つけると、emrfs-site.xml に定義されているパラメーターに従って操作を再 試行します。再試行の上限に達すると、ConsistencyException を返すか、例外を記録してワー クフローを継続します。この再試行ロジックの詳細については、「the section called “再試行ロジッ 137 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) ク” (p. す。 )」を参照してください。たとえば、ログには ConsistencyExceptions が見つかりま • listStatus: No s3 object for metadata item /S3_bucket/dir/object • getFileStatus: Key dir/file is present in metadata but not s3 EMRFS の整合性のあるビューで追跡されているオブジェクトを直接 Amazon S3 から削除すると、 そのオブジェクトは整合性がないものとして扱われます。これは、Amazon S3 のメタデータでそのオ ブジェクトはまだ存在すると表示されるためです。メタデータが Amazon S3 で追跡中のオブジェク トと同期されなくなった場合、EMRFS CLI で sync サブコマンドを使用して、メタデータの表示をリ セットし、現在 Amazon S3 に存在するものを反映することができます。メタデータと Amazon S3 間 に不一致があるかどうかを調べるには、EMRFS CLI で diff サブコマンドを使用して、それらを比較す ることができます。最後に、EMRFS にはメタデータで参照されているオブジェクトの整合性のある ビューがあります。同じ Amazon S3 のパスには、追跡されていない他のオブジェクトが存在する場 合があります。EMRFS が Amazon S3 パスのオブジェクトを一覧表示するときに、メタデータおよび その Amazon S3 パスで追跡しているオブジェクトのスーパーセットを返します。 再試行ロジック このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMRFS は、特定の数の再試行について、メタデータで追跡されるオブジェクトのリ ストの整合性を検証しようとします。デフォルトは5です。再試行の数を超過する場 合、fs.s3.consistent.throwExceptionOnInconsistency が false に設定され ていない限り(この場合、整合性がないとして追跡されるオブジェクトのみが記録され ます)、失敗を返します。EMRFS は、デフォルトでエクスポネンシャルパックオフ再 試行ポリシーを使用しますが、固定ポリシーに設定することもできます。ユーザーは、 例外をスローすることなく、残りのジョブに進む前に特定の時間、再試行したい場合が あります。その場合は、fs.s3.consistent.throwExceptionOnInconsistency を false に、fs.s3.consistent.retryPolicyType を fixed に、fs.s3.consistent.retryPeriodSeconds を目的の値に設定することで、これを達成できま す。次の例では、整合性を有効にしてクラスターを作成します。これにより、不整合が記録され、10 秒の固定再試行間隔が設定されます。 再試行期間の一定量への設定 aws emr create-cluster --ami-version 3.10.0 --instance-type m1.large -instance-count 1 \ --emrfs Consistent=true,Args=[fs.s3.consistent.throwExceptionOnInconsistency=false,\ fs.s3.consistent.retryPolicyType=fixed,fs.s3.consistent.retryPeriodSeconds=10] --ec2-attributes KeyName=myKey Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 詳細については、「the section called “整合性のあるビューの設定” (p. )」を参照してください。 EMRFS のメタデータ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 138 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) Note 整合性のあるビューを使用するために、DynamoDB データベースでデータを追跡していま す。そのため、データベースが存在している間はそのデータベースを使用するコストが発生 します。 Amazon EMR は、DynamoDB テーブルを使用して整合性を追跡し、オブジェクトの状態を保存しま す。EMRFS の整合性のあるビューは、DynamoDB テーブルに保存される EMRFS のメタデータを作 成し使用して、Amazon S3 の整合性のあるビューを維持します。このビューは、複数のクラスターで 共有することができます。EMRFS はこのメタデータを作成し使用して、EMRFS によって同期または 作成された Amazon S3 のフォルダ内にあるオブジェクトを追跡します。このメタデータはすべての 操作(読み取り、書き込み、更新、およびコピー)の追跡に使用され、実際のコンテンツはメタデー タには保存されません。このメタデータは、Amazon S3 から受け取ったオブジェクトやメタデータ が、予期しているものと一致するかどうかを検証するために使用されます。この検証により、EMRFS は、EMRFS が Amazon S3 に書き込む新しいオブジェクトや EMRFS と同期されるオブジェクトのリ ストの整合性、および "書き込み後の読み取り" 整合性をチェックすることができます。 メタデータにエントリを追加する方法 メタデータにエントリを追加するには、sync または import サブコマンドを使用できます。sync は、単純にパスの Amazon S3 オブジェクトの状態を反映します。一方、import は厳密にメタデー タに新しいエントリを追加するために使用されます。詳細については、「the section called “EMRFS CLI リファレンス” (p. 144)」を参照してください。 メタデータと Amazon S3 のオブジェクトの違いを確認する方法 メタデータと Amazon S3 の違いを確認するには、EMRFS CLI の diff サブコマンドを使用します。 詳細については、「the section called “EMRFS CLI リファレンス” (p. 144)」を参照してください。 メタデータ操作が調整されているかどうかを確認する方法 EMRFS は、その読み取りおよび書き込み操作のメタデータのデフォルトのスループット容量制限 として、それぞれ 400 ユニットおよび 100 ユニットを設定します。大量のオブジェクトやバケット があると、操作でこの容量を超える可能性があります。そのポイントは DynamoDB によって調整さ れます。たとえば、これらの容量の上限を超える操作を実行する場合、アプリケーションによって EMRFS が ProvisionedThroughputExceededException をスローする場合があります。調整によ り、EMRFS CLI ツールは、操作が終了するか、EMR から Amazon S3 へのオブジェクト書き込みの 最大再試行値に到達するまで、エクスポネンシャルパックオフを使用して DynamoDB テーブルへの 書き込みを再試行します。 また、DynamoDB コンソールの EMRFS のメタデータの Amazon CloudWatch メトリクスを表示し、 調整された読み取りまたは書き込みリクエストの数を確認することもできます。調整されたリクエス トの数がゼロ以外の場合、アプリケーションは、読み取りまたは書き込み操作に割り当てられるス ループット容量を増やすことで、メリットが得られる可能性があります。長時間にわたって読み取 りと書き込みに割り当てられた最大のスループット容量に操作が近付いていることが表示された場合 も、パフォーマンスのメリットが得られる可能性があります。 重要な EMRFS 操作のスループット特性 読み取りおよび書き込み操作のデフォルト値は、それぞれ 400 スループット容量ユニット、100 ス ループット容量ユニットです。以下のパフォーマンス特性は、特定の操作に必要なスループットのヒ ントを示しています。これらのテストは、単一ノードの m3.large クラスターを使用して実行されま した。すべての操作はシングルスレッドです。パフォーマンスは特定のアプリケーション特性によっ て大きく異なり、ファイルシステム操作を最適化するには、検証が必要になる場合があります。 演算 平均の 1 秒あたりの 平均の 1 秒あたりの書き込み 読み取り create(オブジェクト) 26.79 6.70 139 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) 演算 平均の 1 秒あたりの 平均の 1 秒あたりの書き込み 読み取り delete(オブジェクト) 10.79 10.79 delete(1000 個のオブジェクトを 含むディレクトリ) 21.79 338.40 getFileStatus(オブジェクト) 34.70 0 getFileStatus(ディレクトリ) 19.96 0 listStatus(1 個のオブジェクトを 含むディレクトリ) 43.31 0 listStatus(10 個のオブジェクトを 44.34 含むディレクトリ) 0 listStatus(100 個のオブジェクト を含むディレクトリ) 84.44 0 listStatus(1,000 個のオブジェク トを含むディレクトリ) 308.81 0 listStatus(10,000 個のオブジェク トを含むディレクトリ) 416.05 0 listStatus(100,000 個のオブジェ クトを含むディレクトリ) 823.56 0 listStatus(1,000,000 個のオブ ジェクトを含むディレクトリ) 882.36 0 mkdir(120 秒間継続) 24.18 4.03 mkdir 12.59 0 rename(オブジェクト) 19.53 4.88 rename(1000 個のオブジェクト を含むディレクトリ) 23.22 339.34 メタデータストアから古いデータを消去するステップを送信するには DynamoDB ベースのメタデータの特定エントリを削除したい場合があります。この操作は、テーブ ルに関連するストレージコストを節約するうえで役立ちます。ユーザーは、EMRFS CLI の delete サブコマンドを使用して、特定のエントリを手動またはプログラムで消去することができます。ただ し、メタデータからエントリを削除すると、EMRFS は整合性のチェックを行わなくなります。 ジョブ完了後のプログラムによる消去は、EMRFS CLI でコマンドを実行する最終的なステップをクラ スターに送信することにより行います。たとえば、クラスターにステップを送信し、2 日前より古い すべてのエントリを削除するには、次のコマンドを入力します。 aws emr add-steps --cluster-id j-2AL4XXXXXX5T9 --steps Type=CUSTOM_JAR,ActionOnFailure=CONTINUE,Jar=s3://elasticmapreduce/libs/ script-runner/script-runner.jar, Args=[/home/hadoop/bin/emrfs,delete,--time,2,--time-unit,days] { "StepIds": [ "s-B12345678902" 140 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) ] } 操作結果のログを確認するには、返された StepId 値を使用します。 CloudWatch および Amazon SQS の整合性に関する通知の設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon S3 の結果整合性の問題に関して、EMRFS で CloudWatch のメトリクスと Amazon SQS メッセージを有効にすることができます。 CloudWatch CloudWatch のメトリクスが有効になっている場合、Amazon S3 の結果整合性が原因で FileSystem API 呼び出しが失敗するたびに、Inconsistency という名前のメトリクスがプッシュされます。 Amazon S3 の結果整合性の問題に関する CloudWatch メトリクスを表示するには CloudWatch コンソールで [Inconsistency] メトリクスを表示するには、EMRFS のメトリクス を選択し、[JobFlowId] と [Metric Name] のペアを選択します。たとえば、j-162XXXXXXM2CU ListStatusj-162XXXXXXM2CU GetFileStatus などです。 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. [Dashboard] の [Metrics] セクションで、[EMRFS] を選択します。 3. [Job Flow Metrics] ペインで、1 つ以上の [JobFlowId] と [Metric Name] のペアを選択します。メト リクスのグラフィカル表示が、次のウィンドウに表示されます。 Amazon SQS Amazon SQS の通知が有効になっている場合、EMRFS が初期化されるときに EMRFSInconsistency-<jobFlowId> という名前の Amazon SQS キューが作成されます。Amazon S3 の 結果整合性が原因で FileSystem API 呼び出しが失敗すると、Amazon SQS メッセージがキューに プッシュされます。このメッセージには、JobFlowId、API、整合性のないパスの一覧、スタックト レースなどの情報が含まれます。メッセージは、Amazon SQS コンソールを使用するか、EMRFS の read-sqs コマンドを使用して読み取ることができます。 Amazon S3 の結果整合性の問題について Amazon SQS メッセージングを管理するには Amazon S3 の結果整合性の問題に関する Amazon SQS メッセージは、EMRFS CLI を使用して読み 取ることができます。EMRFS Amazon SQS キューからメッセージを読み取るには、read-sqs コマ ンドを入力し、マスターノードのローカルファイルシステムで結果の出力ファイルの出力場所を指定 します。 また、delete-sqs コマンドを使用して EMRFS Amazon SQS キューを削除することもできます。 1. Amazon SQS キューからのメッセージを読み取るには、次のコマンドを入力します。queuename を、設定した Amazon SQS キューの名前に置き換え、/path/filename を出力ファイルのパス に置き換えます。 emrfs read-sqs -queue-name queuename -output-file /path/filename たとえば、デフォルトキューから Amazon SQS メッセージを読み取り、出力するには、次のよう に入力します。 141 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) emrfs read-sqs -queue-name EMRFS-Inconsistency-j-162XXXXXXM2CU -outputfile /path/filename Note また、-queue-name および -output-file の代わりに、それぞれ -q および -o ショー トカットを使用することもできます。 2. Amazon SQS キューを削除するには、次のコマンドを入力します。 emrfs delete-sqs -queue-name queuename たとえば、デフォルトキューを削除するには、次のように入力します。 emrfs delete-sqs -queue-name EMRFS-Inconsistency-j-162XXXXXXM2CU Note -q の代わりに -queue-name を使用することもできます。 整合性のあるビューの設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS CLI またはブートストラップアクションを使用して /home/hadoop/conf/emrfs-site.xml ファイルに設定を指定することで、整合性のあるビューの追加設定を行うことができます。たとえ ば、CLI の --emrfs オプションまたはブートストラップアクションに対して次の引数を指定すること で、異なるデフォルトの DynamoDB スループットを選択できます。 クラスター起動時のデフォルトのメタデータの読み取りおよび書き込み値の変更 aws emr create-cluster --ami-version 3.10.0 --instance-type m1.large \ --emrfs Consistent=true,Args=[fs.s3.consistent.metadata.read.capacity=600,\ fs.s3.consistent.metadata.write.capacity=300] --ec2-attributes KeyName=myKey aws emr create-cluster --ami-version 3.10.0 --instance-type m1.large \ --bootstrap-actions Path=s3://us-east-1.elasticmapreduce/bootstrap-actions/ configure-hadoop,\ Args=[-e,fs.s3.consistent=true,e,fs.s3.consistent.metadata.read.capacity=600,\ -e,fs.s3.consistent.metadata.write.capacity=300] --ec2-attributes KeyName=myKey 次の構文で作成した設定を使用します。 Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 142 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) 次のオプションは、ブートストラップアクションまたは AWS CLI の --emrfs 引数を使用して設定で きます。これらの引数の詳細については、『AWS Command Line Interface Reference』を参照してく ださい。 整合性のあるビューの emrfs-site.xml のプロパティ プロパティ デフォルト値 説明 fs.s3.consistent false true に設定すると、このプロパ ティは DynamoDB を使用して整 合性を提供するように EMRFS を 設定します。 fs.s3.consistent.retryPolicyType exponential このプロパティは、整合性 に関する問題について再試行 するときに使用するポリシー を識別します。オプション は、exponential、fixed、または none です。 fs.s3.consistent.retryPeriodSeconds 10 このプロパティは、整合性の再試 行間の待機時間を設定します。 fs.s3.consistent.retryCount 5 このプロパティは、不整合が検出 されたときの最大の再試行回数を 設定します。 fs.s3.consistent.throwExceptionOnInconsistency true このプロパティは、整合性の例外 をスローまたは記録するかどうか を決定します。true に設定する と、ConsistencyException が スローされます。 fs.s3.consistent.metadata.autoCreate true このプロパティは、true に設定 されると、メタデータテーブルの 自動作成を有効にします。 fs.s3.consistent.metadata.tableName EmrFSMetadataこのプロパティは、DynamoDB で メタデータテーブルの名前を指定 します。 fs.s3.consistent.metadata.read.capacity 400 このプロパティは、メタデータ テーブルの作成時に DynamoDB の読み込みキャパシティーをプロ ビジョニングすることを指定しま す。 fs.s3.consistent.metadata.write.capacity 100 このプロパティは、メタデータ テーブルの作成時に DynamoDB の書き込みキャパシティーをプロ ビジョニングすることを指定しま す。 fs.s3.consistent.fastList このプロパティは、true に設定 されると、複数スレッドを使用し てディレクトリを一覧表示します (必要な場合)。このプロパティ を使用するには、整合性を有効に する必要があります。 true 143 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) プロパティ デフォルト値 説明 fs.s3.consistent.fastList.prefetchMetadata false このプロパティは、true に設定 されると、20,000 以上の項目を含 むディレクトリに対してメタデー タのプリフェッチを有効にしま す。 fs.s3.consistent.notification.CloudWatch false true に設定されると、Amazon S3 の結果整合性の問題が原因で失 敗する FileSystem API 呼び出しに 対して CloudWatch メトリクスが 有効になります。 fs.s3.consistent.notification.SQS true に設定されると、結果整合 性の通知が Amazon SQS キュー にプッシュされます。 false fs.s3.consistent.notification.SQS.queueName EMRFSこのプロパティを変更する Inconsistencyと、Amazon S3 の結果整合性の問 <jobFlowId> 題に関するメッセージに対して、 独自の SQS キュー名を指定する ことができます。 fs.s3.consistent.notification.SQS.customMsg none このプロパティでは、Amazon S3 の結果整合性の問題に関する SQS メッセージに含まれるカスタム情 報を指定することができます。こ のプロパティに対して値が指定さ れていない場合、メッセージの対 応するフィールドは空になりま す。 fs.s3.consistent.dynamodb.endpoint このプロパティを使用して、整合 性のあるビューのメタデータにカ スタム DynamoDB エンドポイン トを指定できます。 none EMRFS CLI リファレンス このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMRFS CLI は、AMI 3.2.1 以降を使用して作成されたすべてのクラスターマスターノードにデフォル トでインストールされます。EMRFS CLI を使用して、オブジェクトに整合性のあるビューがある状態 を追跡するメタデータを管理します。 Note emrfs コマンドは、VT100 ターミナルエミュレーションでのみサポートされます。ただし、 他のターミナルエミュレータモードでも動作する場合があります。 emrfs 最上位コマンドは、次の構造をサポートしています。 emrfs [[describe-metadata | set-metadata-capacity | delete-metadata | createmetadata | \ 144 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) list-metadata-stores | diff | delete | sync | import ]] [[options]] [[arguments]] emrfs コマンド emrfs コマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -a AWS_ACCESS_KEY_ID | --access-key AWS_ACCESS_KEY_ID Amazon S3へのオブジェクトの書き込みおよび DynamoDB 内のメタデータスコアの作成またはアク セスに使用する AWS アクセスキー。デフォルトで は、AWS_ACCESS_KEY_ID は、クラスターの作成に 使用されたアクセスキーに設定されます。 いいえ -s AWS_SECRET_ACCESS_KEY | --secret-key AWS_SECRET_ACCESS_KEY Amazon S3 へのオブジェクトの書き込みおよ び DynamoDB 内のメタデータストアの作成また はアクセスに使用するアクセスキーに関連付け られた AWS シークレットキー。デフォルトで は、AWS_SECRET_ACCESS_KEY は、クラスターの作 成に使用されたアクセスキーに関連付けられたシー クレットキーに設定されます。 いいえ -v | --verbose 詳細な出力を作成します。 いいえ -h | --help emrfs コマンドのヘルプメッセージと使用方法の説 明を表示します。 いいえ describe-metadata サブコマンド describe-metadata サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ describe-metadata の例 次の例では、デフォルトのメタデータテーブルを記述します。 $ emrfs describe-metadata EmrFSMetadata read-capacity: 400 write-capacity: 100 status: ACTIVE approximate-item-count (6 hour delay): 12 set-metadata-capacity サブコマンド set-metadata-capacity サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できま す。 145 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ -r READ_CAPACITY | --readcapacity READ_CAPACITY メタデータテーブルのリクエストされた読み込みス ループット容量。READ_CAPACITY 引数が指定され ていない場合、デフォルト値は 400 です。 いいえ -w WRITE_CAPACITY | --write-capacity WRITE_CAPACITY メタデータテーブルのリクエストされた書き込みス ループット容量。WRITE_CAPACITY 引数が指定され ていない場合、デフォルト値は 100 です。 いいえ set-metadata-capacity の例 次の例では、EmrMetadataAlt という名前のメタデータテーブルの読み込みスループット容量を 600、書き込みスループット容量を 150 に設定します。 $ emrfs set-metadata-capacity --metadata-name EmrMetadataAlt 600 --write-capacity 150 read-capacity: 400 write-capacity: 100 status: UPDATING approximate-item-count (6 hour delay): 0 --read-capacity delete-metadata サブコマンド delete-metadata サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ delete-metadata の例 次の例では、デフォルトのメタデータテーブルを削除します。 $ emrfs delete-metadata create-metadata サブコマンド create-metadata サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ -r READ_CAPACITY | --readcapacity READ_CAPACITY メタデータテーブルのリクエストされた読み込みス ループット容量。READ_CAPACITY 引数が指定され ていない場合、デフォルト値は 400 です。 いいえ 146 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) オプション 説明 必須 -w WRITE_CAPACITY | --write-capacity WRITE_CAPACITY メタデータテーブルのリクエストされた書き込みス ループット容量。WRITE_CAPACITY 引数が指定され ていない場合、デフォルト値は 100 です。 いいえ create-metadata の例 次の例では、EmrFSMetadataAlt という名前のメタデータテーブルを作成します。 $ emrfs create-metadata -m EmrFSMetadataAlt Creating metadata: EmrFSMetadataAlt EmrFSMetadataAlt read-capacity: 400 write-capacity: 100 status: ACTIVE approximate-item-count (6 hour delay): 0 list-metadata-stores サブコマンド list-metadata-stores サブコマンドには、[[options]] がありません。 list-metadata-stores の例 次の例では、メタデータテーブルを表示します。 $ emrfs list--metadata-stores EmrFSMetadata diff サブコマンド diff サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ [s3://s3Path] メタデータテーブルと比較する、整合性のある はい ビュー用に追跡する Amazon S3 バケットへのパス。 バケットは再帰的に同期されます。 diff の例 次の例では、デフォルトのメタデータテーブルを Amazon S3 バケットと比較します。 $ emrfs diff s3://elasticmapreduce/samples/cloudfront BOTH | MANIFEST ONLY | S3 ONLY DIR elasticmapreduce/samples/cloudfront DIR elasticmapreduce/samples/cloudfront/code/ DIR elasticmapreduce/samples/cloudfront/input/ DIR elasticmapreduce/samples/cloudfront/logprocessor.jar DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-14.WxYz1234 147 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-15.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-16.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-17.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-18.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-19.WxYz1234 DIR elasticmapreduce/samples/cloudfront/input/ XABCD12345678.2009-05-05-20.WxYz1234 DIR elasticmapreduce/samples/cloudfront/code/cloudfront-loganalyzer.tgz delete サブコマンド delete サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ [s3://s3Path] 整合性のあるビュー用に追跡する Amazon S3 バケッ はい トへのパス。バケットは再帰的に同期されます。 -t TIME | --time TIME 有効期限(時間単位引数を使用して解釈されま す)。指定されたバケットの TIME 引数より古いす べてのメタデータエントリが削除されます。 -u UNIT | --time-unit UNIT 時間の引数(ナノ秒、マイクロ秒、ミリ秒、秒、 分、時間、日数)を解釈するために使用される基 準。引数が指定されていない場合、デフォルト値は days です。 --read-consumption READ_CONSUMPTION delete 操作に使用される、リクエストさ いいえ れた利用可能な読み込みスループットの 量。READ_CONSUMPTION 引数が指定されていない場 合、デフォルト値は 400 です。 --write-consumption WRITE_CONSUMPTION delete 操作に使用される、リクエストさ れた利用可能な書き込みスループットの 量。WRITE_CONSUMPTION 引数が指定されていない 場合、デフォルト値は 100 です。 いいえ delete の例 次の例では、整合性のあるビューの追跡メタデータから Amazon S3 バケットのすべてのオブジェク トを削除します。 $ emrfs delete s3://elasticmapreduce/samples/cloudfront entries deleted: 11 import サブコマンド import サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 148 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ [s3://s3Path] 整合性のあるビュー用に追跡する Amazon S3 バケッ はい トへのパス。バケットは再帰的に同期されます。 --read-consumption READ_CONSUMPTION delete 操作に使用される、リクエストさ いいえ れた利用可能な読み込みスループットの 量。READ_CONSUMPTION 引数が指定されていない場 合、デフォルト値は 400 です。 --write-consumption WRITE_CONSUMPTION delete 操作に使用される、リクエストさ れた利用可能な書き込みスループットの 量。WRITE_CONSUMPTION 引数が指定されていない 場合、デフォルト値は 100 です。 いいえ import の例 次の例では、整合性のあるビューの追跡メタデータと共に、Amazon S3 バケットのすべてのオブジェ クトをインポートします。不明なキーはすべて無視されます。 $ emrfs import s3://elasticmapreduce/samples/cloudfront sync サブコマンド sync サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -m METADATA_NAME | --metadata-name METADATA_NAME METADATA_NAME は DynamoDB メタデータテーブル の名前です。METADATA_NAME 引数が指定されてい ない場合、デフォルト値は EmrFSMetadata です。 いいえ [s3://s3Path] 整合性のあるビュー用に追跡する Amazon S3 バケッ はい トへのパス。バケットは再帰的に同期されます。 --read-consumption READ_CONSUMPTION delete 操作に使用される、リクエストさ いいえ れた利用可能な読み込みスループットの 量。READ_CONSUMPTION 引数が指定されていない場 合、デフォルト値は 400 です。 --write-consumption WRITE_CONSUMPTION delete 操作に使用される、リクエストさ れた利用可能な書き込みスループットの 量。WRITE_CONSUMPTION 引数が指定されていない 場合、デフォルト値は 100 です。 いいえ sync の例 次の例では、整合性のあるビューの追跡メタデータと共に、Amazon S3 バケットのすべてのオブジェ クトをインポートします。不明なキーがすべて削除されます。 $ emrfs sync s3://elasticmapreduce/samples/cloudfront 149 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) Synching samples/cloudfront updated | 0 removed | 0 unchanged Synching samples/cloudfront/code/ updated | 0 removed | 0 unchanged Synching samples/cloudfront/ updated | 0 removed | 0 unchanged Synching samples/cloudfront/input/ updated | 0 removed | 0 unchanged Done synching s3://elasticmapreduce/samples/cloudfront updated | 1 removed | 0 unchanged creating 3 folder key(s) folders written: 3 0 added | 0 1 added | 0 2 added | 0 9 added | 0 9 added | 0 read-sqs サブコマンド read-sqs サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -q QUEUE_NAME | --queuename QUEUE_NAME QUEUE_NAME は、emrfs-site.xml で設定した Amazon SQS キューの名前です。デフォルト値は EMRFS-Inconsistency-<jobFlowId> です。 はい -o OUTPUT_FILE | --outputfile OUTPUT_FILE OUTPUT_FILE は、マスターノードのローカルファ イルシステムにある出力ファイルへのパスです。 キューから読み取ったメッセージはこのファイルに 書き込まれます。 はい delete-sqs サブコマンド delete-sqs サブコマンドでは、(引数の有無にかかわらず)次の [[options]] を使用できます。 オプション 説明 必須 -q QUEUE_NAME | --queuename QUEUE_NAME QUEUE_NAME は、emrfs-site.xml で設定した Amazon SQS キューの名前です。デフォルト値は EMRFS-Inconsistency-<jobFlowId> です。 はい ステップとしての EMRFS CLI コマンドの送信 整合性のあるビューの追跡メタデータに Amazon S3 バケットを追加するには(AWS SDK for Python) 次の例では、AWS CLI または API および emrfs を活用して script-runner.jar コマンドをステッ プとして実行することにより、マスターノードで emrfs ユーティリティを使用する方法を示します。 この例では、AWS SDK for Python(Boto)を使用し、Amazon S3 バケットのオブジェクトをデフォ ルトの EMRFS メタデータテーブルに追加するステップをクラスターに追加します。 from boto.emr import EmrConnection,connect_to_region,JarStep emr=EmrConnection() connect_to_region("us-east-1") myStep = JarStep(name='Boto EMRFS Sync', jar='s3://elasticmapreduce/libs/script-runner/scriptrunner.jar', 150 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) action_on_failure="CONTINUE", step_args=['/home/hadoop/bin/emrfs', 'sync', 's3://elasticmapreduce/samples/cloudfront']) stepId = emr.add_jobflow_steps("j-2AL4XXXXXX5T9", steps=[myStep]).stepids[0].value 返された stepId 値を使用すると、ログで操作の結果を確認できます。 EMRFS の AWSCredentialsProvider の作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon S3 を呼び出すときに EMRFS で使用される AWSCredentialsProvider クラスと Hadoop Configurable クラスの両方を実装するカスタム認証情報プロバイダーを作成できます。カスタム認証 情報のプロバイダをこのように作成するのは、Amazon EMR ユーザーが、アクセスされる Amazon S3 バケットによって異なる認証情報を提供する必要がある場合に役立ちます。 /home/hadoop/conf/emrfs-site.xmlに fs.s3.customAWSCredentialsProvider を設定してプロバイダの完全なクラス名を指定する必要があります。AWS CLI を使用し てクラスターを作成するときにこのプロパティを設定します。たとえば、以下のコードは fs.s3.customAWSCredentialsProvider を MyAWSCredentialsProvider に設定します。 aws emr create-cluster --ami-version 3.11.0 --instance-type m1.large \ --bootstrap-actions Path=s3://us-east-1.elasticmapreduce/bootstrap-actions/ configure-hadoop,\ Args=[-e,fs.s3.customAWSCredentialsProvider=MyAWSCredentialsProvider] --ec2attributes KeyName=myKey 実装例は次のとおりです。 public class MyAWSCredentialsProvider implements AWSCredentialsProvider, Configurable { private Configuration conf; private String accessKey; private String secretKey; private void init() { accessKey = conf.get("my.accessKey"); secretKey = conf.get("my.secretKey"); } @Override public AWSCredentials getCredentials() { return new BasicAWSCredentials(accessKey, secretKey); } @Override public void refresh() { 151 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) } @Override public void setConf(Configuration configuration) { this.conf = configuration; init(); } @Override public Configuration getConf() { return this.conf; } } 代替実装を使用して、オブジェクト作成時にバケット URI を指定できます。これは、この署名に続き ます。 class MyCustomCredentialProvider implements AWSCredentialsProvider , Configurable { public MyCustomCredentialProvider (Uri uri , Configuration configuration) { } } EMRFS での暗号化 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon S3 に格納するデータを保護するために、サーバー側またはクライアント側の暗号化を使用 できます。サーバー側の暗号化を使うと、Amazon S3 はアップロード後にデータを暗号化します。ク ライアント側の暗号化では、暗号化とキーを管理します。暗号化に使用されるキーの管理には、AWS Key Management Service (AWS KMS) を使用できます。クラスター作成時に、両方のオプションを有 効にします。 Note クライアント側の暗号化とサーバー側の暗号化は、相互に排他的なグローバル設定です。い ずれかのオプションが有効になっていると、EMRFS を通して発生するすべての Amazon S3 書き込みアクションでは、選択した暗号化形式が使用されます。 EMRFS は、Amazon S3 暗号化を実装します。クラスター(HDFS またはローカルファイル システムボリューム)でファイルをローカルに書き込む場合、それらのファイルは暗号化さ れません。 トピック • Amazon S3 サーバー側の暗号化を有効にしてクラスターを作成する (p. 152) • EMRFS での Amazon S3 クライアント側の暗号化の使用 (p. 153) Amazon S3 サーバー側の暗号化を有効にしてクラスターを作成する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 152 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) Amazon EMR では Amazon S3 サーバー側暗号化 (SSE) がサポートされています。 サーバー側の暗号化が有効なクラスターを起動するには、AWS マネジメントコンソー ル、AWS CLI、または configure-hadoop ブートストラップアクションを使用して fs.s3.enableServerSideEncryption を true に設定します。 コンソールを使用してサーバー側の暗号化を設定するには 1. [Create Cluster] を選択します。 2. [File System Configuration] セクションに移動します。 3. [Server-side encryption] を使用するには、[Enabled] を選択します。 4. [Create cluster] を選択します。 AWS CLI を使用し、Amazon S3 サーバー側の暗号化を有効にしてクラスターを起動するには Amazon S3 サーバー側の暗号化を有効にして Amazon EMR クラスターを起動するには、次のコマン ドを入力します。 aws emr create-cluster --ami-version 3.11.0 --instance-count 3 --instancetype m1.large --emrfs Encryption=ServerSide サーバー側の暗号化の emrfs-site.xml のプロパティ プロパティ デフォルト値 説明 fs.s3.enableServerSideEncryption false true に設定されると、Amazon S3 に保存されたオブジェクトは サーバー側の暗号化を使用して暗 号化されます。 fs.s3.serverSideEncryption.kms.keyId #### AWS KMS キーの ID または ARN を指定します。 EMRFS での Amazon S3 クライアント側の暗号化の使用 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMRFS は Amazon S3 クライアント側の暗号化をサポートしており、Amazon S3 暗号化クライアン トを使用して、以前に暗号化された S3 オブジェクトを EMR クラスターで処理できます。Amazon S3 クライアント側暗号化が有効になっていると、EMRFS では、AWS KMS のキーまたはユー ザー独自のキー管理システムのキーを使用して暗号化されたオブジェクトの復号がサポートされま す。EMRFS での Amazon S3 クライアント側の暗号化では、AWS KMS またはユーザー独自のキー管 理システムのキーを使用した、EMR クラスターからの出力の再暗号化もサポートされます。 Note EMRFS でのクライアント側暗号化では、有効になっているクラスターから Amazon S3 に書き込まれた出力のみが暗号化されます。クラスター上のローカルファイルシステムと HDFS に書き込まれたデータは、暗号化されません。さらに、Hue は EMRFS を使用しない ため、Hue S3 ファイルブラウザを使用して Amazon S3 に書き込まれたオブジェクトも暗号 化されません。EC2 インスタンスで実行されているアプリケーションで使用できるセキュリ ティ制御の詳細については、ホワイトペーパー「セキュリティプロセスの概要」を参照して ください。 153 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) EMRFS がサポートする Amazon S3 クライアント側の暗号化では、選択した場所に保存されている キーとエンベロープ暗号化と呼ばれるプロセスを使用して、Amazon S3 に保存されているデータの 暗号化と復号を行います。Amazon S3 サーバー側の暗号化とは異なり、Amazon S3 クライアント側 の暗号化での復号と暗号化のアクションは、EMR クラスター上の EMRFS クライアントで実行され ます。暗号化されたオブジェクトは、クラスター上のクライアントによって復号される暗号化形式 で、Amazon S3 から EMR クラスターにストリーミングされます。その後で、クラスターからの出力 が、Amazon S3 に書き込まれる前にクライアントによって暗号化されます。 エンベロープ暗号化プロセスでは、暗号化クライアントによって生成される 1 回限りの対称データ キー(オブジェクトごとに固有のキー)を使用して、データを暗号化します。次に、そのデータキー がマスターキー(AWS KMS または独自のカスタムプロバイダーで保管されている)によって暗号化 され、関連するオブジェクトと共に Amazon S3 に保存されます。クライアント(たとえば、EMRFS クライアントや、後処理用のデータを取得する独自の Amazon S3 暗号化クライアントなど)でデー タを復号するときは、逆の処理が行われます。つまり、暗号化されたデータキーが、Amazon S3 内に あるオブジェクトのメタデータから取得されます。このデータキーはマスターキーを使用して復号さ れ、クライアントではそのデータキーを使用して、オブジェクトデータを復号します。Amazon S3 ク ライアント側の暗号化が有効になっていると、クラスター上の EMRFS クライアントは、Amazon S3 内の暗号化されたオブジェクトや暗号化されていないオブジェクトを読み取ることができます。 EMRFS で Amazon S3 クライアント側暗号化が有効になっている場合、暗号化クライアントの 動作は、指定されているプロバイダーや、復号または暗号化されるオブジェクトのメタデータに よって異なります。Amazon S3 に書き込む前に EMRFS がオブジェクトを暗号化するときは、 暗号化キーを提供するために、クラスター作成時に指定したプロバイダー(AWS KMS やカスタ ムプロバイダーなど)が必ず使用されます。EMRFS が Amazon S3 からオブジェクトを読み取 るとき、オブジェクトメタデータを調べて、データキーの暗号化に使用されるマスターキーの情 報を確認します。AWS KMS キー ID がある場合、EMRFS では、AWS KMS を使用してオブジェ クトの復号を試みます。EncryptionMaterialsDescription インスタンスを含むメタデータがある場 合、EMRFS では、EncryptionMaterialsProvider インスタンスを使用してキーの取得を試みます。プ ロバイダーではこの情報を使用して、使用するキーを判別し、取得します。必要なキーにアクセス できない場合は、例外がスローされ、エラーが発生します。Amazon S3 オブジェクトメタデータに EncryptionMaterialsDescription インスタンスが含まれていない場合、EMRFS では、オブジェクトが 暗号化されていないと見なされます。 EMRFS での Amazon S3 クライアント側の暗号化には、Amazon S3 から読み取るときの復号用のマ スターキーと Amazon S3 に書き込むときの暗号化用のマスターキーを提供する方法が 2 つ用意され ています。 1. 組み込みの AWS KMS プロバイダーでは、AWS KMS で保管されているマスターキーを使用できま す。暗号化に使用するキーを指定しますが、EMRFS では、クラスターにキーへのアクセス権限が ある場合は、復号用に任意の AWS KMS キーを使用できます。ストレージと暗号化キーの使用に対 して、AWS KMS の料金が適用されることに注意してください。 2. カスタム Java クラスを使用して、Amazon S3 の EncryptionMaterialsProvider クラスと Hadoop の Configurable クラスの両方を実装します。EncryptionMaterialsProvider クラスは、暗号化マテリア ルの説明を提供するために使用されます。この説明にはマスターキーの取得方法と取得場所が示さ れています。 Amazon S3 クライアント側での暗号化の詳細については、「クライアント側の暗号化を使用したデー タの保護」を参照してください。Amazon S3 クライアント側の暗号化で AWS SDK for Java を使用す る方法の詳細については、記事「AWS SDK for Java と Amazon S3 でのクライアント側のデータ暗号 化」を参照してください。 AWS KMS でのキーの作成方法と管理方法、および関連する料金については、「AWS KMS のよくあ る質問」と『AWS Key Management Service Developer Guide』を参照してください。 トピック • コンソールで Amazon S3 クライアント側の暗号化を有効にする (p. 155) • SDK または CLI を使用して AWS KMS で保管されているマスターキーを選択する (p. 155) 154 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) • カスタムプロバイダーを使用して Amazon S3 クライアント側暗号化を設定する (p. 156) • Amazon S3 クライアント側暗号化の emrfs-site.xml プロパティ (p. 159) コンソールで Amazon S3 クライアント側の暗号化を有効にする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 コンソールを使用してクライアント側の暗号化を設定するには 1. [Create Cluster] を選択します。 2. [Cluster Configuration] と [Tags] で、該当するそれぞれのフィールドに入力します。 3. [Software Configuration] フィールドで、AMI 3.6.0 以降を選択します。 4. [File System Configuration] セクションの [Encryption] フィールドで、クライアント側の暗号化 の種類として、[S3 client-side encryption with AWS Key Management Service (KMS)] または [S3 client-side encryption with custom encryption materials provider] のどちらかを選択します。 a. [S3 client-side encryption with AWS Key Management Service (KMS)] を選択した場合は、 すでに設定してあるマスターキーのリストからマスターキーのエイリアスを選択します。ま た、別のアカウントに属する AWS KMS マスターキーを使用する権限がある場合は、[Enter a Key ARN] を選択して、そのマスターキーの ARN を入力することができます。EMR クラ スターにインスタンスプロファイルを割り当てている場合は、そのプロファイルに含まれる ロールに、キーを使用するためのアクセス権限があることを確認します。 b. [S3 client-side encryption with custom encryption materials provider] を選択した場合 は、EncryptionMaterialsProvider クラスの完全なクラス名と Amazon S3 の場所を指定しま す。Amazon EMR では、クラスターの作成時に、クラスター内の各ノードにプロバイダーが 自動的にダウンロードされます。 5. [Hardware Configuration]、[Security and Access]、[Bootstrap Actions]、[Steps] で、該当するそれ ぞれのフィールドに入力します。 6. [Create cluster] を選択します。 SDK または CLI を使用して AWS KMS で保管されているマスターキーを選択する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 EMRFS で Amazon S3 クライアント側の暗号化を有効にして、AWS KMS で保管されているキーを指 定するときは、Amazon S3 に書き込むオブジェクトを暗号化するときに Amazon EMR で使用される KeyId 値、キーエイリアス、またはキーの ARN を設定します。復号の場合、EMRFS はオブジェクト を暗号化したキーへのアクセスを試みます。キーは IAM コンソール、AWS CLI、または AWS SDK を 使用して作成します。 EMR クラスターにインスタンスプロファイルを割り当てている場合は、そのプロファイルに含まれ るロールに、キーを使用する権限があることを確認します。AWS KMS の料金は、暗号化または復 号の各アクティビティ中の API 呼び出し、およびキーの保管に対して適用されます。詳細について は、AWS KMS 料金表ページを参照してください。 EMRFS における暗号化で AWS KMS マスターキーを使用するには、次の 3 つの識別子を利用した参 照を使って、マスターキーを指定します。 • KeyId(32 文字の GUID) • KeyId 値にマッピングされたエイリアス(この値には alias/ プレフィックスを含める必要があり ます) 155 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) • キーの完全な ARN(リージョン、アカウント ID、および KeyId を含みます) 次の例の MyKMSKeyId には、この 3 つの値のどれでも使用できます。 aws emr create-cluster --ami-version 3.10.0 --emrfs Encryption=ClientSide,ProviderType=KMS,KMSKeyId=MyKMSKeyId Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 Note 注: Amazon EMR の設定で使用しているアカウントとは異なるアカウントが所有するキーを 使う場合は、AWS KMS マスターキーの ARN を使用する必要があります。 カスタムプロバイダーを使用して Amazon S3 クライアント側暗号化を設定する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS CLI を使用するには、Encryption、ProviderType、CustomProviderClass、および CustomProviderLocation の各引数を emrfs オプションに渡します。 aws emr create-cluster --instance-type m3.xlarge --ami-version 3.11.0 --emrfs \ Encryption=ClientSide,ProviderType=Custom,CustomProviderLocation=s3:// mybucket/myfolder/provider.jar,CustomProviderClass=classname Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 Encryption を ClientSide に設定すると、クライアント側の暗号化が有効になり ます。CustomProviderClass は EncryptionMaterialsProvider オブジェクトの名前で す。CustomProviderLocation はローカルの場所または Amazon S3 の場所であり、Amazon EMR はこの場所から CustomProviderClass をクラスター内の各ノードにコピーして、クラスパスに配 置します。 引数付きのカスタム EncryptionMaterialsProvider 場合によっては、プロバイダーに引数を直接渡す必要があります。そのような場合は、emrfssite.xml を使用して引数を指定する際に、configure-hadoop ブートストラップアクションを利用 できます。 aws emr create-cluster --ami-version 3.10.0 --instance-type m3.xlarge -instance-count 2 \ --emrfs Encryption=ClientSide,CustomProviderLocation=s3://mybucket/myfolder/ myprovider.jar,CustomProviderClass=classname \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/configurehadoop,Args=[-e,myProvider.arg1=value1,-e,myProvider.arg2=value2] 156 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) 次に、CLI で設定を使用します。 SDK を使用するには、最初に、s3get ブートストラップアクションを使用し、Amazon S3 に保存す るカスタム EncryptionMaterialsProvider クラスをクラスター内の各ノードにダウンロードします。次 に、2 つ目のブートストラップアクション configure-hadoop を使用して、emrfs-site.xml ファ イルを設定します。このとき、CSE を有効にして、カスタムプロバイダーの適切な場所を指定しま す。 たとえば、RunJobFlowRequest を使用する AWS SDK for Java では、コードは次のようになります。 <snip> ScriptBootstrapActionConfig s3getConfig = new ScriptBootstrapActionConfig() .withPath("file:/usr/share/aws/emr/scripts/s3get") .withArgs("-s","s3://mybucket/MyCustomEncryptionMaterialsProvider.jar","d","/usr/share/aws/emr/auxlib/"); ScriptBootstrapActionConfig emrfsConfig = new ScriptBootstrapActionConfig() .withPath("file:/usr/share/aws/emr/scripts/configure-hadoop") .withArgs("-e","fs.s3.cse.enabled=true","e","fs.s3.cse.encryptionMaterialsProvider=full.class.name.of.EncryptionMaterialsProvider","e","-e,myProvider.arg1=value1"); BootstrapActionConfig s3get = new BootstrapActionConfig().withScriptBootstrapAction(s3getConfig); BootstrapActionConfig emrfs = new BootstrapActionConfig().withScriptBootstrapAction(emrfsConfig); s3get.setName("s3getBA"); emrfs.setName("emrfsBA"); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Client-side enabled EMRFS") .withAmiVersion("3.11.0") .withLogUri("s3://myLogUri") .withBootstrapActions(s3get,emrfs) .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myEc2Key") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request); </snip> emrfs-site.xml の設定で使用する設定キーの値のリストについて詳しくは、「the section called “Amazon S3 クライアント側暗号化の emrfs-site.xml プロパティ” (p. )」を参照してくださ い。 Amazon S3 EncryptionMaterialsProvider のリファレンス実装 暗号化を実行するために暗号化マテリアルを EncryptionMaterialsProvider クラスから取得す るとき、EMRFS では、2 つのフィールドを使用して必要に応じて materialsDescription 引 数を設定できます。この 2 つのフィールドとは、オブジェクトの Amazon S3 URI とクラ スターの JobFlowId です。EncryptionMaterialsProvider クラスはこれらのフィールドを使 用して暗号化マテリアルを選択的に返すことができます。この動作は emrfs-site.xml で fs.s3.cse.materialsDescription.enabled を true に設定することで有効にできます。たと えば、プロバイダーは、異なる Amazon S3 URI プレフィックスに対して異なるキーを返すことがで きます。最終的に Amazon S3 オブジェクトと共に保存されるのは返された暗号化マテリアルの説 157 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) 明であり、EMRFS によって生成され、プロバイダーに渡される materialsDescription の値ではない ことに注意してください。Amazon S3 オブジェクトを復号するときに、暗号化マテリアルの説明が EncryptionMaterialsProvider クラスに渡されます。この場合も、オブジェクトを復号するために、暗 号化マテリアルの説明に一致するキーが選択的に返されます。 EncryptionMaterialsProvider のリファレンス実装の例を次に示しま す。EMRFSRSAEncryptionMaterialsProvider という別のカスタムプロバイダーを、GitHub から利用 できます。 import import import import import com.amazonaws.services.s3.model.EncryptionMaterials; com.amazonaws.services.s3.model.EncryptionMaterialsProvider; com.amazonaws.services.s3.model.KMSEncryptionMaterials; org.apache.hadoop.conf.Configurable; org.apache.hadoop.conf.Configuration; import java.util.Map; /** * Provides KMSEncryptionMaterials according to Configuration */ public class MyEncryptionMaterialsProviders implements EncryptionMaterialsProvider, Configurable{ private Configuration conf; private String kmsKeyId; private EncryptionMaterials encryptionMaterials; private void init() { this.kmsKeyId = conf.get("my.kms.key.id"); this.encryptionMaterials = new KMSEncryptionMaterials(kmsKeyId); } @Override public void setConf(Configuration conf) { this.conf = conf; init(); } @Override public Configuration getConf() { return this.conf; } @Override public void refresh() { } @Override public EncryptionMaterials getEncryptionMaterials(Map<String, String> materialsDescription) { return this.encryptionMaterials; } @Override public EncryptionMaterials getEncryptionMaterials() { return this.encryptionMaterials; } } 158 Amazon EMR 開発者ガイド EMR ファイルシステム(EMRFS)(オプション) Amazon S3 クライアント側暗号化の emrfs-site.xml プロパティ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 プロパティ デフォルト 値 説明 fs.s3.cse.enabled false true に設定されると、Amazon S3 に保存されたオブジェクトはク ライアント側の暗号化を使用して 暗号化されます。 fs.s3.cse.encryptionMaterialsProvider.uri #### EncryptionMaterialsProvider を含 む JAR のある Amazon S3 URI の場所。この URI を提供する と、Amazon EMR により JAR が クラスター内のすべてのノードに 自動的にダウンロードされます。 fs.s3.cse.encryptionMaterialsProvider #### クライアント側の暗号化で使用さ れる EncryptionMaterialsProvider のクラスパス。 Note AWS KMS に は、com.amazon.ws.emr.hadoop.fs.cse を使用します。 fs.s3.cse.materialsDescription.enabledfalse 有効にすると、オブジェクトの Amazon S3 URI と JobFlowId を 使用して、暗号化されたオブジェ クトの materialsDescription が設 定されます。 fs.s3.cse.kms.keyId EMRFS での暗号化で使用する AWS KMS 暗号化キーの KeyId フィールドの値。 #### Note このプロパティは、キー に関連付けられている ARN およびキーのエイリ アスも受け入れます。 ObjectMetadata Amazon S3 ストレージモード。 デフォルトでは、暗号化情報 の説明はオブジェクトメタデー タに保存されます。インスト ラクションファイルに説明を 保存することもできます。有 効な値は、ObjectMetadata と InstructionFile です。詳細につい ては、「AWS SDK for Java と Amazon S3 でのクライアント側 fs.s3.cse.cryptoStorageMode 159 Amazon EMR 開発者ガイド クラスターのライフサイクル(長 時間稼働または一時的)を選択する プロパティ デフォルト 値 説明 データ暗号化」を参照してくださ い。です。 EMRFS エンドポイントの解決 EMRFS は、Amazon S3 への呼び出しを行うときにクラスターが実行しているリージョンのエンドポ イントに解決されるようになりました。同じリージョンで共存していないクラスターとバケット間の クロスリージョン呼び出しは、失敗する可能性があります。これにより、ローカル化されていない古 い URI を使用するスクリプトや他のアーティファクトに影響する可能性があります。リージョン固 有の Amazon S3 エンドポイントの詳細については、アマゾン ウェブ サービス全般のリファレンスの 「AWS リージョンとエンドポイント」を参照してください。 クラスターのライフサイクル(長時間稼働または 一時的)を選択する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 一時的なプロセスとしてクラスターを実行できます。クラスターを起動したプロセスは入力データを ロードし、データを処理して、出力結果を保存し、自動的にシャットダウンします。これは、定期的 な処理タスクを実行しているクラスターの標準モデルです。クラスターを自動的にシャットダウンす ることで、データの処理に必要な時間に対してのみ課金されます。 クラスター実行の他のモデルは、長時間稼働クラスターです。このモデルでは、クラスターが起動 し、入力データをロードします。そこから、ユーザーは対話的にデータをクエリしたり、クラスター をデータウェアハウスとして使用したり、毎回新しいクラスターにデータをロードするのは非効率的 な大きいデータセットの定期的な処理を実行したりすることができます。このモデルでは、処理する タスクがキューにない場合にもクラスターが持続します。 クラスターを長時間稼働させる場合は、クラスターの起動時に、自動終了を無効にする必要がありま す。これを実行するには、コンソール、AWS CLI、またはプログラムによって、クラスターを起動 します。長時間稼働クラスターで有効にすると便利なもう 1 つのオプションは、終了保護です。こ れは、エラーが発生したときや誤ってクラスターが終了するのを防ぐことができます。詳細について は、「クラスター終了の管理 (p. 481)」を参照してください。 コンソールを使用して、長時間稼働クラスターを起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Go to advanced options] を選択します。 4. [Steps] セクションの [Auto-terminate] フィールドで、[No] を選択します。クラスターは終了され るまで実行します。 クラスターが処理を完了したときは、使用していないクラスターに引き続き料金が発生しないよ うに、クラスターを終了するようにしてください。 5. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 160 Amazon EMR 開発者ガイド 入力データの準備(オプション) AWS CLI を使用して長時間稼働クラスターを起動するには デフォルトでは、AWS CLI を使用して作成したクラスターは長時間稼働します。必要であれ ば、create-cluster サブコマンドを使用するときに、--no-auto-terminate パラメーターをオ プションで指定できます。 • --no-auto-terminate パラメーターを使用して長時間稼働クラスターを起動するには、次のコ マンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.8 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --no-auto-terminate • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.8 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 -no-auto-terminate Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 入力データの準備(オプション) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 大部分のクラスターは入力データを読み込んで、そのデータを処理します。データを読み込むには、 該当するデータが、クラスターでアクセスできる場所に位置し、かつクラスターで処理できる形式に なっている必要があります。最も一般的なシナリオは、入力データを Amazon S3 にアップロードす るというものです。Amazon EMR では、クラスターが Amazon S3 からデータをインポートしたり読 み取ったりするためのツールを提供しています。 Hadoop におけるデフォルトの入力形式はテキストファイルです。ただし、Hadoop をカスタマイズす れば、他の形式で格納されているデータをインポートできます。 トピック • Amazon EMR が受け入れ可能な入力の種類 (p. 162) • Amazon EMR にデータを入れる方法 (p. 162) 161 Amazon EMR 開発者ガイド Amazon EMR が受け入れ可能な入力の種類 Amazon EMR が受け入れ可能な入力の種類 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターのデフォルトの入力形式は、各行が改行(\n)文字で区切られているテキストファイルで す。これは、最もよく使用される入力形式です。 入力データがデフォルトのテキストファイル以外の形式である場合は、Hadoop インターフェイス InputFormat を使用して他の入力の種類を指定できます。カスタムデータの種類を処理するため に、FileInputFormat クラスのサブクラスを作成することもできます。詳細については、「http:// hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/InputFormat.html」を参照してくださ い。 従来の形式(PDF ファイルや Word ファイルなど)で格納されているデータを分析する必要がある場 合には、Informatica の HParser を使用してデータをテキスト形式か XML 形式に変換できます。詳細 については、「HParser でデータを解析する (p. 223)」を参照してください。 Hive を使用している場合は、シリアライザー/デシリアライザー(SerDe)を使用して、所与の形式 のデータを HDFS に読み込むことができます。詳細については、https://cwiki.apache.org/confluence/ display/Hive/SerDeを参照してください。 Amazon EMR にデータを入れる方法 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR では、複数の方法でデータをクラスターに配置することができます。最も一般的な 方法は、Amazon S3 にデータをアップロードし、Amazon EMR の組み込み機能を使用してクラス ターにデータをロードするというものです。また、Hadoop の分散キャッシュ機能を使用して、分 散ファイルシステムからローカルファイルシステムにファイルを転送することもできます。Amazon EMR(バージョン 0.7.1.1 以降)によって提供される Hive の実装には、DynamoDB と Amazon EMR クラスターの間でデータのインポートおよびエクスポートを行う場合に使用できる機能が含まれてい ます。処理する社内データが大量にある場合、AWS Direct Connect サービスが役に立つ場合がありま す。 トピック • Amazon S3 へのデータのアップロード (p. 162) • 分散キャッシュによるファイルのインポート (p. 167) • 圧縮ファイルの処理方法 (p. 172) • DynamoDB データを Hive にインポートする (p. 172) • AWS DirectConnect によるデータへの接続 (p. 172) • AWS Import/Export で大量のデータをアップロードする (p. 172) Amazon S3 へのデータのアップロード このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 オブジェクトを Amazon S3 にアップロードする方法については、『Amazon Simple Storage Service 入門ガイド』の「バケットにオブジェクトを追加」を参照してください。Hadoop で Amazon S3 を使 用することの詳細については、http://wiki.apache.org/hadoop/AmazonS3 を参照してください。 162 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 トピック • Amazon S3 バケットの作成と設定 (p. 163) • Amazon S3 バケット設定に関するベストプラクティスと推奨事項 (p. 164) • Amazon S3 用のマルチパートアップロードを設定する (p. 165) Amazon S3 バケットの作成と設定 Amazon EMR (Amazon EMR) では、Amazon S3 と共に AWS SDK for Java を使用して、入力デー タ、ログファイル、および出力データが格納されます。Amazon S3 は、これらのストレージロケー ションをバケットとして参照します。バケットには、Amazon S3 と DNS の要件に従って一定の制限 と上限があります。詳細については、「Amazon Simple Storage Service 開発者ガイド」の「バケッ トの制約と制限」を参照してください。 このセクションでは、Amazon S3 AWS マネジメントコンソールを使用して、Amazon S3 バケット の権限を作成および設定する方法について説明します。ただし、Amazon S3 API または Curl コマン ドラインツールを使用して、Amazon S3 バケットのアクセス許可を作成および設定することもでき ます。Curl については、「Amazon S3 Authentication Tool for Curl」を参照してください。Amazon S3 API を使用した Amazon S3 バケットの作成と設定については、「Amazon Simple Storage Service API Reference」を参照してください。 コンソールを使用して Amazon S3 バケットを作成するには 1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 2. [Create Bucket] を選択します。 [Create a Bucket] ダイアログボックスが開きます。 3. バケット名を入力します(例: myawsbucket)。 この名前は、グローバルに一意である必要があります。また、他のバケットで使用されている名 前を使用することはできません。 4. バケットの [Region] を選択します。リージョン間の帯域幅に対して料金が発生しないようにする には、クラスターと同じリージョン内に Amazon S3 バケットを作成します。 リージョンの選択に関するガイダンスについては、「AWS リージョンを選択する (p. 32)」を 参照してください。 5. [Create] を選択します。 URI s3n://myawsbucket/ でバケットを作成しました。 Note [Create a Bucket] ウィザードでロギングを有効にした場合、有効になるのはバケットアクセ スログのみです。Amazon EMR クラスターログは有効にはなりません。 Note リージョン固有のバケット指定の詳細については、「バケットとリージョン」(『Amazon Simple Storage Service 開発者ガイド』) および「Available Region Endpoints for the AWS SDKs」を参照してください。 バケットを作成したら、そのバケットに対して適切な権限を設定できます。一般的に、お客様自身 (所有者)には読み書きのアクセスを、認証されたユーザーには読み込みアクセスを付与します。 163 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 コンソールを使用して、Amazon S3 バケットでアクセス許可を設定するには 1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 2. [Buckets] ペインで、作成したバケットを開きます(右クリックします)。 3. [Properties] を選択します。 4. [Properties] ペインで、[Permissions] タブを選択します。 5. [Add more permissions] を選択します。 6. [Grantee] フィールドで、[Authenticated Users] を選択します。 7. [Grantee] ドロップダウンリストの右側で、[List] を選択します。 8. [Save] を選択します。 認証されたユーザーに対して、バケットと制限付き権限を作成しました。 クラスターを作成するには、必要な Amazon S3 バケットが存在していなければなりません。クラス ターで参照される必要なスクリプトまたはデータはすべて、Amazon S3 にアップロードする必要があ ります。次の表では、サンプルデータ、スクリプト、およびログファイルの場所について説明してい ます。 Amazon S3 バケット設定に関するベストプラクティスと推奨事項 EMR クラスターで Amazon S3 バケットを使用するための推奨事項を次に示します。 バージョニングの有効化 バージョニングは、Amazon S3 バケット用の推奨設定です。バージョニングを有効にすると、データ が誤って削除または上書きされても復元できます。詳細については、Amazon Simple Storage Service 開発者ガイドの「バージョニングの使用」を参照してください。 ライフサイクル管理 Amazon S3 ライフサイクル管理を使用すると、オブジェクトのストレージクラスと有効期限を制御す るルールを作成することができます。EMR クラスターコンポーネントでは、AWS SDK for Java を通 じてマルチパートアップロードを使用し、Amazon S3 API を使用して、ログファイルと出力データを Amazon S3 に書き込みます。不完全なマルチパートアップロードが発生しても、Amazon EMR では 自動管理されません。大きなファイルのアップロードでは、Amazon S3 マルチパートアップロードが 不完全になることがあります。マルチパートアップロードを正常に完了できないと、進行中のマルチ パートアップロードによって継続的にバケットが使用され、ストレージ料金が発生します。Amazon EMR で使用するバケットについては、アップロードの開始日から 3 日後に不完全なマルチパートアッ プロードを削除するルールを有効にすることをお勧めします。 バージョニング対応のバケットからオブジェクトを削除すると、削除マーカーが作成されます。オブ ジェクトの以前のバージョンすべてがその後有効期限切れになると、有効期限が切れたオブジェクト の削除マーカー 1 つがバケット内に残ります。これらの削除マーカーに対する料金はかかりません が、期限切れの削除マーカーを削除すると LIST リクエストのパフォーマンスが向上する可能性があ ります。Amazon EMR で使用するバージョニング対応バケットについては期限切れの削除マーカーを 削除するルールを有効にすることをお勧めします。詳細については、Amazon Simple Storage Service コンソールユーザーガイドの「バージョニングが有効なバケットのライフサイクル設定」を参照して ください。 パフォーマンスに関するベストプラクティス EMR クラスターやこれらのクラスターのアプリケーションでは、使い方やワークロードに応じ て、S3 バケットに対する多数のリクエストが発生することがあります。詳細については、Amazon Simple Storage Service 開発者ガイドの「リクエスト率およびリクエストパフォーマンスに関する留 意事項」を参照してください。 164 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 Amazon S3 用のマルチパートアップロードを設定する Important Amazon S3 に格納されたデータについては、お客様の責任でライフサイクルを管理していた だく必要があります。ライフサイクル管理の詳細については、「Amazon S3 バケット設定に 関するベストプラクティスと推奨事項 (p. 164)」を参照してください。 Amazon EMR(Amazon EMR)では、Java 用 AWS SDK によって Amazon S3 マルチパートアップ ロードがサポートされています。マルチパートアップロードを使用すると、単一のオブジェクトを パートのセットとしてアップロードすることができます。これらのオブジェクトパートは、任意の順 序で個別にアップロードできます。いずれかのパートの送信が失敗すると、他のパートに影響を与え ることなくそのパートを再送することができます。オブジェクトのすべてのパートがアップロードさ れたら、Amazon S3 はこれらのパートを組み立ててオブジェクトを作成します。 Amazon S3 マルチパートアップロードの詳細については、『Amazon Simple Storage Service 開発者 ガイド』の「Multipart Upload を使用したオブジェクトのアップロード」を参照してください。 マルチパートアップロードのための Amazon EMR の設定パラメーターを次の表で説明します。 設定パラメーター名 デフォルト値 説明 fs.s3n.multipart.uploads.enabled True マルチパートアップロードを有効にするかど うかを示すブールタイプ。 fs.s3n.ssl.enabled True http と https のどちらを使用するかを示す ブールタイプ。 fs.s3.buckets.create.enabled True この設定では、バケットがない場合に自動 でバケットを作成します。False に設定す ると、このケースで CreateBucket オペレー ションの例外が発生します。 マルチパートアップロードの設定パラメーターは、ブートストラップアクションを使用して変更でき ます。 Amazon EMR コンソールを使用したマルチパートアップロードの無効化 この手順では、Amazon EMR コンソールを使用してマルチパートアップロードを無効にする方法を説 明します。 コンソールを使用してブートストラップアクションでマルチパートアップロードを無効にする には 1. 2. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 [Create cluster] を選択します。 3. [Bootstrap Actions] セクションの [Add bootstrap action] フィールドで、[Configure Hadoop] を選 択し、[Configure and add] をクリックします。 次の情報を入力します。 a. [Optional Arguments] で、デフォルト値を次のように置き換えます。 -c fs.s3n.multipart.uploads.enabled=false b. [Add] をクリックします。 詳細については、「(オプション)追加のソフトウェアをインストールするためのブートスト ラップアクションの作成 (p. 121)」を参照してください。 165 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 4. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 AWS CLI を使用したマルチパートアップロードの無効化 この手順では、AWS CLI を使用してマルチパートアップロードを無効にする方法を説明します。マ ルチパートアップロードを無効にするには、create-cluster コマンドを入力し、--bootstrapaction パラメーターを指定します。 AWS CLI を使用してマルチパートアップロードを無効にするには • マルチパートアップロードを無効にするには、次のコマンドを入力して、myKey を EC2 キーペ アの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Args=["-c","fs.s3n.multipart.uploads.enabled=false"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 -bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/configurehadoop,Args=["-c","fs.s3n.multipart.uploads.enabled=false"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 API を使用したマルチパートアップロードの無効化 Amazon S3 のマルチパートアップロードをプログラムで使用することについては、『Amazon Simple Storage Service 開発者ガイド』の「Java 用 AWS SDK を使用したマルチパートアップロード」を参 照してください。 Java 用 AWS SDK の使用の詳細については、「Java 用 AWS SDK」の詳細ページを参照してくださ い。 166 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 分散キャッシュによるファイルのインポート このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • サポートされているファイルの種類 (p. 167) • キャッシュしたファイルの場所 (p. 167) • ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス (p. 168) • Amazon EMR コンソールを使用した、ストリーミングアプリケーションからのキャッシュした ファイルへのアクセス (p. 168) • AWS CLI を使用した、ストリーミングアプリケーションからのキャッシュしたファイルへのアク セス (p. 169) Distributed Cache は、マップまたはリデュースタスクで共通のデータにアクセスする必要があると きに効率を高められる Hadoop の機能です。クラスターが依存する既存のアプリケーションまたはバ イナリがクラスターの作成時にインストールされていない場合は、分散キャッシュを使用することに よってそれらのファイルをインポートできます。この機能により、クラスターノードは、ファイルを 他のクラスターノードから取得する代わりに、ローカルファイルシステムからインポートされたファ イルを読み取ることができます。 詳細については、「http://hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/ DistributedCache.html」を参照してください。 分散キャッシュは、クラスターの作成時に起動します。ファイルは、Hadoop ジョブが起動さ れる直前にキャッシュされ、ジョブが終わるまでキャッシュ内に置かれます。キャッシュした ファイルは、HDFS や Amazon S3 など、Hadoop 対応のファイルシステムに置くことができま す。ファイルキャッシュのデフォルトサイズは 10 GB です。キャッシュのサイズを変更するに は、local.cache.sizeConfigure Hadoop(オプション)追加のソフトウェアをインストールするた めのブートストラップアクションの作成 (p. 121) パラメーターの設定を変更します。 サポートされているファイルの種類 分散キャッシュは、単一のファイルとアーカイブの両方で可能です。個別のファイルは、読み取り専 用としてキャッシュされます。実行可能ファイルおよびバイナリファイルには、実行許可が設定され ます。 アーカイブは、gzip などのユーティリティを使用して 1 つまたは複数のファイルをパッケージ化し たものです。分散キャッシュは、キャッシングの一部として、圧縮されたファイルを各スレーブノー ドに渡し、アーカイブを解凍します。分散キャッシュは、以下の圧縮形式に対応しています。 • zip • tgz • tar.gz • tar • jar キャッシュしたファイルの場所 分散キャッシュは、ファイルをスレーブノードのみにコピーします。クラスター内にスレーブノード が存在しない場合、分散キャッシュはファイルをマスターノードにコピーします。 167 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 分散キャッシュは、symlink を使用することにより、キャッシュされたファイルをマッパーおよ びリデューサーの現在の作業ディレクトリに関連付けます。symlink はファイルの場所のエイリ アスであり、実際のファイルの場所ではありません。パラメータの値、yarn-site.xml 内の mapred.local.dir が、一時ファイルの場所を指定します。Amazon EMR (Amazon EMR) は、この パラメータを /mnt/var/lib/hadoop/mapred/ または /mnt/mapred に設定するか、インスタンス タイプと EMR バージョンに基づいてバリエーションに設定します。たとえば、インスタンスタイプ に 2 つのエフェメラルボリュームが含まれているため、設定に /mnt/mapred と /mnt1/mapred が 含まれていることがあります。。キャッシュファイルは、一時ファイルが置かれる場所のサブディレ クトリ /mnt/var/lib/hadoop/mapred/taskTracker/archive/ に置かれます。 1 つのファイルだけをキャッシングすると、ファイルは分散キャッシュによって archive ディレクト リに置かれます。アーカイブをキャッシングすると、ファイルは分散キャッシュによって解凍され、 アーカイブファイルと同じ名前で /archive 内にサブディレクトリが作成されます。各ファイルは、 新しいサブディレクトリ内に置かれます。 分散キャッシュは、ストリーミングを使用するときにのみ使用できます。 ストリーミングアプリケーションからのキャッシュしたファイルへのアクセス マッパーリデューサーアプリケーションからキャッシュしたファイルにアクセスするには、現在の作 業ディレクトリ(./)をアプリケーションのパスに追加し、キャッシュしたファイルが現在の作業ディ レクトリにある場合と同じようにしてファイルを参照します。 Amazon EMR コンソールを使用した、ストリーミングアプリケーションから のキャッシュしたファイルへのアクセス Amazon EMR コンソールを使用することにより、分散キャッシュを使用するクラスターを作成できま す。 コンソールを使用して分散キャッシュファイルを指定するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Steps] セクションの [Add step] フィールドで、リストから [Streaming program] を選択し、 [Configure and add] をクリックします。 4. [Arguments] フィールドに、キャッシュに保存するファイルおよびアーカイブを指定し、[Add] を クリックします。 ファイルのサイズ(またはアーカイブに含まれるファイルのサイズの合計)は、割り当てられて いるキャッシュサイズ未満でなければなりません。 目的 アクション 例 個別の ファ イルを 分散 キャッ シュに 追加す る -cacheFile、ファイ ルの名前と場所、ポ ンド記号(#)、およ びファイルをローカル キャッシュに置いたと きに付ける名前を順番 に指定します。 アーカ イブ ファ イルを 分散 –cacheArchive \ cacheArchive、Amazon s3://bucket_name/ S3 でのファイルの archive_name#cache_archive_name 場所、ポンド記号 (#)、およびファイ –cacheFile \ s3://bucket_name/ file_name#cache_file_name 168 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 5. 目的 アクション 例 キャッ シュに 追加す る ルの集合をローカル キャッシュに置いたと きに付ける名前を順番 に入力します。 クラスターの設定と起動に進みます。クラスターでは、キャッシュの場所にファイルをコピーし てから、クラスターステップを処理します。 AWS CLI を使用した、ストリーミングアプリケーションからのキャッシュし たファイルへのアクセス CLI を使用することにより、分散キャッシュを使用するクラスターを作成できます。 AWS CLI を使用して分散キャッシュファイルを指定するには • クラスターの作成時にストリーミングステップを送信するには、create-cluster コマンドを入 力し、--steps パラメーターを指定します。AWS CLI を使用して分散キャッシュファイルを指 定するには、ストリーミングステップを送信するときに適切な引数を指定します。 目的 次のパラメーターをクラスターに追加する 個別のファイルを分散 キャッシュに追加する -cacheFile、ファイルの名前と場所、ポンド記号(#)、および ファイルをローカルキャッシュに置いたときに付ける名前を順番に 指定します。 アーカイブファイルを分 散キャッシュに追加する -cacheArchive、Amazon S3 でのファイルの場所、ポンド記号 (#)、およびファイルの集合をローカルキャッシュに置いたとき に付ける名前を順番に入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 169 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 次のコマンドを入力して、クラスターを起動し、ストリーミングステップを送信します。このコマン Hadoop 2.x の場合は、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 Example 1 ドでは -cacheFile を使用して、Hadoop sample_dataset_cached.dat というファイルをキャッシュに追 Hadoop ストリーミングの構文は 1.x と Hadoop 2.x で異なります。 aws emr create-cluster --name "Test cluster" --ami-version 3.3 -•加します。 Linux、UNIX、Mac OS X ユーザー: applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,\ Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/ my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"] emr ユーザー: create-cluster --name "Test cluster" --ami-version 3.3 • aws Windows --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/ my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","reducer","my_reducer.py,"-input","s3://my_bucket/my_input","output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/ sample_dataset.dat#sample_dataset_cached.dat"] Hadoop 1.x の場合は、次のコマンドを使用し、myKey を EC2 キーペアの名前に置き換えます。 emr create-cluster --name "Test cluster" --ami-version 2.4 -• aws Linux、UNIX、Mac OS X ユーザー: applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,\ Args=["-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3:// my_bucket/my_input","-output","s3://my_bucket/my_output", "cacheFile","s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat"] emr ユーザー: create-cluster --name "Test cluster" --ami-version 2.4 • aws Windows --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["-mapper","my_mapper.py","reducer","my_reducer.py,"-input","s3://my_bucket/my_input","output","s3://my_bucket/my_output", "-cacheFile","s3://my_bucket/ sample_dataset.dat#sample_dataset_cached.dat"] 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスターノー いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ドが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンド Notecreate-cluster サブコマンドを入力します。 ら、 で指定したインスタンスタイプが使用されます。 170 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 Hadoop 2.x の場合は、次のコマンドを使用し、myKey を EC2 キーペアの名前に置き換えます。 次のコマンドでは、ストリーミングクラスターを作成し、 -cacheArchive Hadoop ストリーミングの構文は Hadoop 1.x と Hadoop 2.x で異なります。を使用してファイルの Example 2 1 つキャッシュに追加しています。 アーカイブを emr create-cluster --name "Test cluster" --ami-version 3.3 -• aws Linux、UNIX、Mac OS X ユーザー: applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,\ Args=["--files","s3://my_bucket/my_mapper.py s3://my_bucket/ my_reducer.py","-mapper","my_mapper.py","-reducer","my_reducer.py,"input","s3://my_bucket/my_input","-output","s3://my_bucket/my_output", "cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"] aws emr ユーザー: create-cluster --name "Test cluster" --ami-version 3.3 • Windows --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["--files","s3://my_bucket/ my_mapper.py s3://my_bucket/my_reducer.py","-mapper","my_mapper.py","reducer","my_reducer.py,"-input","s3://my_bucket/my_input","output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/ sample_dataset.tgz#sample_dataset_cached"] Hadoop 1.x の場合は、次のコマンドを使用し、myKey を EC2 キーペアの名前に置き換えます。 aws emr create-cluster --name "Test cluster" --ami-version 2.4 -• Linux、UNIX、Mac OS X ユーザー: applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,\ Args=["-mapper","my_mapper.py","-reducer","my_reducer.py,"-input","s3:// my_bucket/my_input","-output","s3://my_bucket/my_output", "cacheArchive","s3://my_bucket/sample_dataset.tgz#sample_dataset_cached"] aws emr ユーザー: create-cluster --name "Test cluster" --ami-version 2.4 • Windows --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming program",ActionOnFailure=CONTINUE,Args=["-mapper","my_mapper.py","reducer","my_reducer.py,"-input","s3://my_bucket/my_input","output","s3://my_bucket/my_output", "-cacheArchive","s3://my_bucket/ sample_dataset.tgz#sample_dataset_cached"] 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスターノー いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ドが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンド Note ら、create-cluster サブコマンドを入力します。 で指定したインスタンスタイプが使用されます。 171 Amazon EMR 開発者ガイド Amazon EMR にデータを入れる方法 圧縮ファイルの処理方法 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop は、ファイル拡張子をチェックして圧縮ファイルを検出します。Hadoop でサポートされて いる圧縮タイプは、gzip、bzip2、LZO です。これらのタイプの圧縮を使用してファイルを抽出する際 は、追加のアクションは不要です。Hadoop が処理します。 LZO ファイルのインデックスを作成するには、https://github.com/kevinweil/hadoop-lzo からダウン ロード可能な hadoop-lzo ライブラリを使用できます。これはサードパーティのライブラリであるた め、Amazon EMR(Amazon EMR)はこのツールの使用法に関して開発者向けサポートを提供して いないことにご注意ください。使用法については、hadoop-lzo の readme ファイルを参照してくださ い。 DynamoDB データを Hive にインポートする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR によって提供される Hive の実装には、DynamoDB と Amazon EMR クラスターの間で データのインポートおよびエクスポートを行う場合に使用できる機能が含まれています。これは、入 力データが DynamoDB に格納されている場合に役に立ちます。詳細については、「Amazon EMR に よる DynamoDB 内テーブルのエクスポート、インポート、クエリ、結合 (p. 395)」を参照してくだ さい。 AWS DirectConnect によるデータへの接続 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS Direct Connect とは、データセンター、オフィス、またはコロケーション環境から AWS へのプ ライベート専用ネットワーク接続を確立するために使用できるサービスです。大量の入力データがあ る場合は、AWS Direct Connect を使用することにより、ネットワークコストを削減し、帯域幅のス ループットを向上させ、インターネットベースの接続の場合よりも整合性の高いネットワーク操作性 を実現できます。詳細については、「AWS Direct Connect ユーザーガイド」を参照してください。 AWS Import/Export で大量のデータをアップロードする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS Import/Export とは、大量のデータを物理ストレージデバイスから AWS に転送するのに使用 できるサービスです。ポータブルストレージドライブを AWS に郵送すると、AWS Import/Export は、Amazon の高速内部ネットワークを使用してお客様のストレージデバイスからデータを直接転送 します。通常、データの読み込みは、お客様のストレージデバイスが AWS に到着後、翌営業日から 開始されます。データのエクスポートまたはインポートの完了後、ストレージデバイスはお返ししま す。データセットの規模が大きい場合、AWS のデータ転送はインターネット転送の場合よりもかなり 高速であり、お客様の接続性をアップグレードする場合よりも費用効率が高くなります。詳細につい ては、「AWS Import/Export Developer Guide」を参照してください。 172 Amazon EMR 開発者ガイド 出力の場所を準備する(オプション) 出力の場所を準備する(オプション) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR クラスターの最も一般的な出力形式は、圧縮されているか、圧縮されていないテキス トファイルです。一般に、これらは Amazon S3 バケットに書き込まれます。このバケットは、クラ スターを起動する前に作成しておく必要があります。クラスターの起動時に、出力場所として S3 バ ケットを指定します。 詳細については、次のトピックを参照してください。 トピック • Amazon S3 バケットの作成と設定 (p. 173) • Amazon EMR が返すことができる形式 (p. 174) • 所有していない Amazon S3 バケットにデータを書き込む方法 (p. 175) • クラスターの出力を圧縮する (p. 177) Amazon S3 バケットの作成と設定 Amazon EMR(Amazon EMR)は Amazon S3 を使用して入力データ、ログファイル、および出 力データを格納します。Amazon S3 は、これらのストレージロケーションをバケットとして参照 します。バケットには、Amazon S3 と DNS の要件に従って一定の制限と上限があります。詳細 は、Amazon Simple Storage Service Developers Guide の「Bucket Restrictions and Limitations」を参 照してください。 このセクションでは、Amazon S3 AWS マネジメントコンソールを使用して、Amazon S3 バケット の権限を作成および設定する方法について説明します。ただし、Amazon S3 API またはサードパー ティの Curl コマンドラインツールを使用して、Amazon S3 バケットの権限を作成および設定する こともできます。Curl については、「Amazon S3 Authentication Tool for Curl」を参照してくださ い。Amazon S3 API を使用した Amazon S3 バケットの作成と設定については、「Amazon Simple Storage Service API Reference」を参照してください。 コンソールを使用して Amazon S3 バケットを作成するには 1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 2. [Create Bucket] を選択します。 [Create a Bucket] ダイアログボックスが開きます。 3. バケット名を入力します(例: myawsbucket)。 この名前は、グローバルに一意である必要があります。また、他のバケットで使用されている名 前を使用することはできません。 4. バケットの [Region] を選択します。リージョン間の帯域幅に対して料金が発生しないようにする には、クラスターと同じリージョン内に Amazon S3 バケットを作成します。 リージョンの選択に関するガイダンスについては、「AWS リージョンを選択する (p. 32)」を 参照してください。 5. [Create] を選択します。 URI s3n://myawsbucket/ でバケットを作成しました。 173 Amazon EMR 開発者ガイド Amazon EMR が返すことができる形式 Note [Create a Bucket] ウィザードでロギングを有効にした場合、有効になるのはバケットアクセ スログのみです。Amazon EMR クラスターログは有効にはなりません。 Note リージョン固有のバケット指定の詳細については、「Amazon Simple Storage Service Developer Guide」の「バケットとリージョン」および「Available Region Endpoints for the AWS SDKs」を参照してください。 バケットを作成したら、そのバケットに対して適切な権限を設定できます。一般的に、お客様自身 (所有者)には読み書きのアクセスを、認証されたユーザーには読み込みアクセスを付与します。 コンソールを使用して、Amazon S3 バケットでアクセス許可を設定するには 1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 2. [Buckets] ペインで、作成したバケットを開きます(右クリックします)。 3. [Properties] を選択します。 4. [Properties] ペインで、[Permissions] タブを選択します。 5. [Add more permissions] を選択します。 6. 7. 8. [Grantee] フィールドで、[Authenticated Users] を選択します。 [Grantee] ドロップダウンリストの右側で、[List] を選択します。 [Save] を選択します。 認証されたユーザーに対して、バケットと制限付き権限を作成しました。 クラスターを作成するには、必要な Amazon S3 バケットが存在していなければなりません。クラス ターで参照される必要なスクリプトまたはデータはすべて、Amazon S3 にアップロードする必要があ ります。次の表では、サンプルデータ、スクリプト、およびログファイルの場所について説明してい ます。 情報 Amazon S3 におけるサンプルの場所 スクリプトまた はプログラム s3://myawsbucket/script/MapperScript.py ログファイル s3://myawsbucket/logs 入力データ s3://myawsbucket/input 出力データ s3://myawsbucket/output Amazon EMR が返すことができる形式 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターのデフォルトの出力形式は、テキストファイルの個々の行にキー、値のペアが書き込まれ たテキストです。これは、最も良く使われている出力形式です。 出力データをデフォルトのテキストファイル以外の形式で書き込む必要がある場合は、Hadoop イン ターフェイス OutputFormat を使用して、他の出力タイプを指定できます。カスタムデータの種類を 174 Amazon EMR 開発者ガイド 所有していない Amazon S3 バ ケットにデータを書き込む方法 処理するために、FileOutputFormat クラスのサブクラスを作成することもできます。詳細につい ては、http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/OutputFormat.html を参 照してください。 Hive クラスターを起動する場合、シリアライザー/デシリアライザー(SerDe)を使用して、HDFS から指定した形式にデータを出力できます。詳細については、https://cwiki.apache.org/confluence/ display/Hive/SerDeを参照してください。 所有していない Amazon S3 バケットにデータを書 き込む方法 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon Simple Storage Service (Amazon S3) バケットにファイルを書き込むと、デフォルトではお 客様以外はそのファイルを読むことができません。これは、自分専用のバケットにファイルを書き 込むことが前提になっており、このデフォルト設定によってファイルのプライバシーを保護していま す。 そのため、クラスターの実行時に出力を別の AWS ユーザーの Amazon S3 バケットに書き込んで、そ の AWS ユーザーが出力を読み取れるようにするには、次の 2 つのことを実行する必要があります。 • 他の AWS ユーザーが、その Amazon S3 バケットへの書き込み権をお客様に与える。お客様が起動 するクラスターはお客様の AWS 認証情報で実行されるため、起動したすべてのクラスターも、他 の AWS ユーザーのバケットに書き込むことができます。 • 他の AWS ユーザーに対して、お客様またはクラスターが Amazon S3 バケットに書き込むファイル への読み取り許可を与える。この読み取り許可を設定する最も簡単な方法は、Amazon S3 で事前定 義されているアクセスポリシーのセットである既定アクセスコントロールリスト(ACL)を使用す ることです。 他の AWS ユーザーがその Amazon S3 バケットにファイルを書き込む許可をお客様に与える方法につ いては、Amazon Simple Storage Service コンソールユーザーガイドの「バケット許可の編集」を参 照してください。 お客様のクラスターが Amazon S3 へのファイル書き込み時に既定 ACL を使用するようにするには、 クラスター設定オプションの fs.s3.canned.acl として、使用する既製の ACL を設定します。次の 表に、現在定義されている既定 ACL のリストを示します。 既定 ACL 説明 AuthenticatedRead 所有者には Permission.FullControl が、GroupGrantee.AuthenticatedUsers グループに は Permission.Read アクセスが与えられるように指定し ます。 BucketOwnerFullControl バケットの所有者に Permission.FullControl が与えら れるように指定します。バケットの所有者は、オブジェク トの所有者と同じであるとは限りません。 BucketOwnerRead バケットの所有者に Permission.Read が与えられるよう に指定します。バケットの所有者は、オブジェクトの所有 者と同じであるとは限りません。 LogDeliveryWrite アクセスログを作成できるように、所 有者には Permission.FullControl 175 Amazon EMR 開発者ガイド 所有していない Amazon S3 バ ケットにデータを書き込む方法 既定 ACL 説明 が、GroupGrantee.LogDelivery グループには Permission.Write アクセスが与えられるように指定し ます。 Private 所有者に Permission.FullControl が与えられるように 指定します。 PublicRead 所有者には Permission.FullControl が、GroupGrantee.AllUsers グループには Permission.Read アクセスが与えられるように指定しま す。 PublicReadWrite 所有者には Permission.FullControl が、GroupGrantee.AllUsers グループには Permission.Read および Permission.Write アクセス が与えられるように指定します。 クラスターの設定オプションを設定する方法は、実行するクラスターのタイプに応じてさまざまで す。以下の手順では、一般的なケースでオプションを設定する方法を示します。 Hive で既定 ACL を使用してファイルを書き込むには • Hive のコマンドプロンプトで、クラスターが Amazon S3 に書き込むファイルに対して設定 する既定 ACL を fs.s3.canned.acl 設定オプションに設定します。Hive のコマンドプロン プトにアクセスするには、SSH を使用してマスターノード接続し、Hadoop のコマンドプロ ンプトに "Hive" と入力します。詳細については、「SSH を使用してマスターノードに接続す る (p. 459)」を参照してください。 次の例では、fs.s3.canned.acl 設定オプションを BucketOwnerFullControl に設定するこ とにより、Amazon S3 バケットの所有者に対してファイルの完全なコントロールを許可していま す。set コマンドでは大文字と小文字が区別され、引用符やスペースは使用できません。 hive> set fs.s3.canned.acl=BucketOwnerFullControl; create table acl (n int) location 's3://acltestbucket/acl/'; insert overwrite table acl select count(n) from acl; 例の最後の 2 行では、Amazon S3 に格納されるテーブルを作成し、そのテーブルにデータを書き 込みます。 Pig で既定 ACL を使用してファイルを書き込むには • Pig のコマンドプロンプトで、クラスターが Amazon S3 に書き込むファイルに対して設定する既 定 ACL を fs.s3.canned.acl 設定オプションに設定します。Pig のコマンドプロンプトにアク セスするには、SSH を使用してマスターノード接続し、Hadoop のコマンドプロンプトに "Pig" と入力します。詳細については、「SSH を使用してマスターノードに接続する (p. 459)」を参 照してください。 次の例では、fs.s3.canned.acl 設定オプションを BucketOwnerFullControl に設定すること により、Amazon S3 バケットの所有者に対してファイルの完全なコントロールを許可していま す。set コマンドでは、既定 ACL 名の前にスペースを 1 つ挿入し、引用符は使用しません。 176 Amazon EMR 開発者ガイド クラスターの出力を圧縮する pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://acltestbucket/pig/acl'; カスタム JAR で既定 ACL を使用してファイルを書き込むには • -D フラグを指定して Hadoop を使用して、fs.s3.canned.acl 設定オプションを設定します。 これを次の例に示します。 hadoop jar hadoop-examples.jar wordcount -Dfs.s3.canned.acl=BucketOwnerFullControl s3://mybucket/input s3:// mybucket/output クラスターの出力を圧縮する トピック • 出力データ圧縮 (p. 177) • 中間データ圧縮 (p. 178) • Amazon EMR における Snappy ライブラリの使用 (p. 178) 出力データ圧縮 Hadoop ジョブの出力を圧縮します。TextOutputFormat を使用している場合、結果はテキストファイ ルに gzip を実行することによって得られます。SequenceFiles に書き込む場合は、内部的に圧縮され た SequenceFile が結果として得られます。これは、mapred.output.compress を true に設定すること によって有効にできます。 ストリーミングジョブを実行している場合は、そのストリーミングジョブにこれらの引数を渡すこと で有効にできます。 -jobconf mapred.output.compress=true また、ブートストラップアクションを使用することによって自動的にすべてのジョブ出力を圧縮する こともできます。ここでは、Ruby クライアントでこれを行う方法を示します。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hadoop \ --args "-s,mapred.output.compress=true" 最後に、Custom Jar を作成している場合は、ジョブの作成時に次の行を使用して出力圧縮を有効にす ることができます。 FileOutputFormat.setCompressOutput(conf, true); 177 Amazon EMR 開発者ガイド クラスターへのアクセス設定 中間データ圧縮 マッパーからリデューサーに大量のデータを移動するジョブでは、中間圧縮を行うことでパフォーマ ンスが大幅に向上することがあります。マップ出力を圧縮し、スレーブノードに到着したらそれを解 凍します。設定は、mapred.compress.map.output で行います。これは、出力圧縮についても同様に有 効にすることができます。 Custom Jar を作成している場合は、次のコマンドを使用します。 conf.setCompressMapOutput(true); Amazon EMR における Snappy ライブラリの使用 Snappy は高速圧縮/解凍ライブラリです。Amazon EMR AMI バージョン 2.0 以降で使用でき、中間 圧縮用のデフォルトとして使用されています。Snappy の詳細については、http://code.google.com/p/ snappy/ を参照してください。Amazon EMR AMI のバージョンについては、「Amazon マシンイメー ジ(AMI) (p. 56)」を参照してください。 クラスターへのアクセス設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR には、リソースへのアクセスを制御する方法がいくつかあります。 • IAM ユーザーとロール は、ユーザーがアクションを実行できるようにする権限を与えます。 • Amazon EMR サービスロールおよびインスタンスプロファイル は、Amazon EMR が他の AWS の サービスにアクセスする方法を制御します。 • セキュリティグループは、Amazon EMR クラスターインスタンスの仮想ファイアウォールとして機 能し、インバウンドトラフィックとアウトバウンドトラフィックをコントロールします。 • SSHキーによって、ユーザーは、Amazon EMR クラスターのマスターノードに接続することができ ます。 • Hadoop のシステムディレクトリに対する許可によって、「hadoop ユーザー」以外のユーザー は、Amazon EMR クラスターにジョブを送信することができます。 アクセス制御はデータの暗号化と連携して動作します。強固な防御戦略には、両方のコンポーネント が含まれます。データ暗号化の設定の詳細については、Amazon EMR リリース ガイド の データの暗 号化 を参照してください。 トピック • IAM ロールを使用したユーザーアクセス権限の設定 (p. 179) • IAM およびアプリケーションの Amazon EMR ロールを設定する (p. 186) • セキュリティグループを設定する (p. 194) • マスターノードの SSH 認証情報の作成 (p. 202) • システムディレクトリに対する許可の設定 (p. 203) 178 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 IAM ロールを使用したユーザーアクセス権限の設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は IAM ポリシーをサポートします。IAM は、AWS カスタマーがユーザーおよびその ユーザー権限を管理できるウェブサービスです。IAM を使用して、ユーザーベースのポリシーを作成 し、各ユーザーにアタッチできます。ポリシーは、アクセス権限を許可または拒否し、Amazon EMR およびその他の AWS リソースを使用してユーザーが実行できるアクションを決定します。たとえ ば、ユーザーに対し、AWS アカウントで EMR クラスターを表示してそれらを作成または削除しない ことを許可できます。また、EMR クラスターにタグを追加し、そのタグを使用して個々のクラスター のユーザーまたは同じタグを共有しているクラスターのグループに詳細に調整されたアクセス権限を 適用することができます。 IAM は、すべての AWS アカウント所有者であれば誰でも無料で利用できます。IAM へのサインアッ プは不要です。Amazon EMR コンソール、AWS CLI を通じて、またプログラムで Amazon EMR API および AWS SDK を通じて IAM を使用できます。 IAM ポリシーは、最小権限の原則に準拠しています。つまりアクセス権限が許可されるまでユーザー はアクションを実行できないことを意味します。詳細情報については、IAM ユーザーガイド を参照し てください。 トピック • ユーザーベースの IAM ポリシーの Amazon EMR アクション (p. 179) • ユーザーアクセスの管理ポリシーを使用する (p. 180) • クラスタータグを使用した、詳細に設定されたアクセスコントロール (p. 182) ユーザーベースの IAM ポリシーの Amazon EMR アクション Amazon EMR の IAM ユーザーベースのポリシーでは、すべての Amazon EMR アクションに は、小文字の elasticmapreduce 要素が付けられます。ワイルドカード文字 (*) を使用し て、"elasticmapreduce:*" キーを指定し、Amazon EMR に関連するすべてのアクションを指定 するか、たとえば、"elasticmapreduce:Describe*" などのアクションのサブセットを許可す ることができます。たとえば、"elasticmapreduce:DescribeCluster" などの個々の Amazon EMR アクションも明示的に指定できます。すべての Amazon EMR アクションのリストについて は、『Amazon EMR API Reference』で API アクション名を参照してください。Amazon EMR は、Amazon EC2 および Amazon S3 などの他のサービスに依存するため、ユーザーはこれらのサー ビスと同様にアクセス権限のサブセットを許可される必要があります。詳細については、「フルアク セスするため IAM 管理ポリシー (p. 180)」を参照してください。 Note Amazon EMR コンソールに アクセスするには、少なくとも、IAM ユーザーは次のアクション を許可する、アタッチされた IAM ポリシーを持っている必要があります。 elasticmapreduce:ListClusters アクセス権限とポリシーの詳細については、IAM ユーザーガイド の アクセス管理 を参照してくださ い。 Amazon EMR はリソースベースのポリシーおよびリソースレベルのポリシーをサポートしません が、Condition 要素 (Condition ブロックと呼ばれる) を使用して、クラスタータグに基づいた詳細 なアクセス権限を指定できます。詳細については、「クラスタータグを使用した、詳細に設定された アクセスコントロール (p. 182)」を参照してください。Amazon EMR はリソースベースのポリシー 179 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 またはリソースレベルのポリシーをサポートしていないため、Resource 要素には常にワイルドカー ド値を持っています。 ユーザーにアクセス権限を付与する最も簡単な方法は、Amazon EMR の 管理ポリシー を使用するこ とです。また、管理ポリシーは、アクセス権限の条件が変更された場合に、自動的に更新されるとい うメリットを提供します。ポリシーをカスタマイズする必要がある場合は、管理ポリシーから始め、 次に要件に従って、権限および条件をカスタマイズすることをお勧めします。 ユーザーアクセスの管理ポリシーを使用する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 必要な Amazon EMR アクションにフルアクセスまたは読み取り専用アクセスを付与する最も簡単 な方法は、Amazon EMR の IAM 管理ポリシーを使用することです。管理ポリシーは、アクセス権 限の条件が変更された場合に、自動的に更新されるというメリットを提供します。これらのポリ シーには、Amazon EMR のアクションだけでなく、Amazon EMR がインスタンスの起動、ログ ファイルの書き込み、Hadoop ジョブとタスクの管理などのアクションの実行に使用する、Amazon EC2、Amazon S3、および Amazon CloudWatch のアクションが含まれています。カスタムポリシー を作成する必要がある場合は、管理ポリシーから始め、条件にしたがって編集することをお勧めしま す。 IAM ユーザー (プリンシパル) にポリシーをアタッチする方法については、IAM ユーザーガイド の AWS マネジメントコンソール での管理ポリシーの使用を参照してください。 フルアクセスするため IAM 管理ポリシー Amazon EMR の必要なすべてのアクションを付与するには、AmazonElasticMapReduceFullAcesss管 理ポリシー をアタッチします。このポリシーの内容を以下に示します。Amazon EMR がその他の サービスに必要とするすべてのアクションを明らかにします。 Note AmazonElasticMapReduceFullAcesss ポリシーは自動的に更新されるため、次に示すポリ シーは、古くなっている場合もあります。AWS マネジメントコンソール を使用して最新のポ リシーを表示します。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:*", "cloudformation:CreateStack", "cloudformation:DescribeStackEvents", "ec2:AuthorizeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:CancelSpotInstanceRequests", "ec2:CreateRoute", "ec2:CreateSecurityGroup", "ec2:CreateTags", "ec2:DeleteRoute", "ec2:DeleteTags", "ec2:DeleteSecurityGroup", "ec2:DescribeAvailabilityZones", 180 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 "ec2:DescribeAccountAttributes", "ec2:DescribeInstances", "ec2:DescribeKeyPairs", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSpotInstanceRequests", "ec2:DescribeSpotPriceHistory", "ec2:DescribeSubnets", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcs", "ec2:DescribeRouteTables", "ec2:DescribeNetworkAcls", "ec2:CreateVpcEndpoint", "ec2:ModifyImageAttribute", "ec2:ModifyInstanceAttribute", "ec2:RequestSpotInstances", "ec2:RevokeSecurityGroupEgress", "ec2:RunInstances", "ec2:TerminateInstances", "elasticmapreduce:*", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:ListRoles", "iam:PassRole", "kms:List*", "s3:*", "sdb:*", "support:CreateCase", "support:DescribeServices", "support:DescribeSeverityLevels" ], "Resource": "*" } ] } Note ec2:TerminateInstances IAM ユーザーは、アクションを使用することにより、IAM アカ ウントに関連付けられている Amazon EC2 インスタンスであれば、EMR クラスターの一部で なくても終了することができます。 読み取り専用アクセスのための IAM 管理ポリシー Amazon EMR に読み取り専用権限を付与するには、AmazonElasticMapReduceReadOnlyAcesss 管理 ポリシーをアタッチします。このポリシーの内容を以下に示します。elasticmapreduce 要素のワ イルドカード文字は、指定文字列で始まるアクションのみが許可されるように指定します。このポリ シーは明示的にアクションを拒否しないため、別のポリシーステートメントが指定したアクションへ のアクセス許可に使用される場合があることに注意してください。 Note AmazonElasticMapReduceReadOnlyAcesss ポリシーは自動的に更新されるため、次に示すポ リシーは、古くなっている場合もあります。AWS マネジメントコンソール を使用して最新の ポリシーを表示します。 { 181 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "elasticmapreduce:Describe*", "elasticmapreduce:List*", "s3:GetObject", "s3:ListAllMyBuckets", "s3:ListBucket", "sdb:Select", "cloudwatch:GetMetricStatistics" ], "Resource": "*" } ] } クラスタータグを使用した、詳細に設定されたアクセスコント ロール このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次の IAM ユーザーベースポリシーの Amazon EMR 条件コンテキストキーと共に Condition 要素 (Condition ブロックとも呼ばれます) を使用して、クラスタータグに基づいてアクセスを制御するこ とができます。 • elasticmapreduce:ResourceTag/TagKeyString 条件コンテキストキーを使用して、特定のタ グを持つクラスターのユーザーアクションを許可または拒否します。 • アクション/API コールを持つ特定のタグを必要としている elasticmapreduce:RequestTag/ TagKeyString 条件コンテキストキーを使用します。 Important 条件コンテキストキーは、リクエストパラメーターとして ClusterID を承認する Amazon EMR API アクションのみに適用されます。ModifyInstanceGroups アクションは、ClusterID を入力として承認しないため、クラスタータグに基づくこのアクションのアクセス権限を許 可および拒否することはできません。この戦略は認証を設計するときは、この点を考慮して も重要です。 すべての Amazon EMR アクションのリストについては、『Amazon EMR API Reference』で API ア クション名を参照してください。Condition 要素と条件演算子については、IAM ユーザーガイド の IAM ポリシーエレメントの参照 で、特に 文字列条件演算子 を参照してください。EMR クラスターに タグを追加する方法の詳細については、Amazon EMR クラスターにタグを付ける を参照してくださ い。 Amazon EMR ポリシーステートメントの例 次の例では、Amazon EMR 条件コンテキストキーで条件演算子を使用する別のシナリオと方法につい て説明しています。これらの IAM ポリシーステートメントは、デモンストレーションのみを目的とし ており、本稼働環境で使用しないでください。要件に応じて、アクセス権限を付与または拒否するよ うにポリシーステートメントを組み合わせる複数の方法があります。IAM ポリシーの計画およびテス トの詳細については、IAM ユーザーガイド を参照してください。 182 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 特定のタグ値を持っているクラスターでのアクションのみを許可します 次の例では、ユーザーが、department値dev が設定されたクラスター値タグに基づいてアクション を実行し、同じタグが設定されたクラスターにタグ付けすることができるポリシーを示します。最後 のポリシー例では、同じタグ以外では EMR クラスターにタグ付けする権限を拒否する方法について 説明します。 Important アクションをタグ付けするための権限を明示的に拒否することは重要な考慮事項です。これ により、ユーザーが付与する意図のないクラスタータグを介して自身にアクセス権限を付与 することを防ぎます。最後の例で示されているアクションが拒否されていないと、ユーザー は、クラスターに対して選択したタグを追加および削除し、前述のポリシーの意思を回避で きます。 次のポリシーの例では、StringEquals条件付き演算子はdevタグの値department と一致すること を試みます。タグ department がクラスターに追加されていない、または値 dev を含んでいない場 合は、ポリシーは適用されず、このアクションは、ポリシーによって許可されません。アクションを 許可するポリシーステートメントが他にない場合は、ユーザーはこの値を持つこのタグを持っている クラスターとのみ作業できます。 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt14793345241244", "Effect": "Allow", "Action": [ "elasticmapreduce:DescribeCluster", "elasticmapreduce:ListSteps", "elasticmapreduce:TerminateJobFlows ", "elasticmapreduce:SetTerminationProtection ", "elasticmapreduce:ListInstances", "elasticmapreduce:ListInstanceGroups", "elasticmapreduce:ListBootstrapActions", "elasticmapreduce:DescribeStep" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "elasticmapreduce:ResourceTag/department": "dev" } } } ] } 条件付き演算子を使用して複数のタグ値を指定できます。たとえば、department タグに値 dev また は test が含まれるクラスターですべてのアクションを許可するには、以下のように、前術の例のよ うな条件ブロックを置き換えることもできます。 "Condition": { "StringEquals": { 183 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 "elasticmapreduce:ResourceTag/department":["dev", "test"] } } 前述の例のように、次のポリシー例では同じタグの一致を検索します。department タグの値 dev。 ただし、この場合、RequestTag 条件コンテキストのキーにより、ポリシーがタグの作成時に適用さ れるように指定するため、ユーザーは任意の値に一致するタグを作成する必要があります。 { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1479334524000", "Effect": "Allow", "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/department": "dev" } } } ] } 次の例では、タグの追加と削除を許可する EMR アクションは、以前の例で参照した dev タグを 指定する StringNotEquals 演算子と結合します。このポリシーの効果は、dev 値を格納する department タグを使用してタグ付けされる EMR クラスターに任意のタグを追加または削除する ユーザー権限を拒否することにあります。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "elasticmapreduce:AddTags", "elasticmapreduce:RemoveTags" ], "Condition": { "StringNotEquals": { "elasticmapreduce:ResourceTag/department": "dev" } }, "Resource": [ "*" ] } 184 Amazon EMR 開発者ガイド IAM ロールを使用したユーザーアクセス権限の設定 ] } タグ値にかかわらず、特定のタグを持つクラスターでアクションを許可します タグ値にかかわらず、特定のタグを持つクラスターでのみアクションを許可できます。これを行うに は、Null を使用できます。詳細については、IAM ユーザーガイド の 条件キーの有無をチェックす る条件演算子 を参照してください。たとえば、department タグを持つ EMR クラスターでのみアク ションを許可するには、それが含んでいる値にかかわらず、次のいずれかを持つ、前述の例のような 条件ブロックを置き換えることもできます。Null 演算子は EMR クラスターでタグ department の 存在を探します。タグがある場合、このポリシーステートメントに指定された条件に合致し、Null ス テートメントは false と評価され、適切なアクションが許可されます。 "Condition": { "Null": { "elasticmapreduce:ResourceTag/department":"false" } } 次のポリシーステートメントは、クラスターに任意の値を含めることができる department タグ が ある場合のみ、ユーザーに EMR クラスターを作成することを許可します。 { "Version": "2012-10-17", "Statement": [ { "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Condition": { "Null": { "elasticmapreduce:RequestTag/department": "false" } }, "Effect": "Allow", "Resource": [ "*" ] } ] } クラスターの作成時にタグを追加するユーザーを必要とします 次のポリシーステートメントはクラスターに作成されたとき、値 dev を格納する department タグ がある場合に限り、ユーザーはEMRクラスターを作成することができます。 { "Version": "2012-10-17", "Statement": [ { 185 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する "Action": [ "elasticmapreduce:RunJobFlow", "iam:PassRole" ], "Condition": { "StringEquals": { "elasticmapreduce:RequestTag/department": "dev" } }, "Effect": "Allow", "Resource": [ "*" ] } ] } IAM およびアプリケーションの Amazon EMR ロー ルを設定する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 ユーザーの代理としてジョブを実行する際、Amazon EMR や Hadoop などのアプリケーションに、 他の AWS リソースにアクセスする権限が必要となります。これらの権限を付与するには、サービス ロールおよび Amazon EC2 インスタンスプロファイルの 2 つの IAM ロールが必要になります。ほと んどの場合、デフォルトのポリシーで十分対応できますが、ポリシーを変更して、特定の要件に権限 を合わせることもできます。クラスターの作成時、ユーザーはクラスター定義でサービスロールと Amazon EC2 インスタンスプロファイルを特定する必要があります。アクセス許可によって、サー ビスがアクセスできる AWS リソースが判別され、これらのリソースに関連して許可されるサービス が特定されます。サービスロールおよび Amazon EC2 インスタンスプロファイルに付与された権限 は、IAM ユーザーから分離され、AWS 管理者が別個に管理して、クラスターの使用パターンに合わせ て権限ポリシーの詳細を調整できるようになります。 サービスロールは、付与されたアクセス許可に基づいて、実行できる Amazon EMR のアクション を定義します。ユーザーがクラスターにアクセスする際、Amazon EMR はこの IAM ロールを想定 し、想定されたロールの権限を取得して、それらの権限を使用してリクエストを実行しようとしま す。Amazon EC2 インスタンスプロファイルを使用するアプリケーションにも同様のプロセスが発生 します。このプロセスで EC2 インスタンス上で実行するアプリケーションの権限を決定します。たと えば、クラスター上のアプリケーション Hive が Amazon S3 バケットに対して出力を書き込む必要が ある場合、Amazon EC2 インスタンスプロファイルによって、Hive にその権限があるかどうかが判別 されます。 すべてのリージョンのすべてのクラスターに Amazon EMR サービスロールと Amazon EC2 インスタ ンスプロファイルが必要となります。サービスおよび Amazon EC2 ロールの詳細については、IAM ユーザーガイドの「ユースケース: ユーザー、アプリケーション、およびサービスのロール」および 「Amazon EC2 インスタンスで実行されるアプリケーションに対して IAM ロールを使用する」を参照 してください。 Note Amazon EMR で使用するロールをセットアップするユーザーは、管理権限を持つ IAM ユー ザーでなければなりません。すべての管理者が AWS MFA(多要素認証)を使用することをお 勧めします。 186 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する トピック • Amazon EMR のデフォルトの IAM ロール (p. 187) • Amazon EMR の IAM ロールの作成と使用 (p. 187) • IAM ロールでのクラスターの起動 (p. 192) • IAM ロールを AWS サービスディレクトリを呼び出すアプリケーションと使用する (p. 193) Amazon EMR のデフォルトの IAM ロール このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 IAM ロールの使用を簡略化するため、Amazon EMR には事前定義されたロールが 2 つ、デフォルトの 管理ポリシーが 2 つあり、クラスターを作成する際にデフォルトでアタッチできます。 • Amazon EMR サービスロールでは、AmazonElasticMapReduceRole 管理ポリシーに EMR_DefaultRole ロールがアタッチされています。 • Amazon EC2 の Amazon EMR インスタンスプロファイルで は、AmazonElasticMapReduceforEC2Role 管理ポリシーに EMR_EC2_DefaultRole ロールがアタッ チされます。 Note これらのデフォルトのロールに加えて、Amazon EMR とともに自動スケーリングを使用す る場合、この機能は、ユーザーの代理でクラスターを追加または終了する権限を持つ必要が あります。デフォルトロールである EMR_AutoScaling_DefaultRole は、適切なロールポ リシーと信頼ポリシーで設定されており、この目的に使用できます。自動スケーリングはこ の IAM ロールを使用して、ユーザーの代理でノードをスケールします。--auto-scalingrole EMR_AutoScaling_DefaultRole を使用して、このロールを EMR クラスターに追加 する必要があります。--use-default-roles を使用するとき、これは追加されません。詳 細については、「Amazon EMR で自動スケーリングを使用する (p. 485)」を参照してくだ さい。 AWS 管理ポリシーは、サービスが必要とするロールにアタッチするために AWS によって作成およ び管理されるポリシーです。詳細については、IAM ユーザーガイドの「管理ポリシーとインラインポ リシー」を参照してください。Amazon EMR サービスロールと EC2 ロールに関する最新の管理ポリ シーは、IAM マネジメントコンソールの [Policies] タブで確認できます。 Amazon EMR の IAM ロールの作成と使用 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 IAM を作成する方法は 3 つあります。 • Amazon EMR コンソールを使用してデフォルトのロールを作成します。詳細については、 「Amazon EMR コンソールによる IAM ロールの作成と使用 (p. 188)」を参照してください。 • AWS CLI で create-default-roles サブコマンドを使用して、デフォルトのロールを作成しま す。詳細については、「AWS CLI で IAM ロールを作成して使用する (p. 188)」を参照してくださ い。 • IAM コンソールまたは API を使用して、ロールを作成します。詳細については、IAM ユーザーガイ ドの「AWS サービスのロールの作成」を参照してください。 187 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する Note IAM コンソールを使用して Amazon EC2 がプリンシパルとなっているロールを作成する と、ロールを取り込み、EC2 インスタンスに情報を渡すために、IAM では、ロールと同じ 名前を持つインスタンスプロファイルが自動的に作成されます。詳細については、『IAM ユーザーガイド』の「インスタンスプロファイル」を参照してください。 IAM ユーザーを使用し、クラスターのデフォルトのロールを作成する場合、IAM ユーザーには次のア クセス権限が必要になります。 • iam:CreateRole • iam:PutRolePolicy • iam:CreateInstanceProfile • iam:AddRoleToInstanceProfile • iam:ListRoles • iam:GetPolicy • iam:GetInstanceProfile • iam:GetPolicyVersion • iam:AttachRolePolicy • iam:PassRole iam:PassRole アクセス権限では、クラスターを作成できます。残りのアクセス権限では、デフォル トのロールを作成できます。 Amazon EMR コンソールによる IAM ロールの作成と使用 Amazon EMR ロールのリリース後にアカウントが作成された AWS のお客様は、コンソールを使用す るときにすべてのリージョンで Amazon EMR (サービス) ロールと EC2 インスタンスプロファイルを 指定する必要があります。コンソールを使用して、クラスター起動時にデフォルトのロールを作成で きます。また、既に使用している他のロールを指定することもできます。 Note EMR_AutoScaling_DefaultRole はコンソールを使用して作成することはできません。 コンソールで IAM ロールを作成して使用するには 1. 2. https://console.aws.amazon.com/emr/ で Amazon EMR コンソールを開きます。 [Create Cluster] を選択します。 3. [Security and Access] セクションの [IAM Roles] サブセクションにある [Roles configuration] で、 [Default] を選択します。デフォルトのロールが存在しない場合は、自動的に作成されます(適切 なアクセス権限がある場合)。既存のロールがある場合は、クラスターに使用されます。作成さ れたロールは、IAM コンソールに表示されます。 Note クラスターでカスタムロールを使用するには、[Custom] を選択し、リストから既存の ロールを選択します。 AWS CLI で IAM ロールを作成して使用する CLI を使用して、デフォルトの Amazon EMR(サービス)ロールおよび EC2 インスタンスプロファ イルを作成できます。作成されたロールは、IAM コンソールに表示されます。このロールがまだ存 188 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する 在していない場合は、AWS CLI 設定ファイルにもロールが自動的に登録されます。設定ファイル は、Unix、Linux、OS X システムの場合は ~/.aws/config、Windows システムの場合は C:\Users \USERNAME\.aws\config にあります。作成後、クラスターを起動するときに、デフォルトのロールを使 用できます。 AWS CLI で IAM ロールを作成して使用するには AWS CLI を使用してデフォルトのロールを作成するには、create-default-roles サブコマン ドを入力します。クラスターの起動時にデフォルトのロールを使用するには、create-cluster サブコマンドを入力し、--use-default-roles パラメーターを指定します。このコマンドでは EMR_AutoScaling_DefaultRole は作成されません。 1. AWS CLI を使用してデフォルトのロールを作成するには、次のコマンドを入力します。 aws emr create-default-roles コマンドの出力は、デフォルト Amazon EMR ロールである EMR_DefaultRole とデフォルト EC2 インスタンスプロファイルである EMR_EC2_DefaultRole の内容の一覧です。AWS CLI 設 定ファイルでは、service_role および instance_profile の値として、これらのロール名が 登録されます。たとえば、このコマンドの実行後、設定ファイルは次のようになります。 [default] output = json region = us-east-1 aws_access_key_id = myAccessKeyID aws_secret_access_key = mySecretAccessKey emr = service_role = EMR_DefaultRole instance_profile = EMR_EC2_DefaultRole 独自のカスタムロールを使用するようにこのファイルを変更することもできます。そうすると AWS CLI ではそのロールがデフォルトで使用されます。 2. デフォルトのロールが既に存在する場合は、クラスターを起動する際に使用できます。クラ スターを起動するときに既存のデフォルトのロールを使用する場合は、次のコマンドを入力 し、myKey を EC2 キーペアの名前に置き換えます。 Important このコマンドでは EMR_AutoScaling_DefaultRole は追加されません。--autoscaling-role EMR_AutoScaling_DefaultRole オプションを使用して、createcluster コマンドでこのロールを明示的に追加する必要があります。詳細については、 「自動スケーリングの IAM ロールを作成する (p. 486)」を参照してください。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 189 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する Note --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つの マスターノードが起動され、残りのインスタンスはコアノードとして起動されます。す べてのノードで、コマンドで指定したインスタンスタイプが使用されます。 IAM コンソール内のデフォルトの IAM ロールを管理ポリシーにアタッチする デフォルトの IAM ロールをカスタマイズする必要がある場合、デフォルトのロールを作成した後に、 必要に応じてそれらのロールを変更することをおすすめします。さらに、2015 年 6 月 11 日より前に デフォルトロールを作成した場合、デフォルトでは Amazon EMR により管理ポリシーがロールにア タッチされていません。 次の手順に従って、Amazon EMR の IAM ロールを対応するデフォルト管理ポリシーにアタッチしま す。その後、デフォルトの管理ポリシーを表示して、必要に応じてカスタマイズするために編集でき ます。 デフォルトのサービスロールを Amazon EMR の管理ポリシーにアタッチする EMR_DefaultRole は、ロールポリシーと信頼ポリシーから構成されます。最も新しい AmazonElasticMapReduceRole は、IAM コンソールの [Policies] タブで確認できます。 コンソールを使用して EMR_DefaultRole を AmazonElasticMapReduceRole 管理ポリシーに アタッチするには https://console.aws.amazon.com/iam/ で Identity and Access Management (IAM) コンソールにサイン インします。 1. [Policies]、[AmazonElasticMapReduceRole] の順に選択します。 2. [アタッチされたエンティティ] で、[Attach]、[EMR_DefaultRole]、[Attach] の順に選択します。 AWS CLI を使用して EMR_DefaultRole を AmazonElasticMapReduceRole 管理ポリシーにア タッチするには • 次の構文を使用して、既存のデフォルトロールを管理ポリシーにアタッチします。 $ aws iam attach-role-policy --role-name EMR_DefaultRole\ --policy-arn arn:aws:iam::aws:policy/service-role/ AmazonElasticMapReduceRole $ aws iam delete-role-policy --role-name EMR_DefaultRole --policy-name EMR_DefaultRole デフォルトの EC2 インスタンスプロファイルを Amazon EMR の管理ポシリーにアタッチす る デフォルトの EC2 ロールは、ロールポリシーと信頼ポリシーから構成されます。最も新しい AmazonElasticMapReduceforEC2Role は、IAM コンソールの [Policies] タブで確認できます。 コンソールを使用して EMR_EC2_DefaultRole を管理ポリシーにアタッチするには https://console.aws.amazon.com/iam/ で Identity and Access Management (IAM) コンソールにサイン インします。 1. [Policies]、[AmazonElasticMapReduceforEC2Role] の順に選択します。 190 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する 2. [アタッチされたエンティティ] で、[Attach]、[EMR_EC2_DefaultRole]、[Attach] の順に選択しま す。 CLI を使用して EMR_EC2_DefaultRole を管理ポリシーにアタッチするには • 次の AWS CLI 構文を使用して、既存のデフォルトロールを管理ポリシーにアタッチします。 $ aws iam attach-role-policy --role-name EMR_EC2_DefaultRole\ --policy-arn arn:aws:iam::aws:policy/service-role/ AmazonElasticMapReduceforEC2Role $ aws iam delete-role-policy --role-name EMR_EC2_DefaultRole --policy-name EMR_EC2_DefaultRole Amazon EMR のカスタム IAM ロール Amazon EMR により提供されるデフォルトの IAM ロールがニーズを満たさない場合、代わりにカス タムロールを作成できます。たとえば、アプリケーションが Amazon DynamoDB にアクセスしない場 合、カスタム IAM ロールで DynamoDB のアクセス許可を削除できます。 IAM ロールの作成と管理の詳細については、IAM ユーザーガイドガイドの以下のトピックを参照して ください。 • ロールの作成 • ロールの修正 • ロールの削除 Amazon EMR と使用するためにカスタムの IAM ロールを開発する場合、その出発点として管理ポリ シー AmazonElasticMapReduceforEC2Role および AmazonElasticMapReduceRole の権限を使用す ることをおすすめします。その後、これらのデフォルトロールのコンテンツをコピーして新しい IAM ロールを作成し、コピーされた権限に貼り付けて、貼り付けた権限を変更できます。 Amazon EMR で使用するカスタム Amazon EC2 インスタンスプロファイルの例を以下に示します。 この例は、Amazon RDS または DynamoDB を使用しないクラスターの場合です。 Amazon SimpleDB へのアクセスには、コンソール が必要です。クラスターがメトリクスをレポート できるように、CloudWatch へのアクセスが含まれています。メッセージの送信のために、Amazon SNS および Amazon SQS の権限が含まれています。Amazon EMR に最小限必要な Amazon SQS ア クセス権限は、sqs:SendMessage および sqs:QueueExist です。 { "Statement": [ { "Action": [ "cloudwatch:*", "ec2:Describe*", "elasticmapreduce:Describe*", "s3:*", "sdb:*", "sns:*", "sqs:*" ], "Effect": "Allow", "Resource": "*" } ] 191 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する } Important Amazon EMR コンソールまたは CLI を使用するとき、IAM ロールの名前とインスタンスプロ ファイルの名前は完全に一致する必要があります。コンソールでは、[EC2 instance profile] リ ストに IAM ロール名が表示されます。CLI は、この名前をインスタンスプロファイル名と解 釈します。このため、IAM CLI または API を使用して IAM ロールおよび関連付けられたイン スタンスプロファイルを作成する場合、新しい IAM ロールには、関連付けられたインスタン スプロファイルと同じ名前を付けることをおすすめします。IAM コンソールを使用して IAM ロールを作成し、インスタンスプロファイルの名前を指定しないと、デフォルトでは、イン スタンスプロファイルの名前は IAM ロールの名前と同じになります。 場合によっては、関連付けられたインスタンスプロファイルの名前とは異なる名前の IAM ロールを使用する必要があります。このような状況は、AWS CloudFormation を使用して IAM ロールを管理する際に発生する場合があります(AWS CloudFormation では、ロールの 名前にサフィックスを追加してインスタンスプロファイルの名前を作成するため)。この場 合、Amazon EMR API または CLI を使用してインスタンスプロファイル名を指定できます。 コンソールとは異なり、API および CLI はインスタンスプロファイル名を IAM ロール名と解 釈しません。API では、RunJobFlow アクションを呼び出して、JobFlowRole パラメーターに インスタンスプロファイル名を渡すことができます。CLI では、aws emr create-cluster コマンドの --ec2-attributes InstanceProfile オプションでインスタンスプロファイ ル名を指定できます。 IAM ロールでのクラスターの起動 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターを作成する IAM ユーザーには、ロールを取得し、Amazon EMR インスタンスと EC2 イン スタンスにロールを割り当てるためのアクセス許可が必要です。IAM ユーザーがこれらのアクセス許 可を保持していない場合、"User account is not authorized to call EC2" というエラーが表示されます。 「Amazon EMR のデフォルトの IAM ロール (p. 187)」で説明してあるように、デフォルトロールを 作成して、正しいロールを割り当てます。 コンソールを使用して IAM ロールでクラスターを起動するには 1. https://console.aws.amazon.com/emr/ で Amazon EMR コンソールを開きます。 2. 3. [Create cluster] を選択します。 [IAM Roles] で、[Default] または [Custom] を選択します。 a. b. [Default] を選択した場合、オプションで [View policies for default roles] をクリックできま す。 [Custom] を選択した場合、[EMR role] フィールドと [EC2 instance profile] フィールドを使 用して、IAM ロールを指定します。詳細については、Amazon EMR コンソールによる IAM ロールの作成と使用 (p. 188)を参照してください。 AWS CLI を使用して IAM ロールでクラスターを起動するには AWS CLI を使用して、Amazon EMR サービスロールおよび EC2 インスタンスプロファイルを指定 できます。クラスターを起動するときに、create-cluster サブコマンドを入力し、--servicerole および --ec2-attributes InstanceProfile パラメーターを指定します。 • 次のコマンドを入力して、クラスターの起動時に Amazon EMR ロールおよび EC2 イ ンスタンスプロファイルを指定します。この例では、デフォルトの Amazon EMR ロー 192 Amazon EMR 開発者ガイド IAM およびアプリケーション の Amazon EMR ロールを設定する ルである EMR_DefaultRole と、デフォルトの EC2 インスタンスプロファイルである EMR_EC2_DefaultRole を使用します。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 \ --applications Name=Hue Name=Hive Name=Pig \ --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 -applications Name=Hue Name=Hive Name=Pig --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole,KeyName=myKey -instance-type m3.xlarge --instance-count 3 別の方法として、--use-default-roles オプションを使用することもできます。これはデフォ ルトロールが作成済みであることを前提としています。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles \ --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 他に、AWS CLI 設定ファイルにサービスロールとインスタンスプロファイルを設定する方法もあ ります。詳細については、「Amazon EMR の IAM ロールの作成と使用 (p. 187)」を参照してく ださい。 Note --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つの マスターノードが起動され、残りのインスタンスはコアノードとして起動されます。す べてのノードで、コマンドで指定したインスタンスタイプが使用されます。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 IAM ロールを AWS サービスディレクトリを呼び出すアプリ ケーションと使用する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 193 Amazon EMR 開発者ガイド セキュリティグループを設定する クラスターの EC2 インスタンスで実行されるアプリケーションでは、インスタンスプロファイルを使 用して、AWS サービスを呼び出すときに一時的なセキュリティ認証情報を取得できます。 AMI 2.3.0 以降で使用できる Hadoop のバーションは、IAM ロールを利用できるように更新されまし た。アプリケーションが Hadoop アーキテクチャー上で実行され、AWS のどのサービスも直接呼び出 さない場合、変更せずに IAM ロールで動作します。 アプリケーションが AWS のサービスを直接呼び出す場合、IAM ロールを利用するようにアプリケー ションを更新する必要があります。これにより、アプリケーションは、クラスター内にある EC2 イ ンスタンスの /home/hadoop/conf/core-site.xml からアカウント認証情報を取得する代わり に、SDK を利用して IAM ロールを使うリソースにアクセスしたり、EC2 インスタンスメタデータを 呼び出して一時的な認証情報を取得したりすることができます。 SDK を使用して IAM ロールで AWS にアクセスするには • 以下のトピックは、IAM ロールを使用して一時的な認証情報にアクセスするために、いくつかの AWS SDK を使用する方法を示します。各トピックは IAM ロールを使用しないアプリケーション のバージョンから始まり、IAM ロールを使用するためにアプリケーションを変換する処理を説明 します。 • 『AWS SDK for Java Developer Guide』の「SDK for Java で Amazon EC2 インスタンスの IAM ロールを使用する」 • 『AWS SDK for .NET 開発者ガイド』の「SDK for .NET で Amazon EC2 インスタンスの IAM ロールを使用する」 • 『AWS SDK for PHP Developer Guide』の「SDK for PHP で Amazon EC2 インスタンスの IAM ロールを使用する」 • 『AWS SDK for Ruby 開発者ガイド』の「SDK for Ruby で Amazon EC2 インスタンスの IAM ロールを使用する」 EC2 インスタンスメタデータから一時的な認証情報を取得するには • 指定された IAM ロールと連動して実行している EC2 インスタンスから以下の URL を呼び出します。これにより、関連する一時的なセキュリティ認証情報 (AccessKeyId、SecretAccessKey、SessionToken、および Expiration) が返されます。この例で は、Amazon EMR のデフォルトのインスタンスプロファイル EMR_EC2_DefaultRole が使用さ れています。 GET http://169.254.169.254/latest/meta-data/iam/securitycredentials/EMR_EC2_DefaultRole IAM ロールを使用するアプリケーションの作成の詳細については、「Amazon EC2 インスタンスで実 行されるアプリケーションに、AWS リソースへのアクセスを付与する」を参照してください。 一時的なセキュリティ認証情報の詳細については、『一時的なセキュリティ認証情報の使用』ガイド の「一時的なセキュリティ認証情報の使用」を参照してください。 セキュリティグループを設定する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 194 Amazon EMR 開発者ガイド セキュリティグループを設定する セキュリティグループは、EC2 インスタンスの仮想ファイアウォールとして機能し、インバウンドト ラフィックとアウトバウンドトラフィックをコントロールします。セキュリティグループごとに、1 セットのルールがインスタンスへのインバウンドトラフィックをコントロールし、別の 1 セットの ルールがアウトバウンドトラフィックをコントロールします。Amazon EMR では、EC2 インスタン スのセキュリティグループは 2 種類あります。 • マスターインスタンスおよびコア/タスクインスタンスの Amazon EMR マネージドセキュリティ グループ: デフォルトのマスターおよびコア/タスクセキュリティグループ (ElasticMapReducemaster、ElasticMapReduce-slave、ElasticMapReduce-Master-Private、ElasticMapReduce-SlavePrivate、および ElasticMapReduce-ServiceAccess) を選択するか、マスターおよびコア/タスクイン スタンス用に独自のセキュリティグループを指定できます。 • 追加セキュリティグループ: Amazon EMR–マネージドセキュリティグループに加えて、Amazon EC2 インスタンスに適用されるセキュリティグループを指定できます。 セキュリティグループはコンソール、CLI、API、または SDK を使用してクラスターを起動する際に 指定する必要があります。実行中のクラスターのインスタンスを新しいセキュリティグループに割り 当てることはできませんが、既存のセキュリティグループにルールを編集または追加できます。編集 されたルールやセキュリティグループに追加された新しいルールは、ルールが保存された時点で適用 されます。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 セキュ リティグループ」を参照してください。Amazon VPC セキュリティグループの詳細については、 『Amazon VPC ユーザーガイド』の「VPC のセキュリティグループ」を参照してください。 トピック • Amazon EMR–マネージドセキュリティグループ (p. 195) • Amazon EMR 追加セキュリティグループ (p. 200) Amazon EMR–マネージドセキュリティグループ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR クラスターを起動するときは、マスターインスタンスに対して 1 つのAmazon EMR–マ ネージドセキュリティグループを指定する必要があります。1 つはコア/タスク (スレーブ) インスタン ス用のAmazon EMR–マネージドセキュリティグループで、もう 1 つはオプションとしてプライベー トサブネットでクラスターを管理するために使用する Amazon EMR リソースです。コア/タスクイン スタンスは、同じセキュリティグループを共有します。 クラスターリソース用にデフォルトの Amazon EMR–マネージドセキュリティグループを使用する か、マスターおよびコア/タスクインスタンス用の、独自のセキュリティグループを選択できます。独 自のセキュリティグループをデフォルトのグループと組み合わせることはできません。 コンソールを使用してクラスターを起動するときにデフォルトのセキュリティグループが存 在しない場合、Amazon EMR–マネージドセキュリティグループフィールドには「Create ElasticMapReduce-master」および「Create ElasticMapReduce-slave」または「Create ElasticMapReduce-Master-Private」、「Create ElasticMapReduce-Slave-Private」、 および「Create ElasticMapReduce-ServiceAccess」が入力されます。デフォルトのセキュリ ティグループが存在する場合は、フィールドにはデフォルトのセキュリティグループの ID が入力さ れます。たとえば、「Default: sg-01XXXX6a (ElasticMapReduce-master)」と「Default: sg-07XXXX6c (ElasticMapReduce-slave)」です。独自のセキュリティグループを使用する には、一覧から選択します。デフォルトの Amazon EMR–マネージドセキュリティグループのオプ ション詳細については、「Amazon EMR–マネージドセキュリティグループのデフォルトのオプショ ン (p. 197)」を参照してください。 195 Amazon EMR 開発者ガイド セキュリティグループを設定する Amazon EMR-固有のインバウンドおよびアウトバウンドアクセスルールは、Amazon EMR–マネージ ドセキュリティグループに書き込まれ保守されます。デフォルトのセキュリティグループと独自のセ キュリティグループのいずれを選択したかによって、Amazon EMR はインスタンスとクラスターの間 に適切な通信を可能にするために、セキュリティグループのルールを変更します。Amazon EMR–マ ネージドセキュリティグループに書き込まれたルールの詳細については、「Amazon EMR–マネージ ドセキュリティグループのルール (p. 198)」を参照してください。 Amazon EMR–マネージドセキュリティグループのインスタンスメンバーシップを制御する必要があ る場合は、マスターインスタンスおよびコア/タスクインスタンスに独自のセキュリティグループを作 成できます。詳細については、「Amazon VPC ユーザーガイド」の「VPC のセキュリティグループ」 を参照してください。独自のセキュリティグループを作成する場合は、適切な内部クラスター通信に 必要なすべてのインバウンドおよびアウトバウンドルールは、一部の例外を除いてグループに書き込 まれます。 通常、クラスターを分離するために独自の Amazon EMR–マネージドセキュリティグループを作成す るので、相互に通信できません。これは、クラスターごとに別の VPC や AWS アカウントを作成する 必要を軽減します。たとえば、VPC の Amazon EMR クラスターを分離するために、それぞれのクラ スターのマスターノードにセキュリティグループを作成し、それぞれのクラスターのコア/タスクノー ドにセキュリティグループを作成します。クラスターを起動すると、セキュリティグループのルール はそのクラスターのインスタンスのみに適用され、切り離されたクラスターのインスタンスが相互に 通信することを効率的に防止します。 切り離されたクラスターが通信する必要があり、独自のセキュリティグループを使用している場合 は、クラスターのインスタンスが相互に通信するために必要なルールを含む追加のセキュリティグ ループを作成するか、または両方のクラスターに同じセキュリティグループを使用できます。クラ スターを起動する際に追加のセキュリティグループを使用せず、クラスターが異なるセキュリティグ ループを使用している場合は、マスターセキュリティグループおよびコア/タスクセキュリティグルー プのルールセットを変更しない限り、相互に通信することはできません。追加セキュリティグループ の詳細については、「Amazon EMR 追加セキュリティグループ (p. 200)」を参照してください。 コンソールを使用して Amazon EMR–マネージドセキュリティグループを指定するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Security and Access] セクションの [EC2 Security Groups] サブセクションで: • [Master] は、デフォルトのセキュリティグループが存在しない場合、フィールドには「Create ElasticMapReduce-master」または「Create ElasticMapReduce-Master-Private」 が入力されています。デフォルトのセキュリティグループが存在する場合は、フィールド にはデフォルトのセキュリティグループの ID が入力されています。たとえば「Default: sg-01XXXX6a (ElasticMapReduce-master)」です。独自のマスターセキュリティグルー プを指定するには、リストから選択します。 • [Core & Task] は、デフォルトのセキュリティグループが存在しない場合、フィールドには 「Create ElasticMapReduce-slave」または「Create ElasticMapReduce-SlavePrivate」が入力されています。デフォルトのセキュリティグループが存在する場合は、 フィールドにはデフォルトのセキュリティグループの ID が登録されています。たとえば 「Default: sg-07XXXX6c (ElasticMapReduce-slave)」です。独自のコア/タスクセ キュリティグループを指定するには、リストから選択します。 • (オプション) プライベートサブネットのクラスターへの [Service Access] は、デフォルトの セキュリティグループが存在しない場合、フィールドには「Create ElasticMapReduceServiceAccess」が入力されています。デフォルトのセキュリティグループが存在する場合 は、フィールドにはデフォルトのセキュリティグループの ID が入力されています。たとえば 「Default: sg-4dXXXX34 (ElasticMapReduce-ServiceAccess)」です。独自のサービ スアクセスグループを指定するには、リストから選択します。 4. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 196 Amazon EMR 開発者ガイド セキュリティグループを設定する AWS CLI を使用して Amazon EMR–マネージドセキュリティグループを指定するには create-cluster コマンドを --emr-managed-master-security-group パラメーターおよび -emr-managed-slave-security-group パラメーターと共に使用します。 Amazon EMR–マネージドセキュリティグループのデフォルトのオプションを使用している場合は、 追加パラメーターは必要ありません。CLI を使用して通常行うように create-cluster コマンドを使 用します。デフォルトのセキュリティグループが存在しない場合、クラスターが起動される前に作成 されます。存在する場合は、自動的に割り当てられます。 Note Amazon EMR–マネージドセキュリティグループは Amazon EMR CLI ではサポートされてい ません。 1. デフォルトのセキュリティグループオプションを使用してクラスターを起動するには、次のコマ ンドを入力し、myKey を Amazon EC2 キーペアの名前に置き換え、mybucket をバケット名に置 き換えます。 aws emr create-cluster --name "Test cluster" --ami-version 3.10 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 2. 独自のセキュリティグループを使用してクラスターを起動するには、次のコマ ンドを入力し、myKey を Amazon EC2 キーペアの名前に、mybucket をバケッ ト名に、masterSecurityGroupId をマスターセキュリティグループの ID に、slaveSecurityGroupId をコア/タスクセキュリティグループの ID に置き換えます。 • aws emr create-cluster --name "Test cluster" --ami-version 3.10 --applications Name=Hive Name=Pig --ec2-attributes KeyName=myKey,EmrManagedMasterSecurityGroup=sgmasterId,EmrManagedSlaveSecurityGroup=sg-slaveId --instancetype m3.xlarge --instance-count 3 --use-default-roles --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 3. クラスターのセキュリティグループ情報を取得するには、次のコマンドを入力 し、j-1K48XXXXXXHCB をクラスターの ID と置き換えてください。 aws emr describe-cluster --cluster-id j-1K48XXXXXXHCB 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 Amazon EMR–マネージドセキュリティグループのデフォルトのオプション このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 197 Amazon EMR 開発者ガイド セキュリティグループを設定する デフォルトのセキュリティグループを使用して Amazon EMR クラスターを起動する場合は、パ ブリックサブネットに対して 2 つのグループが作成されます。ElasticMapReduce-master および ElasticMapReduce-slave です。プライベートサブネットの場合、3 つのグループが作成されます。 • ElasticMapReduce-Master-Private を作成する • ElasticMapReduce-Slave-Private を作成する • ElasticMapReduce-ServiceAccess を作成する これらのグループに書き込まれるインバウンドおよびアウトバウンドアクセスルールにより、クラス ターのマスターインスタンスおよびコア/タスクインスタンスが適切に通信できるようになります。 また、デフォルトのセキュリティグループを使用して同一 VPC 内の他の Amazon EMR クラスターを 起動する場合は、そのクラスターのインスタンスはその VPC 内の他の Amazon EMR クラスターで同 じセキュリティグループに属するインスタンスと通信できます。 コンソール、API、CLI、または SDK を使用してデフォルトのセキュリティグループでクラスターを 起動できます。デフォルトのセキュリティグループを使用する場合、既存のコードの変更や CLI コマ ンドへのパラメーターの追加は必要ありません。 コンソールを使用してデフォルトのセキュリティグループでクラスターを起動できます。デフォルト のセキュリティグループが存在しない場合、クラスターが起動される前に作成されます。存在する場 合は、自動的に割り当てられます。 Amazon EMR–マネージドセキュリティグループのルール このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションのテーブルは Amazon EMR–マネージドセキュリティグループに追加されたインバウ ンドおよびアウトバウンドのアクセスルールの一覧です。IP アドレス範囲とルールは Amazon EMR– マネージドセキュリティグループに対応して自動的に更新されます。 次のルールが Amazon EMR–マネージドマスターセキュリティグループに追加されます。 タイプ プロ トコ ル ポート 範囲 送信元 詳細 デフォルトの ElasticMapReducemaster セキュリ ティグループ ID または指定のマス ターセキュリティグ ループ ID(たとえ ば、sg-88XXXXed) ElasticMapReduce-master セキュリティグルー プのすべてのインスタンスからのインバウンド トラフィックを許可します。デフォルトでは、 単一の VPC のすべての Amazon EMR クラス ターのマスターノードは、どの TCP、UDP、ま たは ICMP ポートでも相互に通信できます。 デフォルトの ElasticMapReduceslave セキュリティ グループ ID または 指定したコア/タス クセキュリティグ ElasticMapReduce-slave セキュリティグループ のすべてのインスタンスからのインバウンドト ラフィックを許可します。デフォルトでは、マ スターノードは単一の VPC の Amazon EMR ク ラスターのコア/タスクノードからのインバウン インバウンドルール すべての ICMP ICMP すべて すべての TCP TCP すべて すべての UDP UDP すべて すべての ICMP ICMP すべて すべての TCP TCP すべて 198 独自のセキュリティグループを選択する場合 は、グループ内のマスターのインスタンスのみ が、どの TCP、UDP、または ICMP ポートでも 相互に通信できます。 Amazon EMR 開発者ガイド セキュリティグループを設定する タイプ プロ トコ ル ポート 範囲 送信元 詳細 すべての UDP UDP すべて ループ ID(たとえ ば sg-8bXXXXee) ド通信を TCP、UDP、または ICMP ポートで受 け入れます。 独自のコア/タスクセキュリティグループを選択 した場合は、このグループのコア/タスクインス タンスのみが TCP、UDP、または ICMP ポート でマスターノードと通信できます。 HTTPS TCP 8443 さまざまな Amazon IP アドレス範囲 クラスターマネージャに単一の VPC の各 Amazon EMR クラスターのマスターノードと通 信を許可します。 SSH TCP 22 (パ ブリッ クサブ ネット のみ) 0.0.0.0/0 IP アドレスから SSH を経由してマスターノー ドへのインバウンドアクセスを許可します。こ のルールを編集して、個別の IP アドレスまた はアドレス範囲へのアクセスを制限できます。 Note デフォルトのマスターセキュリティ グループから SSH ルールを削除する と、Amazon EMR はこれを置き換えま せん。 独自のマスターセキュリティグループを選択 する場合、インバウンド SSH ルールはルール セットに追加されません。 アウトバウンドルール すべて のトラ フィック すべ て すべて 0.0.0.0/0 ElasticMapReduce-master セキュリティグルー プまたは指定したグループのすべてのインスタ ンスからインターネットへのアウトバウンドア クセスを提供します。 次のルールが Amazon EMR–マネージドコア/タスクセキュリティグループに追加されます。 タイプ プロ トコ ル ポート 範囲 送信元 詳細 インバウンドルール 199 Amazon EMR 開発者ガイド セキュリティグループを設定する タイプ プロ トコ ル ポート 範囲 送信元 詳細 すべての ICMP ICMP すべて すべての TCP TCP すべて すべての UDP UDP すべて デフォルトの ElasticMapReducemaster セキュリ ティグループ ID または指定のマス ターセキュリティグ ループ ID(たとえ ば、sg-88XXXXed) ElasticMapReduce-master セキュリティグルー プまたは指定したグループのすべてのインスタ ンスからのインバウンドアクセスを許可しま す。デフォルトでは、単一の VPC 内のすべて の Amazon EMR クラスターのコア/タスクノー ドは、TCP、UDP、ICMP ポート経由のマス ターノードからのインバウンド通信を受け入れ ます。 独自のマスターセキュリティグループを選択し た場合は、このグループのマスターインスタン スのみが TCP、UDP、または ICMP ポートでコ ア/タスクノードと通信できます。 すべての ICMP ICMP すべて すべての TCP TCP すべて すべての UDP UDP すべて カスタム TCP TCP デフォルトの ElasticMapReduceslave セキュリティ グループ ID または 指定したコア/タス クセキュリティグ ループ ID(たとえ ば sg-8bXXXXee) ElasticMapReduce-slave セキュリティグループ のすべてのインスタンスからのインバウンドト ラフィックを許可します。デフォルトでは、コ ア/タスクノードは単一の VPC の Amazon EMR クラスターの他のコア/タスクノードからのイン バウンド通信を TCP、UDP、または ICMP ポー トで受け入れます。 0.0.0.0/0 ElasticMapReduce-slave セキュリティグループ または指定したグループのすべてのインスタン スからインターネットへのアウトバウンドアク セスを提供します。 独自のコア/タスクセキュリティグループを選択 した場合は、このグループのコア/タスクインス タンスのみが TCP、UDP、または ICMP ポート で相互に通信できます。 8443 アウトバウンドルール すべて のトラ フィック すべ て すべて Amazon EMR 追加セキュリティグループ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 デフォルトのマネージドセキュリティグループまたは独自にカスタムしたマネージドセキュリティグ ループを使用している場合のいずれも、追加のセキュリティグループをクラスターのマスターインス タンスまたはコア/タスクインスタンスに割り当てることができます。追加セキュリティグループを適 用すると、セキュリティグループを変更せずにセキュリティグループに追加ルールを適用できます。 追加セキュリティグループはオプションです。マスターグループ、コア/タスクグループ、または両方 のグループに適用することも、どちらにも適用させないこともできます。また、複数のクラスターに 同じ追加セキュリティグループを適用することができます。 たとえば、独自のマネージドセキュリティグループを使用していて、特定のクラスターのマスターグ ループにインバウンド SSH アクセスを許可する場合、そのルールを含む追加セキュリティグループを 200 Amazon EMR 開発者ガイド セキュリティグループを設定する 作成してクラスターのマスターセキュリティグループに追加できます。追加セキュリティグループは Amazon EMR で変更または保守されません。 一般的に、追加のセキュリティグループは次のように使用されます。 • Amazon EMR–マネージドセキュリティグループには存在しないアクセスルールをクラスターのイ ンスタンスに追加します。 • 特定のクラスターに Amazon Redshift データベースなど特定のリソースへのアクセスを与えます。 デフォルトでは、セキュリティグループは制限されています。これによりすべてのトラフィックが却 下されます。特定のポートのトラフィックをカスタムまたは追加のセキュリティグループに許可す るルールを追加できます。2 つのセキュリティグループで特定のポートに対し同じインスタンスに適 用される複数のルールがある場合、最も制限の緩いルールが適用されます。たとえば、IP アドレス 203.0.113.1 から TCP ポート 22 を経由して SSH に対するアクセスを許可するルールがあり、任意の IP アドレス (0.0.0.0/0) から TCP ポート 22 に対するアクセスを許可する別のルールがある場合、任意 の IP アドレスからのアクセスを許可するルールが優先されます。 マスターセキュリティグループおよびコア/タスクセキュリティグループの両方に、4 つまで追加のセ キュリティグループを適用できます。割り当てられる追加グループの数は、以下に依存します。 • アカウントに割り当てられたセキュリティグループの数 • アカウントに割り当てられる個々のルールの数 VPC セキュリティグループのルール制限の詳細については、『Amazon VPC ユーザーガイド』の 「VPC のセキュリティグループ」を参照してください。マスターセキュリティグループおよびコア/タ スクセキュリティグループの両方に同じ追加セキュリティグループを割り当てることができます。 追加セキュリティグループはコンソール、API、CLI、または SDK を使用して適用できます。 コンソールを使用して追加のセキュリティグループを指定するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Security and Access] セクションの [EC2 Security Groups] サブセクションで: • [Master] で、リストからデフォルトのセキュリティグループまたはカスタムセキュリティグ ループを選択します。 • [Additional security groups] 列で、マスターセキュリティグループに追加する追加グループのア イコンを 4 つまで選択します。 • [Core & Task] で、リストからデフォルトのセキュリティグループまたはカスタムセキュリティ グループを選択します。 • [Additional security groups] 列で、コア/タスクセキュリティグループに追加する追加グループの アイコンを 4 つまで選択します。 Note カスタムとデフォルトのセキュリティグループを組み合わせることはできません。 4. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 AWS CLI を使用して追加セキュリティグループを指定するには create-cluster コマンドを --additional-master-security-groups パラメーターおよび -additional-slave-security-groups パラメーターと共に使用します。追加セキュリティグルー 201 Amazon EMR 開発者ガイド マスターノードの SSH 認証情報の作成 プはオプションです。マスターグループ、コア/タスクグループ、または両方のグループに適用するこ とも、どちらにも適用させないこともできます。 Note Amazon EMR–マネージドセキュリティグループおよび追加のセキュリティグループは Amazon EMR CLI ではサポートされていません。 1. 追加のセキュリティグループを使用してクラスターを起動するには、次のコマンドを入力 し、myKey を Amazon EC2 キーペアの名前に、mybucket をバケット名に、securityGroupId をマスターセキュリティグループ、コア/タスクセキュリティグループ、追加セキュリティグルー プの ID に置き換えます。 aws emr create-cluster --name "Test cluster" -ami-version 3.10 --applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey,EmrManagedMasterSecurityGroup=sgmasterId,EmrManagedSlaveSecurityGroup=sg-slaveId --additionalmaster-security-groups securityGroupId --additional-slave-securitygroups securityGroupId --instance-type m3.xlarge --instance-count 3 aws emr create-cluster --name "Test cluster" --release-label emr-4.2.0 --applications Name=Hue Name=Hive Name=Pig --use-default-roles -ec2-attributes KeyName=myKey,ServiceAccessSecurityGroup=sg-serviceaccessId,EmrManagedMasterSecurityGroup=sgmasterId,EmrManagedSlaveSecurityGroup=sg-slaveId --additionalmaster-security-groups securityGroupId --additional-slave-securitygroups securityGroupId --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 2. クラスターのセキュリティグループ情報を取得するには、次のコマンドを入力 し、j-1K48XXXXXXHCB をクラスターの ID と置き換えてください。 aws emr describe-cluster --cluster-id j-1K48XXXXXXHCB 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 マスターノードの SSH 認証情報の作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EC2 キーペアと PEM ファイルを作成する Amazon EMR は Amazon EC2 キーペアを使用して、お客様が起動するインスタンスに他の誰かがア クセスしないようにセキュリティを確保します。このキーペアに関連付けられている PEM ファイル は、クラスターを実行しているマスターノードに直接 ssh 接続する必要があります。 Amazon EC2 キーペアを作成するには 1. https://console.aws.amazon.com/ec2/) にある Amazon EC2 コンソールを開きます。 202 Amazon EMR 開発者ガイド システムディレクトリに対する許可の設定 2. [Region] で値を選択します。 3. 4. 5. 6. 7. [Navigation] ペインで、Key Pairs を選択します。 [Key Pairs] ページで、[Create Key Pair] を選択します。 [Create Key Pair] ダイアログボックスで、キーペアの名前を入力します (mykeypair など)。 [Create] を選択します。 作成された PEM ファイルを、安全な場所に保存します。 Amazon EC2 キーペアと関連付けられた PEM ファイルが作成されます。 PEM ファイルを変更する Amazon EMR を使用すると、クラスターをインタラクティブに操作し、クラスターステップをテスト したり、クラスター環境のトラブルシューティングを行ったりできます。実行中のクラスターのマス ターノードに直接ログインするには、ssh または PuTTY を使用します。PEM ファイルを使用して、 マスターノードに対して認証を行います。この PEM ファイルは、オペレーティングシステムをサポー トするご利用のツールに基づいて変更する必要があります。CLI を使用して、Linux、UNIX、または Mac OS X のコンピュータに接続します。または PuTTY を使用して、Microsoft Windows コンピュー ターに接続します。Amazon EMR CLI または PuTTY をインストールする方法の詳細については、 「Amazon EMR 入門ガイド」を参照してください。 認証情報ファイルを変更するには • ローカル権限ファイルを作成する: a. Linux、UNIX、または Mac OS X Amazon EC2 キーペアの PEM ファイルで権限を設定します。例えば、ファイルを mykeypair.pem として保存した場合、コマンドは次のようになります。 chmod og-rwx mykeypair.pem b. Microsoft Windows a. PuTTYgen.exe を http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html から コンピュータにダウンロードします。 b. PuTTYgen を起動します。 c. [Load] を選択し、先に作成した PEM ファイルを選択し、[Open] を選択します。 d. キーのインポートが適切に行われたことを示す [PuTTYgen Notice] で [OK] を選択しま す。 e. [Save private key] を選択して、キーを PPK フォーマットで保存します。 f. PuTTYgen パスフレーズなしでキーを保存するよう求めるメッセージが表示されたら、 [Yes] を選択します。 g. PuTTY プライベートキーの名前を入力します(mykeypair.ppk など)。 h. [Save] を選択して PuTTYgen アプリケーションを終了します。 i. PuTTYgen アプリケーションを終了します。 認証情報ファイルは、実行中のクラスターのマスターノードに直接ログインできるよう変更されま す。 システムディレクトリに対する許可の設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 203 Amazon EMR 開発者ガイド ログ記録およびデバッグの作成(オプション) ブートストラップアクションを使用して mapreduce.jobtracker.system.dir.permission 設定 変数を変更することにより、リリースディレクトリに対する許可を設定できます。これは、カスタム 設定を実行していて、"hadoop user" 以外のユーザーが Hadoop にジョブをサブミットする場合に有効 です。 システムディレクトリに対して許可を設定するには • 数値許可コード(8 進表記)を使用してディレクトリに対する許可を設定するブートストラッ プアクションを指定します。次のブートストラップアクションの例は、許可コード 777 に よってユーザー、グループ、ワールドに対してすべての許可を与えています。詳細について は、Wikipedia の Octal notation を参照してください。 s3://elasticmapreduce/bootstrap-actions/configure-hadoop \ --args "-s,mapreduce.jobtracker.system.dir.permission=777" ログ記録およびデバッグの作成(オプション) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターの計画時に決定すべき事項の 1 つは、どの程度のデバッグサポートを必要とするかで す。データ処理アプリケーションを初めて導入するお客様に対しては、小規模で典型的なデータサブ セットを処理するアプリケーションをクラスターでテストすることをお勧めします。これを行う場合 は、Amazon EMR が提供するあらゆるデバッグツール(Amazon S3 へのログファイルのアーカイブ など)を利用する可能性があります。 導入を終了し、データ処理アプリケーションをフル稼働状態に移行させたら、デバッグの規模を縮小 してもかまいません。デバッグの規模を縮小すると、Amazon S3 にログファイルアーカイブを格納 するのにかかるコストを節約できるほか、Amazon S3 への状態の書き込みが必要でなくなるので、ク ラスターでの処理負荷を軽減することができます。もちろん、その反面、何かうまくいかないことが あっても問題を調査するのに使用できるツールは少なくなります。 トピック • デフォルトログファイル (p. 204) • Amazon S3 にログファイルをアーカイブする (p. 205) • デバッグツールを有効にする (p. 207) • デバッグオプション情報 (p. 208) デフォルトログファイル デフォルトで各クラスターはマスターノードにログファイルを書き込みます。その書き込み先は、/ mnt/var/log/ ディレクトリです。書き込まれたログファイルにアクセスするには、SSH を使用して マスターノードに接続します(「SSH を使用してマスターノードに接続する (p. 459)」を参照)。 これらのログファイルはマスターノードに存在しているので、このノードが終了すると(クラスター のシャットダウンまたはエラーの発生が理由で)、ログファイルも利用できなくなります。 何かの設定を有効にしなくても、ログファイルはマスターノードに書き込まれます。これ は、Amazon EMR および Hadoop のデフォルト動作です。 クラスターでは、以下のような数種類のログファイルが生成されます。 204 Amazon EMR 開発者ガイド Amazon S3 にログファイルをアーカイブする • Step logs – これは Amazon EMR サービスによって生成されるログファイルであり、クラスター に関する情報と各ステップの結果を含みます。このログファイルは、マスターノードの /mnt/ var/log/hadoop/steps/ ディレクトリに格納されます。各ステップは個別に番号が振られた サブディレクトリにそれぞれの結果を記録します。すなわち、1 番目のステップの場合は /mnt/ var/log/hadoop/steps/s-stepId1/ に記録され、2 番目のステップの場合は /mnt/var/ log/hadoop/steps/s-stepId2/ に記録される、といった具合です。13 文字のステップ識別子 (stepId1、stepId2 など)は、クラスターに固有です。 • Hadoop ログ – このログは Apache Hadoop によって生成される標準的なログファイルで す。Hadoop ログには、Hadoop のジョブ、タスク、およびタスク試行に関する情報が含まれます。 このログファイルは、マスターノードの /mnt/var/log/hadoop/ ディレクトリに格納されます。 • ブートストラップアクションログ – ブートストラップアクションがジョブで使用された場合に、 その結果がログに記録されます。このログファイルは、マスターノードの /mnt/var/log/bootstrapactions/ ディレクトリに格納されます。各ブートストラップアクションは個別に番号が振られたサ ブディレクトリにそれぞれの結果を記録します。すなわち、1 番目のブートストラップアクション の場合は /mnt/var/log/bootstrap-actions/1/ に記録され、2 番目のブートストラップアク ションの場合は /mnt/var/log/bootstrap-actions/2/ に記録される、といった具合です。 • インスタンス状態ログ – このログは、CPU に関する情報、メモリの状態、およびノードのガー ベッジコレクタースレッドです。ログファイルは、マスターノードの /mnt/var/log/instancestate/ ディレクトリに格納されます。 Amazon S3 にログファイルをアーカイブする Note 現在、yarn logs ユーティリティを使って Amazon S3 にログを集計することはできませ ん。 クラスターを設定することにより、マスターノードに格納されているログファイルを Amazon S3 に 定期的にアーカイブすることができます。こうすれば、クラスターの終了の理由が通常のシャット ダウンまたはエラー発生のいずれであっても、クラスター終了後にログファイルを確実に利用できま す。Amazon EMR は、5 分間隔で、ログファイルを Amazon S3 にアーカイブします。 ログファイルが Amazon S3 にアーカイブされるようにするには、クラスターの起動時に、この機能 を有効にする必要があります。これは、コンソール、CLI または API を使用すれば可能です。デフォ ルトでは、コンソールを使用して起動したクラスターは、ログのアーカイブが有効になってます。CLI または API を使用して起動したクラスターは、Amazon S3 へのログ記録を手動で有効にする必要があ ります。 コンソールを使用して Amazon S3 にログファイルをアーカイブするには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Cluster Configuration] セクションの [Logging] フィールドで、デフォルトのオプション [Enabled] を使用します。 これにより、Amazon EMR が詳細なログデータを Amazon S3 にキャプチャするかどうかが決ま ります。これを設定できるのは、クラスターを作成するときのみです。詳細については、「ログ ファイルを表示する (p. 426)」を参照してください。 4. [Log folder S3 location] フィールドに、ログを格納する Amazon S3 パスを入力(または参照)し ます。コンソールを使用して、Amazon S3 を生成することもできます。バケットに存在しない フォルダの名前を入力した場合、そのフォルダは自動的に作成されます。 この値が設定されると、Amazon EMR はクラスターの EC2 インスタンスからのログファイルを Amazon S3 にコピーします。これにより、クラスターの終了時および クラスターをホストして 205 Amazon EMR 開発者ガイド Amazon S3 にログファイルをアーカイブする いる EC2 が終了してもログファイルが失われるのを回避できます。これらのログは、トラブル シューティングに役立ちます。 詳細については、「ログファイルを表示する (p. 426)」を参照してください。 5. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 AWS CLI を使用して Amazon S3 にログファイルをアーカイブするには AWS CLI を使用して Amazon S3 にログファイルをアーカイブするには、create-cluster コマンド を入力し、--log-uri パラメーターを使用して Amazon S3 ログパスを指定します。 • Amazon S3 にログファイルをアーカイブするには、次のコマンドを入力し、myKey を EC2 キー ペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.8 --log-uri s3://mybucket/logs/ \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.8 --log-uri s3://mybucket/logs/ --applications Name=Hue Name=Hive Name=Pig --usedefault-roles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスターノー ドが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、コマンド で指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 AWS CLI を使用して Amazon S3 にログを集計するには Note 現在、yarn logs ユーティリティを使ってログを集計することはできません。この手順でサ ポートされる集計のみ使用できます。 ログ集計(Hadoop 2.x)では、個々のアプリケーションのすべてのコンテナのログが 1 つのファイル にコンパイルされます。AWS CLI を使用して Amazon S3 へのログの集計を有効にするには、クラス ターの起動時にブートストラップアクションを使用して、ログの集計を有効にし、ログを格納するバ ケットを指定します。 206 Amazon EMR 開発者ガイド デバッグツールを有効にする • ログの集計を有効にするには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換 えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 \ --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="aggregate logs",Args=["-y","yarn.log-aggregationenable=true","-y","yarn.log-aggregation.retain-seconds=-1","y","yarn.log-aggregation.retain-check-interval-seconds=3000","y","yarn.nodemanager.remote-app-log-dir=s3://mybucket/logs"] \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --bootstrap-action Path=s3://elasticmapreduce/ bootstrap-actions/configure-hadoop,Name="aggregate logs",Args=["y","yarn.log-aggregation-enable=true","-y","yarn.log-aggregation.retainseconds=-1","-y","yarn.log-aggregation.retain-check-intervalseconds=3000","-y","yarn.nodemanager.remote-app-log-dir=s3://mybucket/ logs"] --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 デバッグツールを有効にする デバッグツールは、コンソールからログファイルを参照するのに使用できるグラフィカルユーザーイ ンターフェイスです。クラスターでデバッグを有効にすると、Amazon EMR によってログファイルが Amazon S3 にアーカイブされ、そのログファイルにインデックスが付けられます。これで、グラフィ カルユーザーインターフェイスを使用して、クラスター関するステップ、ジョブ、タスク、およびタ スク試行のログを参照できます。 グラフィカルデバッグツールを使用できるようにするには、クラスターを起動するときにデバッグを 有効にする必要があります。これは、コンソール、CLI または API を使用すれば可能です。 Amazon EMR コンソールを使用してデバッグツールを有効にするには 1. 2. 3. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 [Create cluster] を選択します。 [Cluster Configuration] セクションの [Logging] フィールドで、[Enabled] を選択します。ログ記録 を有効にしなければ、デバッグを有効にすることはできません。 207 Amazon EMR 開発者ガイド デバッグオプション情報 4. [Log folder S3 location] フィールドに、ログを格納する Amazon S3 パスを入力します。 5. [Debugging] フィールドで [Enabled] を選択します。 デバッグオプションにより Amazon SQS 交換が作成され、Amazon EMR サービスバックエンド にデバッグのメッセージが発行されます。交換にメッセージを発行する際、料金が発生する場合 があります。詳細については、「https://aws.amazon.com/sqs」を参照してください。 6. 「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、クラスターの作成に進 みます。 AWS CLI を使用してデバッグツールを有効にするには AWS CLI を使用してデバッグを有効にするには、create-cluster サブコマンドを入力し、-enable-debugging パラメーターを指定します。デバッグを有効にするには、--log-uri パラメー ターも指定する必要があります。 • AWS CLI を使用してデバッグを有効にするには、次のコマンドを入力し、myKey を EC2 キーペ アの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 --log-uri s3://mybucket/logs/ \ --enable-debugging --applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 --loguri s3://mybucket/logs/ --enable-debugging --applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 デバッグオプション情報 以下の AMI は、すべてのリージョンでデバッグのサポートを開始します。 • AMI 3.9 • AMI 2.4.11 208 Amazon EMR 開発者ガイド クラスターの Amazon VPC サブネットを選択する Amazon EMR により Amazon SQS キューが作成され、デバッグデータが処理されます。メッセージ 料金が発生する場合があります。ただし、Amazon SQS で使用できるリクエストには、1,000,000 件 までの無料利用枠があります。詳細情報については、Amazon SQS 詳細ページを参照してください。 デバッグにはロールの使用が必要です。サービスロールおよびインスタンスプロファイルですべて の Amazon SQS API 操作ができるようになっている必要があります。Amazon EMR 管理ポリシー にロールがアタッチされている場合、ロールに対する変更は必要ありません。カスタムロールの場 合、sqs:* アクセス権限を与える必要があります。詳細については、「IAM およびアプリケーション の Amazon EMR ロールを設定する (p. 186)」を参照してください。 クラスターの Amazon VPC サブネットを選択す る このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon Virtual Private Cloud (Amazon VPC) を使用すると、AWS 内の分離した領域である Virtual Private Cloud (VPC) をプロビジョニングして、仮想ネットワークを設定し、プライベート IP アドレ スの範囲、サブネット、ルーティングテーブル、ネットワークゲートウェイなどの側面を制御できま す。 VPC 内でクラスターを起動する理由は以下のとおりです。 • 機密データを処理する VPC 内でクラスターを起動することは、ルーティングテーブルや、ネットワークにアクセスできる ユーザーを定義するネットワーク ACL などの追加的なツールを備えたプライベートネットワーク 内でクラスターを起動することに似ています。クラスターで機密データを処理する場合は、VPC 内 でクラスターを起動することで得られる追加のアクセスコントロールが必要になる可能性がありま す。さらに、これらのリソースを、いずれのリソースも直接的なインターネット接続を持たないプ ライベートサブネット内で起動することもできます。 • 内部ネットワーク上のリソースにアクセスする データソースがプライベートネットワーク内に存在する場合、そのデータを Amazon EMR にイン ポートするために AWS にアップロードすることは、転送するデータの量またはデータの機密性の 理由で、実用的でない、または望ましくないことがあります。代わりにクラスターを VPC 内で起 動し、VPN 接続によってデータセンターと VPC を接続すると、クラスターは内部ネットワーク上 のリソースにアクセスすることができます。たとえば、データセンターに Oracle データベースが ある場合、クラスターを VPN でネットワークに接続した VPC 内で起動すると、クラスターはその Oracle データベースにアクセスできます。 パブリックサブネットおよびプライベートサブネット パブリックおよびプライベート VPC サブネットの両方で EMR クラスターを起動できます。つま り、EMR クラスターを実行するためにインターネット接続は必要ありません。ただし、VPC 外 部のサービスまたはリソースにアクセスするには、ネットワークアドレス変換 (NAT) および VPC ゲートウェイの設定が必要になる場合があります。たとえば、企業イントラネット内や、AWS Key Management Service などのパブリック AWS サービスエンドポイントです。 Important Amazon EMR は、リリース 4.2 以降のプライベートサブネットでのクラスターの起動のみを サポートします。EMR のプライベートサブネットの詳細については、「Amazon EMR 管理ガ イド」を参照してください。 209 Amazon EMR 開発者ガイド VPC のクラスター Amazon VPC の詳細については、Amazon VPC ユーザーガイド を参照してください。 トピック • VPC のクラスター (p. 210) • クラスターをホストするために VPC をセットアップする (p. 212) • VPC 内でクラスターを起動する (p. 214) • IAM を使用して VPC へのアクセス許可を制限する (p. 216) • プライベートサブネット用の Amazon S3 の最小ポリシー (p. 216) • 詳細はこちら (p. 217) VPC のクラスター お客様がクラスターの EC2 インスタンスを起動できる、EC2-Classic または EC2-VPC の 2 つのプ ラットフォームがあります。EC2-Classic では、お客様のインスタンスは他のユーザー様と共有する 単一のフラットネットワーク内で稼働します。EC2--VPC では、お客様のインスタンスはご自分の AWS アカウントから論理的に独立した VPC 内で稼働します。お客様の AWS アカウントは、リー ジョンに基づいて EC2-Classic または EC2-VPC のプラットフォームのいずれか、あるいは EC2-VPC のプラットフォーム限定でクラスターを起動できます。EC2-VPC の詳細については、Amazon Virtual Private Cloud (Amazon VPC) を参照してください。 VPC 内で EMR クラスターを起動する場合は、パブリックサブネットまたはプライベートサブネット 内で起動できます。クラスター用に選択するサブネットのタイプによって、設定に重要な違いが少し あります。 パブリックサブネット パブリックサブネットの EMR クラスターでは、接続されているインターネットゲートウェイが必要 です。これは、Amazon EMR クラスターは AWS サービスおよび Amazon EMR にアクセスする必要 があるためです。Amazon S3 などのサービスが、VPC エンドポイントを作成する機能を提供してい る場合、インターネットゲートウェイを通してパブリックエンドポイントにアクセスする代わりに、 エンドポイントを使用してこれらのサービスにアクセスできます。また、Amazon EMR はネットワー クアドレス変換 (NAT) デバイスを通じてパブリックサブネットのクラスターと通信することはできま せん。この目的にはインターネットゲートウェイが必要ですが、より複雑なシナリオでは、他のトラ フィックに対して NAT インスタンスまたはゲートウェイを引き続き使用できます。 インターネットゲートウェイへの接続を避けたいその他の AWS リソースがある場合は、VPC 内に作 成したプライベートサブネットでそのコンポーネントを起動できます。 パブリックサブネットで実行中のクラスターは、ElasticMapReduce-master と ElasticMapReduceslave という 2 つのセキュリティグループを使用します。これらはそれぞれ、マスターインスタンス グループとスレーブインスタンスグループへのアクセスを制御します。 パブリックサブネットのセキュリティグループ セキュリティグループ 名 説明 インバウンドポートを 開きます アウトバウンドポート を開きます ElasticMapReducemaster パブリックサブネッ トのクラスターのマ スターインスタンスグ ループのセキュリティ グループ。 TCP すべて 0-65535 8443 22 210 Amazon EMR 開発者ガイド VPC のクラスター セキュリティグループ 名 説明 インバウンドポートを 開きます アウトバウンドポート を開きます UDP 0-65535 ElasticMapReduceslave パブリックサブネット のクラスターのスレー ブインスタンスグルー プ (コアノードとタス クノードを含む) のセ キュリティグループ。 TCP すべて 0-65535 UDP 0-65535 マスターインスタンスグループにはマスターノードが含まれ、スレーブグループにはクラスターのタ スクノードとコアノードの両方が含まれます。クラスターのすべてのインスタンスは、VPC エンドポ イントまたはインターネットゲートウェイを通じて Amazon S3 に接続します。現在 VPC エンドポイ ントをサポートしていない他の AWS サービスは、インターネットゲートウェイのみを使用します。 次の図は、パブリックサブネットを使用して Amazon EMR クラスターが VPC でどのように実行され るかを示しています。クラスターはインターネットゲートウェイを介して、Amazon S3 バケットな ど、他の AWS リソースに接続できます。 次の図は、VPC のクラスターが Oracle データベースなど、ご自身のネットワーク上のリソースにア クセスできるように VPC をセットアップする方法を示します。 211 Amazon EMR 開発者ガイド クラスターをホストするために VPC をセットアップする クラスターをホストするために VPC をセットアッ プする VPC でクラスターを起動する前に、VPC とサブネットを作成する必要があります。パブリックサブ ネットでは、インターネットゲートウェイを作成し、それをサブネットにアタッチする必要がありま す。以下の手順は、Amazon EMR クラスターをホストできる VPC を作成する方法を示しています。 Amazon EMR クラスターを実行する サブネットを作成するには 1. https://console.aws.amazon.com/vpc/にある Amazon VPC コンソールを開きます。 2. ナビゲーションバーで、クラスターを実行するリージョンを選択します。 3. [Start VPC Wizard] を選択します。 4. 以下のオプションから 1 つを選んで VPC 設定を選択します。 • [VPC with a Single Public Subnet] — クラスターで使用するデータがインターネットで利用可能 な場合は (たとえば、Amazon S3 または Amazon RDS)、このオプションを選択します。 5. VPC の設定を確認します。図は、単一のパブリックシナリオおよびプライベートシナリオとパブ リックシナリオの両方を示しています。 212 Amazon EMR 開発者ガイド クラスターをホストするために VPC をセットアップする • Amazon EMR と連携するには、パブリックサブネットを持つ VPC には、インターネットゲー トウェイとサブネットの両方が必要です。 • VPC にプライベート IP アドレスを使用し、適切な DNS ホスト名に解決されるようにします。 適切な DNS ホスト名に解決されなければ、Amazon EMR クラスターに障害が発生する場合が あります。これには次の IP アドレス範囲が含まれています。 • 10.0.0.0 – 10.255.255.255 • 172.16.0.0 – 172.31.255.255 • 192.168.0.0 – 192.168.255.255 • [Use a NAT instance instead] を選択し、必要に応じてオプションを選択します。 • オプションで、[Add endpoints for S3 to your subnets] を選択します。 • [Enable DNS hostnames] チェックボックスがオンになっていることを確認します。VPC を作 成するときは DNS ホスト名を有効にすることもできます。DNS ホスト名の設定を変更するに は、VPC の一覧からご自身の VPC を選択して、詳細ペインで [Edit] を選択します。ドメイン 名を含まない DNS エントリを作成するには、[DHCP Options Set] の値を作成して、VPC に関 連付ける必要があります。DNS オプションセットを作成した後にコンソールを使用してドメイ ン名を編集することはできません。 詳細については、「Using DNS with Your VPC」を参照してください。 • Hadoop と関連アプリケーションでは、ノードの完全修飾ドメイン名(FQDN)を解決できるよ うにすることを推奨します。DNS を適切に解決するには、パラメーターが以下の値に設定され ている DHCP オプション設定を含む VPC を設定します。 • domain-name = ec2.internal リージョンが 米国東部(バージニア北部) である場合は、ec2.internal を使用します。 その他のリージョンについては、region-name.compute.internal を使用します。たと えば、us-west-2 では、us-west-2.compute.internal を使用します。AWS GovCloud (US) リージョンでは、us-gov-west-1.compute.internal を使用します。 • domain-name-servers = AmazonProvidedDNS 213 Amazon EMR 開発者ガイド VPC 内でクラスターを起動する 詳細については、「Amazon VPC ユーザーガイド」の「DHCP オプションセット」を参照して ください。 6. [VPC の作成] を選択します。NAT インスタンスを作成している場合、この完了には数分かかる場 合があります。 VPC を作成した後は、[Subnets] ページに移動して、VPC のサブネットの 1 つの識別子を書き留めて ください。EMR クラスターを VPC 内で起動するときに、この情報を使用します。 VPC 内でクラスターを起動する Amazon EMR クラスターをホストするように設定されたサブネットが作成されたら、クラスターの作 成時に関連するサブネット ID を指定して、そのサブネットでクラスターを起動します。 Note Amazon EMR は、リリースバージョン 4.2 以降のプライベートサブネットをサポートしま す。EMR のプライベートサブネットの詳細については、「Amazon EMR 管理ガイド」を参照 してください。 クラスターが起動された場合、Amazon EMR はクラスターが VPC プライベートサブネットまたはパ ブリックサブネット内で起動しているかどうかに基づいて、セキュリティグループを追加します。す べてのセキュリティグループはポート 8443 で進入し、Amazon EMR サービスと通信しますが、IP ア ドレスの範囲はパブリックサブネットとプライベートサブネットとで異なります。Amazon EMR はこ れらのすべてのセキュリティグループを管理し、時間の経過とともに AWS 範囲への IP アドレスの追 加が必要になる場合があります。 パブリックサブネットで、Amazon EMR はスレーブインスタンスグループおよびマスターインスタ ンスグループ用に、それぞれ ElasticMapReduce-slave および ElasticMapReduce-master を作成しま す。デフォルトでは、ElasticMapReduce-master セキュリティグループにより、インバウンド SSH 接 続が可能になりますが、ElasticMapReduce-slave グループでは可能になりません。マスターセキュリ ティグループとスレーブセキュリティグループの両方で、AWS パブリック IP 範囲からポート 8443 でインバウンドトラフィックが許可されます。スレーブ (コアおよびタスク) ノードに対して SSH ア クセスが必要な場合は、ElasticMapReduce-slave セキュリティグループにルールを追加したり、SSH エージェント転送を使用したりできます。 プライベートサブネットでのクラスターの起動時に、その他のセキュリティグループとその ルールが必要になります。これにより、サービスでリソースがプライベートなときにそれらのリ ソースを引き続き管理できます。追加のセキュリティグループは、ElasticMapReduce-MasterPrivate、ElasticMapReduce-Slave-Private です。ENI のセキュリティグループは、ElasticMapReduceServiceAccess の形式です。ポート 8443 のインバウンドトラフィックは、Amazon EMR ウェブサー ビスへの接続を許可するため開かれています。ポート 80 と 443 のアウトバウンドトラフィックを許 可し、クラスターがサービスと通信できるようにします。さらに、ネットワーク ACL でインバウンド ポートおよび出力一時ポートが開いている必要があります。 セキュリティグループのルールの変更の詳細については、『Linux インスタンス用 Amazon EC2 ユー ザーガイド』の「セキュリティグループへのルールの追加」を参照してください。VPC でのインスタ ンスへの接続の詳細については、「プライベート Amazon VPC で実行中の Linux インスタンスに安全 に接続する」を参照してください。 Amazon EMR は VPC 上のクラスターを管理するためのネットワークデバイスをマスターノードに アタッチし、このデバイスを通じて管理を行います。このデバイスは、Amazon EC2 API アクショ ンDescribeInstancesを使用して確認できます。このデバイスをいずれかの方法で変更すると、ク ラスターに障害が発生する可能性があります。 Amazon EMR コンソールを使用して VPC 内でクラスターを起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 214 Amazon EMR 開発者ガイド VPC 内でクラスターを起動する 2. [Create cluster] を選択します。 3. [Hardware Configuration] セクションの [Network] で、以前に作成した VPC ネットワークの ID を 選択します。 4. [EC2 Subnet] で、以前に作成したサブネットの ID を選択します。 a. プライベートサブネットが NAT インスタンスと S3 エンドポイントオプションで正しく設定 されている場合、サブネット名と ID の上に [(EMR Ready)] と表示されます。 b. プライベートサブネットに NAT インスタンスまたは S3 エンドポイント (またはその両方) がない場合、[Add S3 endpoint and NAT instance]、[Add S3 endpoint]、または [Add NAT instance] を選択してこれを設定できます。NAT インスタンスおよび S3 エンドポイント用に 必要なオプションを選択し、[Configure] を選択します。 Important Amazon EMR から NAT インスタンスを作成するに は、ec2:CreateRoute、ec2:RevokeSecurityGroupEgress、ec2:AuthorizeSecurityGroupEgre および cloudformation:CreateStack のアクセス権限が必要です。 Note NAT デバイスに対して EC2 インスタンスを起動すると、追加のコストが発生しま す。 5. クラスターの作成に進みます. AWS CLI を使用して VPC 内でクラスターを起動するには Note AWS CLI は、NAT インスタンスを自動的に作成してプライベートサブネットに接続する 方法は提供しません。ただし、サブネットで S3 エンドポイントを作成するには、Amazon VPCCLI コマンドを使用できます。コンソールを使用して NAT インスタンスを作成し、プラ イベートサブネットでクラスターを起動します。 VPC の設定が完了したら、create-cluster サブコマンドと --ec2-attributes パラメーターを 使用して、VPC 内で EMR クラスターを起動できます。クラスターに VPC サブネットを指定するに は、--ec2-attributes パラメーターを使用します。 • 特定のサブネットにクラスターを作成するには、次のコマンドを入力し、myKey を EC2 キーペ アの名前に置き換え、77XXXX03 をサブネット ID に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey,SubnetId=subnet-77XXXX03 \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 --applications Name=Hue Name=Hive Name=Pig --use-default-roles -ec2-attributes KeyName=myKey,SubnetId=subnet-77XXXX03 --instancetype m3.xlarge --instance-count 3 215 Amazon EMR 開発者ガイド IAM を使用して VPC へのアクセス許可を制限する --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、『AWS CLI』を参照してくださ い。 IAM を使用して VPC へのアクセス許可を制限する VPC 内でクラスターを起動するときは、EC2-Classic 内で起動したクラスターと同じように、AWS Identity and Access Management (IAM)を使用してクラスターへのアクセスを制御したり、ポリ シーを使用してアクションを制限したりすることができます。IAM の詳細については、「IAM ユー ザーガイド」を参照してください。 また、IAM を使用すると、サブネットを作成および管理できるユーザーを制御することもできま す。Amazon EC2 および Amazon VPC のポリシーとアクションを管理する方法の詳細については、 「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「Amazon EC2 の IAM ポリシー」を参照し てください。 デフォルトでは、すべての IAM ユーザーはそのアカウントのすべてのサブネットを表示でき、どのサ ブネットでもクラスターを起動できます。 ユーザーが サブネットでクラスターを起動することは許可したまま、 サブネットを管理する権限への アクセスを制限することができます。そのためには、サブネットを作成および設定できるユーザーア カウントを 1 つ作成し、もう 1 つ、クラスターを起動することはできても Amazon VPC 設定を変更 できないユーザーアカウントを作成します。 プライベートサブネット用の Amazon S3 の最小ポ リシー プライベートサブネットでは、最低でも、Amazon Linux リポジトリと Amazon EMR サービスサポー トログバケットに Amazon EMR がアクセスできるようにする必要があります。次のポリシーで、こ れらの権限が付与されます。MyRegion を、ログバケットが存在するリージョン (us-east-1 など) で置き換えます。 { "Version": "2008-10-17", "Statement": [ { "Sid": "AmazonLinuxAMIRepositoryAccess", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::packages.*.amazonaws.com/*", "arn:aws:s3:::repo.*.amazonaws.com/*" ] 216 Amazon EMR 開発者ガイド 詳細はこちら }, { "Sid": "AccessToEMRLogBucketsForSupport", "Effect": "Allow", "Principal": "*", "Action": [ "s3:Put*", "s3:Get*", "s3:Create*", "s3:Abort*", "s3:List*" ], "Resource": [ "arn:aws:s3:::aws157-logs-prod-MyRegion/*", "arn:aws:s3:::aws157-logs-prod/*" ] } ] } 詳細はこちら VPC のプライベートサブネット • Amazon EMR のプライベートサブネットの詳細については、「Amazon EMR 管理ガイド」を参照 してください。 • シナリオ 2: パブリックサブネットとプライベートサブネットを持つ VPC(NAT) • NAT インスタンス • Amazon VPC NAT インスタンスの高可用性: 例 VPC のパブリックサブネット • シナリオ 1: 単一のパブリックサブネットを持つ VPC 一般的な VPC 情報 • Amazon VPC ユーザーガイド • VPC ピア接続 • VPC で Elastic Network Interface を使用する • プライベート Amazon VPC で実行中の Linux インスタンスに安全に接続します Amazon EMR クラスターにタグを付ける このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS リソースを目的、所有者、環境などさまざまな方法で分類するのに便利です。これは、タグを 使用して、カスタムメタデータを Amazon EMR クラスターに割り当てることにより、Amazon EMR で達成できます。タグは、1 つのキーと 1 つの値で構成されており、どちらもお客様側が定義しま す。Amazon EMR では、クラスターはタグを付けられるリソースレベルです。例えば、各クラスター 217 Amazon EMR 開発者ガイド タグの制限 の所有者の追跡または実稼働用クラスターとテスト用クラスターの識別に役立つ、アカウントのクラ スターに一連のタグを定義できます。組織の要件に適合する一連の一貫したタグを作成することをお 勧めします。 Amazon EMR クラスターにタグを追加するとき、タグはクラスターに関連するアクティブな Amazon EC2 インスタンスそれぞれに伝達されます。同様に、Amazon EMR クラスターからタグを削除する と、そのタグは関連する アクティブな Amazon EC2 インスタンスそれぞれから削除されます。 Important Amazon EMR コンソールまたは CLI を使用して、Amazon EC2 コンソールまたは CLI で はなく、クラスターの一部である Amazon EC2 インスタンス上のタグを管理します。これ は、Amazon EC2 で加える変更は Amazon EMR タグ付けシステムと同期しないためです。 Amazon EMR クラスターの一部である Amazon EC2 インスタンスを識別できます。この例で は、CORE はインスタンスグループロールの値であり、j-12345678 はサンプルジョブフロー(クラ スター)識別子の値です。 • aws:elasticmapreduce:instance-group-role=CORE • aws:elasticmapreduce:job-flow-id=j-12345678 Note Amazon EMR および Amazon EC2 は、意味論的意味のない文字の文字列としてタグを解釈し ます。 AWS マネジメントコンソール、CLI、および API を使用して、タグで作業できます。 新しい Amazon EMR クラスターを作成するときタグを追加でき、実行中の Amazon EMR クラスター を対象に、タグを追加、編集、または削除できます。タグの編集は、Amazon EMR コンソールに適用 される概念であり、CLI と API を使用する場合、タグを編集するには、古いタグを削除して新しいタ グを追加します。タグのキーと値は編集でき、クラスター実行中であればいつでもタグをリソースか ら削除できます。ただし、まだアクティブなクラスターと以前に関連付けられていた、終了したクラ スターまたは終了したインスタンスを対象にタグの追加、編集、または削除はできません。また、タ グの値を空の文字列に設定することはできますが、null に設定することはできません。 タグによるリソースベースの権限のために Amazon EC2 インスタンスで AWS Identity and Access Management(IAM)を使用している場合、IAM ポリシーは Amazon EMR がクラスターの Amazon EC2 インスタンスに伝達するタグに適用されます。Amazon EMR タグを Amazon EC2 インスタンス に伝達するには、Amazon EC2 の IAM ポリシーが Amazon EC2 CreateTags および DeleteTags API を呼び出す権限を許可する必要があります。また、伝達されたタグは、Amazon EC2 のリソースベー スの権限に影響を及ぼす可能性があります。Amazon EC2 に伝達されたタグは、その他の Amazon EC2 タグ同様に、IAM ポリシーでの条件として読み取られます。IAM ユーザーがクラスターに対して 正しくない権限を持つことがないように、Amazon EMR クラスターにタグを追加するときは、IAM ポ リシーに留意してください。問題を避けるために、Amazon EMR クラスターでも使用する計画がある タグが、IAM ポリシーに含まれないようにしてください。詳細については、「Controlling Access to Amazon EC2 Resources」を参照してください。 タグの制限 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 タグには以下のような基本制限があります。 218 Amazon EMR 開発者ガイド 請求用のリソースにタグを付ける • リソースあたりのタグの最大数は 10 です。 • 最大キー長は Unicode 文字で 127 文字です。 • 最大値の長さは Unicode 文字で 255 文字です。 • タグのキーと値は大文字と小文字が区別されます。 • タグの名前と値に aws: プレフィックスは使用しないでください。このプレフィックスは AWS 用 に予約されています。また、このプレフィックスが含まれるタグの名前または値は編集または削除 できません。 • 終了したクラスターでタグの変更または編集はできません。 • タグの値を空の文字列にすることはできますが、null にすることはできません。また、タグキーを 空の文字列にすることはできません。 AWS マネジメントコンソール を使用するタグ付けの詳細については、「Linux インスタンス 用 Amazon EC2 ユーザーガイド」の「Working with Tags in the Console」を参照してくださ い。Amazon EC2API またはコマンドラインを使用するタグ付けの詳細については、「Linux インスタ ンス用 Amazon EC2 ユーザーガイド」の「API and CLI Overview」を参照してください。 請求用のリソースにタグを付ける このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 タグを使用して AWS 請求書を整理し、自分のコスト構造を反映することができます。そのために は、AWS アカウントにサインアップして、タグキー値が含まれた AWS アカウントの請求書を取得す る必要があります。その後で、タグキーの値により課金情報を整理して、リソースを合わせたコスト を確認できます。Amazon EMR および Amazon EC2 では請求明細書が異なりますが、各クラスター のタグが関連付けられているインスタンスそれぞれにも付けられているため、タグを使用して関連す る Amazon EMR のコストと Amazon EC2 のコストをリンクすることができます。 たとえば、複数のリソースに特定のアプリケーション名のタグを付け、請求情報を整理することで、 複数のサービスを利用しているアプリケーションの合計コストを確認することができます。詳細につ いては、『AWS Billing and Cost Management ユーザーガイド』の「コスト配分とタグ付け」を参照 してください。 新しいクラスターにタグを追加する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターを作成しているときにタグを追加できます。 コンソールを使用して新しいクラスターを作成しているときにタグを追加するには 1. Amazon EMR コンソールで、[Cluster List] ページを選択し、[Create cluster] をクリックします。 2. [Create Cluster] ページの [Tags] セクションで、[Key] 列にある空のフィールドをクリックし、 キーの名前を入力します。 新しいタグの入力を開始すると、タグの行が自動的に 1 行追加され、次の新しいタグを入力でき るようになります。 3. 必要に応じて、[Value] 列にある空のフィールドをクリックし、値の名前を入力します。 4. クラスターに追加するタグキー/値のペアについて上記のステップを繰り返します。クラスターを 起動すると、入力したタグが自動的にクラスターと関連付けられます。 219 Amazon EMR 開発者ガイド 既存のクラスターにタグを追加する AWS CLI を使用して新しいクラスターを作成しているときにタグを追加するには 次の例は、AWS CLI を使用して新しいクラスターにタグを追加する方法を示しています。クラスター の作成時にタグを追加するには、create-cluster サブコマンドを入力して --tags パラメーターを 指定します。 • クラスターの作成時に、costCenter という名前のタグをキー値 marketing と共に追加するに は、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --tags "costCenter=marketing" --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig --tags "costCenter=marketing" --use-default-roles --ec2-attributes KeyName=myKey --instancetype m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 既存のクラスターにタグを追加する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 既存のクラスターにタグを追加することもできます。 コンソールを使用して既存のクラスターにタグを追加するには 1. Amazon EMR コンソールで、[Cluster List] ページを選択し、タグを追加するクラスターをクリッ クします。 2. [Cluster Details] ページの [タグ] フィールドで、[View All/Edit] をクリックします。 3. [View All/Edit] ページで、[Add] をクリックします。 4. [Key] 列にある空のフィールドをクリックし、キーの名前を入力します。 5. 必要に応じて、[Value] 列にある空のフィールドをクリックし、値の名前を入力します。 220 Amazon EMR 開発者ガイド クラスターのタグを表示する 6. 入力を開始したタグごとに、編集中のタグの下に空のタグの行が表示されます。追加するタグご とに新しいタグの行で上記のステップを繰り返します。 AWS CLI を使用して実行中のクラスターにタグを追加するには 次の例は、AWS CLI を使用して実行中のクラスターにタグを追加する方法を示しています。リソース 識別子(クラスター ID)にタグを割り当てるには、add-tags サブコマンドを入力して --tag パラ メーターを指定します。リソース ID は、コンソールまたは list-clusters コマンドで使用できる クラスター識別子です。 Note 現時点では、add-tags サブコマンドで使用できるリソース ID は 1 つだけです。 • 実行中のクラスターに 2 つのタグ(値のない production という名前のキーを含むタグと、値が marketing の costCenter という名前のキーを含むタグ)を追加するには、次のコマンドを入 力し、j-KT4XXXXXXXX1NM をクラスター ID に置き換えます。 aws emr add-tags --resource-id j-KT4XXXXXXXX1NM -tag "costCenter=marketing" --tag "other=accounting" Note AWS CLI を使用してタグを追加すると、このコマンドでは何も出力されません。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 クラスターのタグを表示する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターに関連付けられたすべてのタグを確認する場合は、コンソールまたは CLI でそれらのタグ を表示できます。 コンソールを使用してクラスター上のタグを表示するには 1. Amazon EMR コンソールで、[Cluster List] ページを選択し、タグを表示するクラスターをクリッ クします。 2. [Cluster Details] ページの [Tags] フィールドでは、いくつかのタグがここに表示されます。クラ スター上の利用できるすべてのタグを表示するには、[View All/Edit] をクリックします。 AWS CLI を使用してクラスター上のタグを表示するには AWS CLI を使用してタグ上のタグを表示するには、describe-cluster サブコマンドを入力して -query パラメーターを指定します。 • クラスターのタグを表示するには、次のコマンドを入力し、j-KT4XXXXXXXX1NM をクラスター ID に置き換えます。 aws emr describe-cluster --cluster-id j-KT4XXXXXX1NM --query Cluster.Tags 221 Amazon EMR 開発者ガイド クラスターからタグを削除する 出力では、次のように、クラスターに関するすべてのタグ情報が表示されます。 Value: accounting Key: other Value: marketing Key: costCenter AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 クラスターからタグを削除する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 タグが必要でなくなったら、クラスターから削除できます。 コンソールを使用してクラスターからタグを削除するには 1. Amazon EMR コンソールで、[Cluster List] ページを選択し、タグを削除するクラスターをクリッ クします。 2. [Cluster Details] ページの [タグ] フィールドで、[View All/Edit] をクリックします。 3. [View All/Edit] ダイアログボックスで、削除するタグの横にある [X] アイコンをクリックし、 [Save] をクリックします。 4. (オプション)クラスターから削除するタグキー/値のペアについて上記のステップを繰り返しま す。 AWS CLI を使用してクラスターからタグを削除するには AWS CLI を使用してクラスターからタグを削除するには、remove-tags サブコマンドを入力して -tag-keys パラメーターを指定します。タグを削除する場合に必要なのは、キー名のみです。 • クラスターからタグを削除するには、次のコマンドを入力し、j-KT4XXXXXXXX1NM をクラス ター ID に置き換えます。 aws emr remove-tags --resource-id j-KT4XXXXXX1NM --tag-keys "costCenter" Note 現在、1 つのコマンドで複数のタグを削除することはできません。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Amazon EMR でサードパーティアプリケーショ ンを使用する(オプション) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 222 Amazon EMR 開発者ガイド Amazon EMR でのビジネスイ ンテリジェンスツールの使用 ユーティリティ料金で、いくつかの Pig データアプリケーションを Amazon EMR 上で実行できま す。つまり、クラスターの実行中、サードパーティアプリケーションに対して支払う追加時間料金を 最小限に抑えることができます。これにより年間ライセンスを購入せずに、アプリケーションを使用 することができます。 以降のセクションでは、EMR で利用できるツールの一部を紹介します。 トピック • Amazon EMR でのビジネスインテリジェンスツールの使用 (p. 223) • HParser でデータを解析する (p. 223) • Hadoop 用 MapR ディストリビューションを使用する (p. 224) Amazon EMR でのビジネスインテリジェンスツー ルの使用 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Microsoft Excel、MicroStrategy、QlikView、Tableau などの人気のビジネスインテリジェンスツール を Amazon EMR で使用して、データを調査しビジュアル化することができます。この種のツールの 多くは ODBC(Open Database Connectivity)または JDBC(Java Database Connectivity)ドライバ を必要とします。必要なドライバは、以下のリンクからダウンロードしてインストールすることがで きます。 • https://s3.amazonaws.com/amazon-odbc-jdbc-drivers/public/AmazonHiveJDBC_1.0.4.1004.zip • https://s3.amazonaws.com/amazon-odbc-jdbc-drivers/public/AmazonHiveODBC_1.1.1.1001.zip • http://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/ImpalaJDBC.zip • http://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/ImpalaODBC.zip • http://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/HBaseODBC.zip Microsoft Excel のようなビジネスインテリジェンスツールを Hive に接続する方法の詳細については、 http://cdn.simba.com/products/Hive/doc/Simba_Hive_ODBC_Quickstart.pdf. HParser でデータを解析する Informatica の HParser は、異なるフォーマットで格納されているデータを抽出し、処理および分析 しやすい形式に変換する際に使用できるツール。例えば、独自のフォーマットのテキストファイル に格納された既存の株式取引情報が企業にある場合は、HParser を使用してそのテキストファイル を読み込み、関連するデータを XML として抽出できます。テキストや XML のほかに、HParser で は、PDF、Word ファイルなど、独自のフォーマットで格納されたデータを変換することもできま す。 HParser は、Hadoop アーキテクチャーで実行されるように設計されています。つまり、この HParser を使用すると、クラスター内の多数のコンピュータにオペレーションを分散し、大量の データを効率的に解析できます。Amazon EMR(Amazon EMR)により、アマゾン ウェブ サービス (AWS)クラウドで Hadoop が実行しやすくなります。Amazon EMR を使用すると、Hadoop クラス ターを数分でセットアップし、プロセスの完了時にリソースを自動的に終了できます。 株式取引情報の例では、Amazon EMR で実行されている HParser を使用して、マシンクラスター全 体でデータを効率的に解析できます。すべてのファイルが変換されるとクラスターは自動的にシャッ トダウンし、使用したリソースに対してのみ課金されるようになります。これにより、既存のデータ を、IT インフラストラクチャの運用コストなしで分析に使用できます。 次のチュートリアルでは、Amazon EMR でホストされている HParser を使用して、独自のテ キストファイルを分析しやすい XML フォーマットに変換して処理する手順について説明しま 223 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する す。このサンプルの解析ロジックは HParser を使用するために定義され、変換サービスファイル (services_basic.tar.gz)に格納されます。このファイルと、このチュートリアルを実行するのに必 要な他のコンテンツは、Amazon Simple Storage Service(Amazon S3)(s3n://elasticmapreduce/ samples/informatica/)に事前にロードされています。これらのファイルは、HParser ジョブを実行す るときに参照します。 Amazon EMR で HParser を実行する方法については、「Parse Data with HParser on Amazon EMR」 を参照してください。 HParser とその使用方法の詳細については、http://www.informatica.com/us/products/b2b-dataexchange/hparser/ を参照してください。 Hadoop 用 MapR ディストリビューションを使用す る MapR は、Hadoop の使いやすさと信頼性を向上させる、オープンなエンタープライズ級の分散を提 供するサードパーティアプリケーションです。操作性を向上させるために MapR に用意されているの は、ネットワークファイルシステム(NFS)と ODBC(Open Database Connectivity)インターフェ イス、包括的な管理スイート、および自動圧縮機能です。自己回復力のある NameNode を持たない アーキテクチャーにより実現する高可用性や、スナップショットによるデータ保護、災害復旧、およ びクラスター間のミラーリングは信頼性を高めるのに役立ちます。MapR の詳細については、http:// www.mapr.com/ を参照してください。 Amazon EMR で使用できる MapR のエディションは複数あります。 • M3 エディション(バージョン 4.0.2、3.1.1、3.0.3、3.0.2、2.1.3) – 無料版の Hadoop 用の完全 なディストリビューションです。M3 は、業界標準のインターフェイス(NFS、ODBC など)をサ ポートする、完全なランダム読み込み/書き込み対応プラットフォームを提供し、管理、圧縮、およ びパフォーマンスの点でメリットをもたらします。 • M5 エディション(バージョン 4.0.2、3.1.1、3.0.3、3.0.2、2.1.3) – Apache Hadoop 用の完全な ディストリビューションで、エンタープライズクラスの機能を Hadoop 上のすべてのファイルオペ レーションに提供します。M5 機能には、ミラーリング、スナップショット、NFS HA、データ配 置制御などがあります。料金などの詳細については、Amazon EMR の MapR に関する詳細のペー ジを参照してください。 • M7 エディション(バージョン 4.0.2、3.1.1、3.0.3、3.0.2) – Apache Hadoop 用の完全なディスト リビューションで、NoSQL および Hadoop アプリケーションに対して使いやすさ、信頼性、およ びパフォーマンスを提供します。拡張性、強い整合性、信頼性、継続的な低レイテンシーを備えた アーキテクチャが実現し、圧縮もバックグラウンドでの整合性チェックも不要です。料金などの詳 細については、Amazon EMR の MapR に関する詳細のページを参照してください。 Note Apache HBase アプリケーションのエンタープライズクラスの信頼性と一貫したパフォーマン スを得るには、MapR M7 エディションを使用します。 また、MapR は Ganglia とデバッグをサポートせず、Amazon EMR 上の MapR M3 と M5 エ ディションは Apache HBase をサポートしません。 Hadoop 2.x をサポートし Amazon EMR で使用できる MapR のバージョンは 4.0.2 で、Amazon EMR AMI 3.3.2 でのみ使用できます 224 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する コンソールを使用して MapR で Amazon EMR クラスターを起 動する Hadoop バージョンを設定するときに MapR を指定することで、MapR ディストリビューション上に どの標準クラスターでも起動できます。 コンソールを使用して MapR で Amazon EMR クラスターを起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Software Configuration] セクションで、次の表に従ってフィールドを確認します。 Important VPC で MapR ジョブフローを起動する場合、enableDnsHostnames を true に設定 し、クラスターのすべてのホストに完全修飾ドメイン名が必要です。詳細について は、Amazon VPC ユーザーガイドの「Using DNS with Your VPC」および「DHCP Options Sets」を参照してください。 フィールド アクション Hadoop ディスト [MapR] を選択します。 リビューション これにより、クラスターで実行する Hadoop のバージョンが決定され ます。Hadoop 用 MapR ディストリビューションの詳細については、 「Hadoop 用 MapR ディストリビューションを使用する (p. 224)」を参照 してください。 エディション 目的の要件を満たす MapR エディションを選択します。 詳細については、「Hadoop 用 MapR ディストリビューションを使用す る (p. 224)」を参照してください。 バージョン 目的の要件を満たす MapR バージョンを選択します。 詳細については、「バージョン (p. 227)」を参照してください。 引数(オプショ ン) 4. 目的の要件を満たす MapR に渡す追加の引数を指定します。 詳細については、「引数 (p. 227)」を参照してください。 [Done] をクリックし、「Amazon EMR クラスターの計画 (p. 31)」で説明されているように、 クラスターの作成に進みます。 AWS CLI を使用した MapR でのクラスターの起動 AWS CLI を使用して MapR で Amazon EMR クラスターを起動するには; Note --release-label パラメーターを指定するときに、MapR クラスターを起動することはま だできません。 AWS CLI を使用して MapR でクラスターを起動するには、create-cluster コマンドを入力し、-applications パラメーターを指定します。 225 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する • MapR の m7 エディションでクラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "MapR cluster" --applications Name=Hive Name=Pig \ Name=MapR,Args=--edition,m7,--version,4.0.2 --ami-version 3.3.2 \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m1.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "MapR cluster" --applications Name=Hive Name=Pig Name=MapR,Args=--edition,m7,--version,3.1.1 --ami-version 2.4 --use-default-roles --ec2-attributes KeyName=myKey --instancetype m1.xlarge --instance-count 3 Note Hadoop 2.x をサポートし Amazon EMR で使用できる MapR のバージョンは 4.0.2 で、Amazon EMR AMI 3.3.2 でのみ使用できます --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 MapR のエディション、バージョン、および引数 MapR では、複数のエディションおよびバージョンと、Amazon EMR、コンソール、または CLI を使 用して MapR に渡すことができる複数の引数がサポートされています。以下の例では Amazon EMR CLI を使用していますが、Amazon EMR では、コンソールを使用した場合も同等の機能を実現できま す。 CLI を使用したクラスター起動の詳細については、「Amazon EMR クラスターの計画 (p. 31)」の 各クラスタータイプの説明を参照してください。API を使用したクラスター起動の詳細については、 「SDK を使用して Amazon EMR API を呼び出す (p. 551)」を参照してください。 エディション CLI を使用する場合は、--edition パラメーターを渡して以下のエディションを指定できます。 • m3 • m5 • m7 226 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する 指定しなければ、デフォルトエディションは m3 になります。 バージョン --version を使用して以下のバージョンを指定できます: • M3 エディション - 4.0.2、3.1.1、3.0.3、3.0.2、2.1.3 • M5 エディション - 4.0.2、3.1.1、3.0.3、3.0.2、2.1.3 • M7 エディション - 4.0.2、3.1.1、3.0.3、3.0.2 Note MapR バージョン 4.0.2 は、AMI バージョン 3.3.2 でのみ使用できます。 引数 --supported-product オプションは、オプションの引数をサポートします。Amazon EMR は、引 数リストを受領して、ブートストラップアクション引数として対応するインストールスクリプトへ転 送します。以下の例は、--supported-product オプションを使用するための構文を示します。オプ ション引数の有無は考慮しません。key1 および value1 などのフィールドは、MapR が認識するカス タムのキー/値を表し、edition という名前のキーがサンプルとして表示されます: --supported-product --supported-product --supported-product --supported-product mapr-m3 mapr-m3 --args "--key1,value1,--key2,value2" mapr --args "--edition,m3,--key1,value1,--key2,value2" mapr-m3 --args "--edition,m3,--key1,value1,--key2,value2" 次の表に、ユーザーが --args オプションで指定した場合に、MapR が読み取るパラメーターを示し ます。 パラメーター 説明 --edition MapR エディション。 --version MapR バージョン。 --owner-password Hadoop 所有者のパスワード。デフォルト: hadoop。 --num-mapr-masters m5/m7 クラスターの追加のマスターノード。 --mfs-percentage MapR ファイルシステムに使用される、接続さ れたストレージボリュームの領域の割合。デ フォルトは 100(使用可能なすべての領域)、 最小は 50。s3distcp や類似のその他のメカニ ズムを使用して、Amazon S3 ストレージから 大きなコピーを出し入れするユーザーは、スト レージ領域の一部を通常の Linux ストレージと して使用させることによって、パフォーマンス の向上が見られることがあります。例: --mfspercentage,90。残りは、RAID0 ファイルシス テムとして S3_TMP_DIR にマウントされます。 --hive-version Amazon Hive パッケージのバージョン。デフォ ルト: latest。Amazon Hive のインストールを 227 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する パラメーター 説明 無効にするには、--hive-version,none を使 用します。 --pig-version Amazon Pig パッケージのバージョン。デフォル ト: latest。Amazon Pig のインストールを無効 にするには、--pig-version,none を使用しま す。 次の表に、--args パラメーターと引数を含むコマンドの例を示します。このコマンドは、MapR に よって入力が解釈された後に実行されます。 オプション MapR により処理されるコマンド --supported-product mapr --edition m3 --supported-product mapr-m5 --edition m5 --supported-product mapr-m3 --edition m3 --with-supported-products mapr-m3(廃止予定) --edition m3 --with-supported-products mapr-m5(廃止予定) --edition m5 --supported-product mapr-m5 --args "-version,1.1" ----edition m5 -- ----supported-product mapr-m5 --,m3" N/A – エラーを返す --supported-product mapr --args "--edition,m5" --edition m5 --supported-product mapr --args "--version,1.1" --edition m3 --version 1.1 --supported-product mapr --args "--edition,m5,-key1 value1" --edition m5 --key1 value1 Note --with-supported-products オプションは廃止され、--supported-product オプ ションによって置き換えられました。このオプションでは、同じ Hadoop バージョンと MapR バージョンに、パラメーターのサポートが追加されています。 Amazon EMR クラスターへの MCS アクセスを有効にする MapR クラスターの実行後、ポート 8453 を開いて、クラスターを起動したホスト以外のホストによ る MapR コントロールシステム(MCS)へのアクセスを有効にする必要があります。以下のステップ に従ってポートを開きます。 MCS アクセス用にポートを開くには 1. AWS マネジメントコンソールの [Elastic MapReduce] タブの [Elastic MapReduce] に表示されて いるジョブのリストからご自分のジョブを選択して、次に下部のペインで [Description] を選択し ます。 [Master Public DNS Name] の値をメモします。 2. AWS マネジメントコンソール の [Amazon EC2] タブをクリックして、Amazon EC2 コンソール を開きます。 228 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する 3. ナビゲーションペインで、[Network and Security] グループの下の [Security Groups] を選択しま す。 4. [Security Groups] リストで、[Elastic MapReduce-master] を選択します。 5. 下部のペインで、[Inbound] タブをクリックします。 6. [Port Range:] に、8453 と入力します。[Source:] にはデフォルト値を残しておきます。 Note 標準の MapR ポートは 8443 です。Amazon EMR クラスター上で MapR REST API によ る MapR の呼び出しを使用する場合、ポート番号 8443 の代わりに 8453 を使用します。 7. [Add Rule] をクリックして、[Apply Rule Changes] をクリックします。 8. これで、マスターノードの DNS アドレスをナビゲートできるようになります。ポート 8453 に接 続して、MapR コントロールシステムにログインします。MCS ログイン画面では、ログインとパ スワードの両方に Hadoop の文字列を使用します。 Note Amazon EMR 上の M5 MapR クラスターでは、MCS ウェブサーバーはプライマリとセカ ンダリの CLDB ノード上で稼働します。これにより、プライマリノードに不具合が生じて も、MCS への別のエントリを確保できます。 クラスターのテスト このセクションでは、サンプルの入力ファイルで単語数を数えることによってクラスターをテストす る方法を説明します。 ファイルを作成してテストジョブを実行するには 1. ユーザー Hadoop として、SSH でマスターノードに接続します。この例のように、-i flag でご自 分の .pem 認証情報ファイルを SSH へ渡します: ssh -i /path_to_pemfile/credentials.pem [email protected] 2. シンプルテキストファイルを作成する: cd /mapr/MapR_EMR.amazonaws.com mkdir in echo "the quick brown fox jumps over the lazy dog" > in/data.txt 3. 次のコマンドを実行して、テキストファイルの単語数を数えます: hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/hadoop-0.20.2-dev-examples.jar wordcount /mapr/MapR_EMR.amazonaws.com/in/ /mapr/MapR_EMR.amazonaws.com/ out/ ジョブが実行されると、次のようなターミナル出力が表示されます: 12/06/09 00:00:37 INFO fs.JobTrackerWatcher: Current running JobTracker is: ip10118194139.ec2.internal/10.118.194.139:9001 12/06/09 00:00:37 INFO input.FileInputFormat: Total input paths to process : 1 12/06/09 00:00:37 INFO mapred.JobClient: Running job: job_201206082332_0004 229 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する 12/06/09 00:00:38 INFO mapred.JobClient: 12/06/09 00:00:50 INFO mapred.JobClient: 12/06/09 00:00:57 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: job_201206082332_0004 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: mappers(ms)=6193 12/06/09 00:00:58 INFO mapred.JobClient: waiting after reserving slots (ms)=0 12/06/09 00:00:58 INFO mapred.JobClient: waiting after reserving slots (ms)=0 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: reducers(ms)=4875 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 12/06/09 00:00:58 INFO mapred.JobClient: 4. map map map Job 0% reduce 0% 100% reduce 0% 100% reduce 100% complete: Counters: 25 Job Counters Launched reduce tasks=1 Aggregate execution time of Total time spent by all reduces Total time spent by all maps Launched map tasks=1 Datalocalmap tasks=1 Aggregate execution time of FileSystemCounters MAPRFS_BYTES_READ=385 MAPRFS_BYTES_WRITTEN=276 FILE_BYTES_WRITTEN=94449 MapReduce Framework Map input records=1 Reduce shuffle bytes=94 Spilled Records=16 Map output bytes=80 CPU_MILLISECONDS=1530 Combine input records=9 SPLIT_RAW_BYTES=125 Reduce input records=8 Reduce input groups=8 Combine output records=8 PHYSICAL_MEMORY_BYTES=329244672 Reduce output records=8 VIRTUAL_MEMORY_BYTES=3252969472 Map output records=9 GC time elapsed (ms)=1 /mapr/MapR_EMR.amazonaws.com/out ディレクトリで、ジョブの結果を含む part-r-00000 と いう名前のファイルを確認してください。 cat out/partr00000 brown 1 dog 1 fox 1 jumps 1 lazy 1 over 1 quick 1 the 2 230 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する チュートリアル: MapR M7 によって Amazon EMR クラスター を起動する このチュートリアルでは、Hadoop 用 MapR ディストリビューションの M7 エディションを使用し た Amazon EMR クラスターの起動について説明します。Hadoop 用 MapR ディストリビューション は、業界標準の NFS および ODBC インターフェイス、エンドツーエンド管理、高い信頼性、自動圧 縮などの多くの独自の機能を提供する完全な Hadoop ディストリビューションです。MapR クラス ターは、ウェブベースの MapR コントロールシステム、コマンドライン、REST API から管理できま す。M7 には、高可用性、スナップショットとミラーボリューム、MapR-FS 上のネイティブ MapR テーブル関数などのエンタープライズクラスの機能を備え、スナップショットやミラーリングと互換 性のある、反応の良い HBase スタイルのフラットテーブルデータベースが可能です。これは、既存の インフラストラクチャ、アプリケーション、ツールに統合された、非構造化および構造化データの保 存と処理のための単一のプラットフォームを提供します。 Note このチュートリアルのコマンドを使用するには、AWS CLI をダウンロードして、インストー ルします。詳細については、『AWS Command Line Interface ユーザーガイド』の「AWS CLI のインストール」を参照してください。 1. MapR の m7 エディションでクラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "MapR cluster" --applications Name=Hive Name=Pig \ Name=MapR,Args=--edition,m7,--version,4.0.2 --ami-version 3.3.2 \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m1.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "MapR cluster" --applications Name=Hive Name=Pig Name=MapR,Args=--edition,m7,--version,3.1.1 --ami-version 2.4 --use-default-roles --ec2-attributes KeyName=myKey --instancetype m1.xlarge --instance-count 3 Note Amazon EMR で使用できる MapR のバージョンでは、現在、Hadoop 2.x がサポートさ れていません。--ami-version を指定するときは、Hadoop 1.x AMI を使用してくださ い。 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 231 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する コマンドの実行後、クラスターの起動には、5 分から 10 分かかります。aws emr listclusters コマンドは、WAITING 状態に入る前の STARTING および BOOTSTRAPPING 状態の クラスターを表示します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 2. クラスター ID を取得し、クラスターへの接続に SSH を使用します。以下のコマンドで は、j-2AL4XXXXXX5T9 をクラスター ID に置き換え、~/mykeypair.key をキーペアのプライ ベートキーファイルのパスとファイル名に置き換えます。 aws emr list-clusters aws emr ssh --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key Note SSH によるクラスターへのアクセスの詳細については、「SSH を使用してマスターノー ドに接続する (p. 459)」を参照してください。 3. MapR は、データを編成し、クラスターパフォーマンスを管理する方法として、ボリュームを提 供します。ボリュームは、一連のファイル、ディレクトリ、サブボリュームにポリシーを適用 できる論理ユニットです。ボリュームを使用して、ディスク使用制限を適用したり、レプリケー ションレベルを設定したり、所有権と責任を確立したり、さまざまなプロジェクトや部門で発 生するコストを測定したりすることができます。各ユーザー、部門、またはプロジェクトのボ リュームを作成します。他のボリュームの下にボリュームをマウントして、組織のニーズを反映 する構造を構築できます。ボリューム構造は、クラスターのノードにデータを分散させる方法を 定義します。 SSH 経由でクラスターに接続後、次のコマンドを実行して、ボリュームを作成します。 $ maprcli volume create -name tables -replicationtype low_latency -path / tables 4. Hadoop 用 MapR ディストリビューションの M7 Edition により、標準 UNIX ファイルシステムで ファイルを作成し、操作するほとんど同じ方法でテーブルを作成し、操作できます。M7 Edition で、テーブルはファイルと同じ名前空間を共有し、フルパス名で指定します。Apache HBase と M7 Edition のネイティブテーブルで使われているテーブル名間のマッピングを作成できます。 a. 次のコマンドでテーブルを作成します。 $ echo "create '/tables/user_table', 'family' " | hbase shell b. 次のコマンドでテーブルを一覧表示します。 $ hadoop fs -ls /tables Found 1 items trwxr-xr-x 3 root root 2 2013-04-16 22:49 /tables/user_table $ ls /mapr/MapR_EMR.amazonaws.com/tables user_table c. 次のコマンドを使用して、テーブルの移動または名前の変更を行います。 hadoop fs -mv /tables/user_table /tables/usertable 232 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する 5. スナップショットは、特定の時点でのボリュームの読み取り専用イメージです。スナップショッ トは、特定の時点で、既知の正常なデータセットにロールバックできる必要があるときにいつで も便利です。 a. HBase シェルから、新しく作成したテーブルに行を追加します。 $ hbase shell hbase(main):001:0> put '/tables/usertable', 'row_1' , 'family:child', 'username' output: 0 row(s) in 0.0920 seconds b. スナップショットを作成します。 $ maprcli volume snapshot create -volume tables -snapshotname mysnap c. テーブルを変更します。 hbase(main):002:0> put '/tables/usertable', 'row_1' , 'family:location', 'San Jose' d. スナップショットは .snapshot ディレクトリに格納されます。スナップショットのテーブ ルと現在のテーブルをスキャンして、違いを確認します。 hbase shell > scan '/tables/usertable' ROW COLUMN+CELL row_1 column=family:child, timestamp=1366154016042, value=username row_1 column=family:home, timestamp=1366154055043, value=San Jose 1 row(s) in 0.2910 seconds scan ‘/tables/.snapshot/mysnap/usertable’ ROW COLUMN+CELL row_1 column=family:child, timestamp=1366154016042, value=username 1 row(s) in 0.2320 seconds 6. 高可用性をテストします。 a. システムの現在のリージョンを一覧表示します。 $ maprcli table region list -path /tables/usertable secondarynodes scans primarynode puts startkey gets lastheartbeat endkey ip-10-191-5-21.ec2.internal, ip-10-68-37-140.ec2.internal ... ip-10-4-74-175.ec2.internal ... -INFINITY ... 0 INFINITY b. いずれかのリージョンのプライマリノードを再起動します。プライマリノードがクラスター へのアクセスポイントでないことを確認します。アクセスポイントを再起動すると、クラス ターへのアクセスが失われ、YCSB クライアントが終了します。 SSH でクラスターに接続し、次のコマンドでノードを再起動します。 $ ssh -i /Users/username/downloads/MyKey_Context.pem [email protected] $ sudo /sbin/reboot 233 Amazon EMR 開発者ガイド Hadoop 用 MapR ディストリビューションを使用する Note 再起動は完了するまでに、15~30 秒かかります。 c. 再起動が完了したら、新しいリージョンを一覧表示し、前のプライマリノードがセカンダリ として表示されるようになったことを確認します。 $ maprcli table region list -path /tables/usertable secondarynodes scans primarynode puts startkey gets lastheartbeat endkey ip-10-191-5-21.ec2.internal, ip-10-68-37-140.ec2.internal ... ip-10-4-74-175.ec2.internal ... -INFINITY ... 0 INFINITY 7. MapR コントロールシステムページを開くには、アドレス https://hostname.compute-1.amazonaws.com:8453 に移動します。デフォルトのインス トールのユーザー名とパスワードはどちらも hadoop です。ノードのホスト名の URL は、SSH でノードに初めてログインした時に表示される message-of-the-day に表示されます。 [Nodes] ビューに、ラック別でクラスター内のノードが表示されます。[Nodes] ビューには、 [Topology] ペインと [Nodes] ペインの 2 つのペインがあります。[Topology] ペインには、クラ スター内のラックが表示されます。ラックを選択すると、右側の [Nodes] ペインにそのラック のノードが表示されます。[Cluster] を選択すると、クラスター内のすべてのノードが表示され ます。任意の列名をクリックして、その列でデータを昇順または降順にソートできます。YCSB ジョブがまだ実行中の場合、[ノード] ビューから put ストリームが続いているのを確認できま す。 234 Amazon EMR 開発者ガイド Amazon EMR を使用したバイナリの構築 データを処理する Hadoop アプリ ケーションの実行 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR では、データ処理を行うカスタム Hadoop アプリケーションを作成するために以下のい くつかのモデルを提供しています。 • カスタム JAR または Cascading – Java アプリケーションを作成します。このアプリケーション では Cascading Java ライブラリを利用する場合と利用しない場合がありますが、JAR ファイル を生成し、Amazon S3 に JAR ファイルをアップロードします。そこで、JAR ファイルがクラス ターにインポートされ、データを処理するために使用されます。これを行うとき、JAR ファイルに は、Map と Reduce の両方の機能が実装されている必要があります。 • ストリーミング – いくつかのスクリプト言語の中の 1 つを使用して Map スクリプトと Reduce ス クリプトを個別に作成し、スクリプトを Amazon S3 にアップロードします。そこで、スクリプト はクラスターにインポートされ、データを処理するために使用されます。スクリプトを提供するの でなく、aggregate などのビルトイン Hadoop クラスを使用することもできます。 どのようなタイプのカスタムアプリケーションを作成する場合であろうと、アプリケーションは Map と Reduce の両方からなる機能を備える必要があり、Hadoop プログラミングのベストプラクティス に忠実であるべきです。 トピック • Amazon EMR を使用したバイナリの構築 (p. 235) • JAR の要件 (p. 237) • クラスターでのスクリプトの実行 (p. 238) • ストリーミングでのデータ処理 (p. 239) • Cascading を使用したデータ処理 (p. 243) • カスタム JAR でのデータの処理 (p. 244) Amazon EMR を使用したバイナリの構築 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 235 Amazon EMR 開発者ガイド Amazon EMR を使用したバイナリの構築 Amazon EMR(Amazon EMR)を構築環境として使用し、クラスターで使用するプログラムをコン パイルできます。Amazon EMR で使用するプログラムのコンパイルは、Amazon EMR が使用して いるバージョンと同じ Linux が実行されているシステムで行わなければなりません。32 ビットバー ジョンについては、32 ビットマシンまたは 32 ビットクロスコンパイルオプションをオンにして、 コンパイルしておく必要があります。64 ビットバージョンについては、64 ビットマシンまたは 64 ビットクロスコンパイルオプションをオンにして、コンパイルしておく必要があります。EC2 イン スタンスのバージョンの詳細については、「インスタンスの構成 (p. 36) 」を参照してください。C+ +、Cython、C# などのプログラミング言語がサポートされいます。 次の表は、Amazon EMR を使用してアプリケーションを構築し、テストするステップを簡単に示して います。 モジュール構築のプロセス 1 クラスターのマスターノードに接続します。 2 ソースファイルをマスターノードにコピーします。 3 バイナリを構築し、必要に応じて最適化します。 4 バイナリをマスターノードから Amazon S3 にコピーします。 各ステップの詳細については、以降のセクションで説明します。 クラスターのマスターノードに接続するには • 手順(SSH を使用してマスターノードに接続する (p. 459) )に従ってマスターノードに接続し ます。 ソースファイルをマスターノードにコピーするには 1. 2. Amazon S3 バケットにソース ファイルを置きます。バケットの作成方法および Amazon S3 へ のデータの移動方法については、Amazon Simple Storage Service 入門ガイド を参照してくださ い。 以下のようなコマンドを入力して、ソースファイルを入れるフォルダーを Hadoop クラスター上 に作成します: mkdir SourceFiles 3. 次のようなコマンドを入力して、ソースファイルを Amazon S3 からマスターノードにコピーし ます。 hadoop fs -get s3://mybucket/SourceFiles SourceFiles バイナリを構築し、必要に応じて最適化する バイナリを構築する方法はさまざまな要因によって決まります。ご利用の構築ツールの手順に従っ て、環境をセットアップして設定してください。Hadoop システム仕様コマンドを使用すると、構築 環境をインストールする方法を判断する際に必要なクラスター情報を入手できます。 システム仕様を確認するには • バイナリを構築する際に使用するアーキテクチャを確認するには、以下のコマンドを使用しま す。 a. Debian のバージョンを確認するには、以下のコマンドを入力します: 236 Amazon EMR 開発者ガイド JAR の要件 master$ cat /etc/issue 出力は次の例のようになります。 Debian GNU/Linux 5.0 b. パブリック DNS 名とプロセッサーのサイズを確認するには、以下のコマンドを入力しま す。 master$ uname -a 出力は次の例のようになります。 Linux domU-12-31-39-17-29-39.compute-1.internal 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:34:28 EST 2008 x86_64 GNU/Linux c. プロセッサー速度を確認するには、以下のコマンドを入力します: master$ cat /proc/cpuinfo 出力は次の例のようになります。 processor : 0 vendor_id : GenuineIntel model name : Intel(R) Xeon(R) CPU E5430 @ 2.66GHz flags : fpu tsc msr pae mce cx8 apic mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr cda lahf_lm ... バイナリを構築したら、ファイルを Amazon S3 にコピーできます。 バイナリをマスターノードから Amazon S3 にコピーするには • 次のコマンドを入力して、バイナリを Amazon S3 バケットにコピーします。 hadoop fs -put BinaryFiles s3://mybucket/BinaryDestination JAR の要件 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR(Amazon EMR)クラスターを起動し、ステップを追加して JAR を指定する と、Amazon EMR により Hadoop が起動され、bin/hadoop jar コマンドにより、JAR が実行され ます。 JAR は、ステップが完了するまで終了してはいけません。したがって、正常終了を示す終了コード (0)が必要です。正常終了のコードが存在しないと、Amazon EMR はそのステップが失敗したと見 237 Amazon EMR 開発者ガイド クラスターでのスクリプトの実行 なします。同様に、JAR が完了すると、Amazon EMR はそのステップに関係するすべての アクティ ビティが完了したと見なします。 クラスターでのスクリプトの実行 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR(Amazon EMR)を使用すると、クラスターを処理するステップの中でいつでもス クリプトを実行できます。スクリプトを実行するステップをクラスターの作成時に指定すること も、WAITING 状態のクラスターにステップを追加することもできます。ステップの追加の詳細につい ては、「クラスターへの作業の送信 (p. 504)」を参照してください。 ステップの処理が始まる前にスクリプトを実行するには、ブートストラップアクションを使用しま す。ブートストラップアクションの詳細については、「(オプション)追加のソフトウェアをインス トールするためのブートストラップアクションの作成 (p. 121)」を参照してください。 AWS CLI を使用したカスタム JAR ステップの送信 このセクションでは、スクリプトを実行するステップを追加する方法を説明します。scriptrunner.jar では、スクリプトのパスを示す引数と、必要に応じてスクリプトのための追加の引数が 使用されます。JAR ファイルは、渡された引数を使ってスクリプトを実行します。 Important script-runner.jar は、s3://region.elasticmapreduce/libs/script-runner/ script-runner.jar にあります (region は、EMR クラスターのあるリージョン)。 スクリプトを実行するステップが含まれたクラスターは、以下の例のようになります。 AWS CLI を使用してスクリプトを実行するステップを追加するには • AWS CLI を使用してスクリプトを実行するには、以下のコマンドを入力し、myKey を EC2 キー ペアの名前に置き換え、mybucket を S3 バケットに置き換えます。このクラスターでは、ス テップが処理されると my_script.sh というスクリプトがマスターノードで実行されます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3:// region.elasticmapreduce/libs/script-runner/scriptrunner.jar,Args=["s3://mybucket/script-path/my_script.sh"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 -steps Type=CUSTOM_JAR,Name=CustomJAR,ActionOnFailure=CONTINUE,Jar=s3:// 238 Amazon EMR 開発者ガイド ストリーミングでのデータ処理 elasticmapreduce/libs/script-runner/script-runner.jar,Args=["s3:// mybucket/script-path/my_script.sh"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 ストリーミングでのデータ処理 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop ストリーミングは、Hadoop に付属しているユーティリティの 1 つ。Java 以外の言語で MapReduce 実行可能ファイルを作成できるようになります。ストリーミングは JAR ファイル形式で 実装されるため、Amazon EMR(Amazon EMR)API または標準の JAR ファイルと同様にコマンド ラインから実行できます。 このセクションでは、Amazon EMR でストリーミングを使用する方法を説明します。 Note Apache Hadoop Streaming は独立したツールです。そのため、ここでは、その関数とパ ラメーターすべてを説明するわけではありません。Hadoop ストリーミングに関する詳細 は、http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html を参照し てください。 Hadoop ストリーミングユーティリティの使用 このセクションでは、Hadoop のストリーミングユーティリティの使用方法を説明します。 Hadoop プロセス 1 自由にプログラム言語を選択して、実行可能なマッパーとリデューサーを作成します。 Hadoop のドキュメントの指示に従ってストリーミング実行ファイルを書いてください。 プログラムは、標準出力による標準入出力データからの入力を読み取れるようにする必要 があります。デフォルトでは、入出力の各行は 1 つのレコードに対応し、各行の最初のタ ブはキーと値を区切ります。 2 ローカルで実行ファイルをテストしてから、Amazon S3 へアップロードします。 3 Amazon EMR コマンドラインインターフェイスまたは Amazon EMR コンソールを使用し てアプリケーションを実行します。 239 Amazon EMR 開発者ガイド Hadoop ストリーミングユーティリティの使用 各マッパースクリプトは、 クラスター内の独立したプロセスとして実行されます。各リデューサー実 行ファイルは、マッパー実行ファイルの出力をジョブフローによるデータ出力にします。 input、output、mapper、および reducer パラメーターは、ほとんどのストリーミング アプリ ケーションで必要とされます。以下の表は、これらのパラメーターと他のオプションパラメーターつ いて説明します。 パラメーター 説明 必須 -input Amazon S3 上の入力データの場所。 種類: 文字列 既定: なし 制約: URI。プロトコルの指定がなければ、クラスターのデフォル トファイルシステムが使用されます。 はい -output Amazon EMR が処理されたデータをアップロードする Amazon S3 上の場所。 種類: 文字列 既定: なし 制約: URI 既定: 場所の指定がなければ、Amazon EMR は input で指定され た場所にデータをアップロードします。 はい -mapper マッパー実行ファイルの名前。 型: 文字列 デフォルト: なし はい -reducer リデューサー実行ファイルの名前。 型: 文字列 デフォルト: なし はい -cacheFile (主としてパフォーマンス向上のために)Hadoop がローカル作 業ディレクトリにコピーするファイルが格納されている Amazon S3 の場所。 種類: 文字列 既定: なし 制約: [URI]#[作業ディレクトリに作成するシンボリックリンク名] いいえ -cacheArchive 作業ディレクトリに抽出する JAR ファイル いいえ 種類: 文字列 既定: なし 制約: [URI]#[作業ディレクトリに作成するシンボリックリンクディ レクトリ名] -combiner 結果の結合 種類: 文字列 既定: なし 制約: Java クラス名 いいえ 次のコード例は、Python で作成されたマッパーの実行可能ファイルです。このスクリプトは WordCount サンプルアプリケーションの一部です。 #!/usr/bin/python import sys 240 Amazon EMR 開発者ガイド ストリーミングステップの送信 def main(argv): line = sys.stdin.readline() try: while line: line = line.rstrip() words = line.split() for word in words: print "LongValueSum:" + word + "\t" + "1" line = sys.stdin.readline() except "end of file": return None if __name__ == "__main__": main(sys.argv) ストリーミングステップの送信 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、クラスターにストリーミングステップを送信するための基本について説明しま す。ストリーミングアプリケーションは、標準入力から入力を読み取って、スクリプトまたは実行可 能ファイル(マッパーと呼ばれます)を各入力に対して実行します。各入力の結果は、ローカル(通 常は Hadoop Distributed File System(HDFS)パーティション)に保存されます。すべての入力が マッパーによって処理されたら、そのマッパーの結果は、2 つ目のスクリプトまたは実行可能ファイ ル (リデューサーと呼ばれます) によって処理されます。リデューサーの結果は標準出力に送信されま す。そして、一連のストリーミングステップをつなげることができます。ここでは、あるステップの 出力が別のステップの入力になります。 マッパーとリデューサーはそれぞれファイルとして参照できます。また、Java クラスを指定すること もできます。マッパーおよびリデューサーは、Ruby、Perl、Python、PHP、Bash など、サポートさ れている任意の言語で実装できます。 コンソールを使用したストリーミングステップの送信 この例では、Amazon EMR コンソールを使用し、実行中のクラスターにストリーミングステップを送 信する方法について説明します。 ストリーミングステップを送信するには 1. 2. 3. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 [Cluster List] で、クラスターの名前を選択します。 [Steps] セクションまでスクロールして展開し、[Add step] を選択します。 4. [Add Step] ダイアログボックスで、次のようにします。 • [Step type] は [Streaming program] を選択します。 • [Name] では、デフォルト名(Streaming program)を使用するか、または新しい名前を入力し ます。 • [Mapper] では、Hadoop のマッパークラスの場所または Python プログラムなどの マッパー実行ファイルが存在する S3 バケットを入力または参照します。パスの値は BucketName/path/MapperExecutable という書式で指定する必要があります。 • [Reducer] では、Hadoop のリデューサークラスの場所または Python プログラムなどの リデューサー実行ファイルが存在する S3 バケットを入力または参照します。パスの値は BucketName/path/MapperExecutable という書式で指定する必要があります。Amazon EMR は、特別な aggregate キーワードをサポートしています。詳細については、Hadoop が提供す る Aggregate ライブラリを参照してください。 241 Amazon EMR 開発者ガイド ストリーミングステップの送信 • [Input S3 location] では、入力データの場所を入力または参照します。 5. 6. • [Output S3 location] では、Amazon S3 出力バケットの名前を入力または参照します。 • [Arguments] は、フィールドを空のままにします。 • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 [Add] を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。 ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] アイコンを選択 します。 AWS CLI これらの例では、AWS CLI を使用し、クラスターを作成してストリーミングステップを送信する方法 を示します。 AWS CLI でクラスターを作成してストリーミングステップを送信するには • AWS CLI でクラスターを作成してストリーミングステップを送信するには、次のコマンドを入力 し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,\ Args=[--files,pathtoscripts,-mapper,mapperscript,reducer,reducerscript,aggregate,-input,pathtoinputdata,output,pathtooutputbucket] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=STREAMING,Name="Streaming Program",ActionOnFailure=CONTINUE,Args=[--files,pathtoscripts,mapper,mapperscript,-reducer,reducerscript,aggregate,input,pathtoinputdata,-output,pathtooutputbucket] Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 242 Amazon EMR 開発者ガイド Cascading を使用したデータ処理 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Cascading を使用したデータ処理 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Cascading は、Hadoop MapReduce アプリケーションの作成と実行に使用するクエリ API、ク エリプランナー、およびジョブスケジューラーを提供するオープンソースの Java ライブラリで す。Cascading を使用して開発されたアプリケーションは、他のネイティブ Hadoop アプリケー ションと同様に、コンパイルおよびパッケージ化されて標準的な Hadoop 互換 JAR ファイルにな ります。Cascading ステップは、Amazon EMR コンソールではカスタム JAR として送信されま す。Cascading の詳細については、http://www.cascading.org を参照してください。 トピック • Cascading ステップの送信 (p. 243) Cascading ステップの送信 このセクションでは、Cascading ステップを送信するための基本について説明します。 コンソールを使用した Cascading ステップの送信 この例では、Amazon EMR コンソールを使用して、Cascading ステップをカスタム JAR ファイルと して実行中のクラスターに送信する方法について説明します。 コンソールを使用して Cascading ステップを送信するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] で、クラスターの名前をクリックします。 3. [Steps] セクションまでスクロールして展開し、[Add step] をクリックします。 4. [Add Step] ダイアログで: • [Step type] で、[Custom jar] を選択します。 • [Name] には、デフォルト名(Custom jar)を使用または新しい名前を入力します。 • [JAR location] には、スクリプトの場所を入力または参照します。パスの値は BucketName/path/ScriptName という書式で指定する必要があります。 • [Arguments] は、フィールドを空のままにします。 • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 5. [Add] をクリックします。ステップは、[Pending] というステータスでコンソールに表示されま す。 6. ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] アイコンをク リックします。 243 Amazon EMR 開発者ガイド カスタム JAR でのデータの処理 AWS CLI を使用したクラスターの起動と Cascading ステップ の送信 この例では、AWS CLI を使用して、クラスターを作成し、Cascading ステップを送信する方法につい て説明します。Cascading SDK には、Cascading と、Multitool や Load などの Cascading ベースの ツールが含まれています。詳細については、http://www.cascading.org/sdk/ を参照してください。 クラスターを作成し、AWS CLI を使用して Cascading ステップを送信するには • クラスターを起動し、Cascading ステップを送信するには、次のコマンドを入力します。myKey を EC2 キーペアの名前に置き換え、mybucket を Amazon S3 バケットの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 2.4 -applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --bootstrap-actions Path=pathtobootstrapscript,Name="CascadingSDK" \ --steps Type="CUSTOM_JAR",Name="Cascading Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,\ Args=["-input","pathtoinputdata","output","pathtooutputbucket","arg1","arg2"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 2.4 -applications Name=Hive Name=Pig --use-default-roles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 -bootstrap-actions Path=pathtobootstrapscript,Name="CascadingSDK" --steps Type="CUSTOM_JAR",Name="Cascading Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["input","pathtoinputdata","-output","pathtooutputbucket","arg1","arg2"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 カスタム JAR でのデータの処理 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 244 Amazon EMR 開発者ガイド カスタム JAR ステップの送信 カスタム JAR では、Amazon S3 にアップロードされたコンパイル済みの Java プログラムを実行しま す。起動する Hadoop のバージョンに合わせてプログラムをコンパイルし、Amazon EMR クラスター に CUSTOM_JAR ステップを送信します。JAR ファイルのコンパイルの詳細については、「Amazon EMR を使用したバイナリの構築 (p. 235)」を参照してください。 Hadoop MapReduce アプリケーションのビルドの詳細については、http://hadoop.apache.org/docs/ stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html を参照してく ださい。 カスタム JAR ステップの送信 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、Amazon EMR でのカスタム JAR ステップの送信の基本情報について説明しま す。カスタム JAR ステップを送信する場合は、データを処理するスクリプトを Java プログラミング 言語で記述できます。 コンソールを使用したカスタム JAR ステップの送信 この例では、Amazon EMR コンソールを使用して、実行中のクラスターにカスタム JAR ステップを 送信する方法について説明します。 コンソールを使用してカスタム JAR ステップを送信するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] で、クラスターの名前を選択します。 3. [Steps] セクションまでスクロールして展開し、[Add step] を選択します。 4. [Add Step] ダイアログで: • [Step type] で、[Custom JAR] を選択します。 • [Name] では、デフォルト名(Custom JAR)を使用するか、または新しい名前を入力します。 • [JAR S3 location] では、JAR ファイルの場所を入力または参照します。値は s3://BucketName/path/JARfile という書式で指定する必要があります。 • [Arguments] では、必要な引数をスペース区切りの文字列として入力するか、フィールドを空 のままにします。 • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 5. [Add] を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。 6. ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] アイコンを選択 します。 AWS CLI を使用して、クラスターを起動しカスタム JAR ス テップを送信する AWS CLI を使用して、クラスターを起動し、カスタム JAR ステップを送信するには AWS CLI を使用して、クラスターを起動し、カスタム JAR ステップを送信するには、createcluster サブコマンドを入力し、--steps パラメーターを指定します。 • クラスターを起動し、カスタム JAR ステップを送信するには、次のコマンドを入力し、myKey を EC2 キーペア名に置き換え、mybucket をバケット名に置き換えます。 245 Amazon EMR 開発者ガイド カスタム JAR ステップの送信 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,\ Args=["pathtoinputdata","pathtooutputbucket","arg1","arg2"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=CUSTOM_JAR,Name="Custom JAR Step",ActionOnFailure=CONTINUE,Jar=pathtojarfile,Args=["pathtoinputdata","pathtooutpu Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「 aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 246 Amazon EMR 開発者ガイド Amazon EMR Hive と Apache Hive の違い Hive と Amazon EMR (EMR 3.x リ リース) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hive はオープンソースのデータウェアハウス兼分析パッケージで、Hadoop 上で動作します。Hive スクリプトは、Hive QL(クエリ言語)という SQL に似た言語を使用しています。この言語は MapReduce プログラミングモデルを抽象化しており、データウェアハウスとの一般的なやりとりを サポートします。Hive を使用すると、MapReduce プログラムを Java などの低レベルコンピュータ言 語で記述する複雑さを避けることができます。 Hive は、シリアライズ形式を取り込み、マッパーおよびリデューサースクリプトを起動できるように することで、SQL の枠組みを拡張しています。基本的な値タイプ(日付、数値、文字列など)しかサ ポートしていない SQL と異なり、Hive のテーブルに含まれる値は、JSON オブジェクト、ユーザー 定義のデータタイプ、Java で記述された関数など、構造化された要素です。 Hive の詳細については、http://hive.apache.org/ を参照してください。 トピック • Amazon EMR Hive と Apache Hive の違い (p. 247) • サポートされる Hive のバージョン (p. 258) • Hive の作業を送信する (p. 266) • クラスター外部の Hive メタストアの作成 (p. 268) • Hive JDBC ドライバの使用 (p. 271) Amazon EMR Hive と Apache Hive の違い このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • 結合と分割の入力形式 (p. 248) • ログファイル (p. 248) • Thrift サービスポート (p. 249) 247 Amazon EMR 開発者ガイド 結合と分割の入力形式 • Hive 認可 (p. 249) • Amazon S3 での Hive ファイルマージ動作 (p. 250) • ACID トランザクションおよび Amazon S3 (p. 250) • Amazon EMR での Hive の追加機能 (p. 250) このセクションでは、Amazon EMR Hive インストールと http://svn.apache.org/viewvc/hive/branches/ で入手できるデフォルトバージョンの Hive との違いについて説明します。 Note Amazon EMR 上の Hive 0.13.1 では、Amazon EMR の以前のバージョンの Hive で導入され た特定のオプションが、Apache Hive とのパリティを優先して削除されました。たとえば、x オプションは削除されています。 結合と分割の入力形式 Hive クラスターの中に大量の GZip がある場合は、個々のマッパーに複数のファイルを渡すこと によってパフォーマンスを最適化できます。これにより、クラスターの中で必要とされるマッ パーの数が減り、クラスターをより早く完了することができます。これを行うには、Hive が HiveCombineSplitsInputFormat 入力形式を使用するように指定し、分割サイズをバイト単位で 指定します。これを次の例で示します hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveCombineSplitsInputFormat; hive> set mapred.min.split.size=100000000; Note この機能は Hive 0.13.1 で廃止されました。同じ分割入力形式の機能を得るには、 set hive.hadoop.supports.splittable.combineinputformat=true; を使用します。 ログファイル Apache Hive では、/tmp/{user.name}/ に hive.log という名前でログファイルが保存されま す。Amazon EMR では、Hive ログは /mnt/var/log/apps/ に保存されます。Hive の複数のバー ジョンを同時にサポートするために、ログファイル名は次の表に示すように、実行する Hive のバー ジョンによって異なります。 Hive のバージョン ログファイル名 0.13.1 hive.log Note Amazon EMR では、今後はバージョニング無効の hive.log が使用されます。マイナーバージョンは、メ ジャーバージョンと同じログの場所をすべて共有しま す。 248 Amazon EMR 開発者ガイド Thrift サービスポート Hive のバージョン ログファイル名 0.11.0 hive_0110.log Note 0.11.0.1 のような Hive 0.11.0 のマイナーバージョンで は、ログファイルの場所は Hive 0.11.0 と同じです。 0.8.1 hive_081.log Note Hive 0.8.1.1 のような Hive 0.8.1 のマイナーバージョンで は、ログファイルの場所は Hive 0.8.1 と同じです。 0.7.1 hive_07_1.log Note Hive 0.7.1.3 や Hive 0.7.1.4 といった Hive 0.7.1 のマイ ナーバージョンでは、ログファイルの場所は Hive 0.7.1 と同じです。 0.7 hive_07.log 0.5 hive_05.log 0.4 hive.log Thrift サービスポート Thrift は RPC のフレームワークで、これによって定義されるコンパクトなバイナリシリアライズ形式 を使用して、後から分析に使用するためのデータ構造を維持します。通常、Hive は次のポートで稼働 するようにサーバーを設定します. Hive のバー ジョン ポート番号 Hive 0.13.1 10000 Hive 0.11.0 10004 Hive 0.8.1 10003 Hive 0.7.1 10002 Hive 0.7 10001 Hive 0.5 10000 thrift サービスの詳細については、http://wiki.apache.org/thrift/ を参照してください。 Hive 認可 Amazon EMR は、EMRFS と Amazon S3 ではなく HDFS の Hive 認可をサポートします。Amazon EMR クラスターは、デフォルトで認可が無効な状態で実行されます。 249 Amazon EMR 開発者ガイド Amazon S3 での Hive ファイルマージ動作 Amazon S3 での Hive ファイルマージ動作 Apache Hive は hive.merge.mapfiles が true の場合はマップのみジョブの最後に小さいファイル をマージし、マージはジョブの平均出力サイズが hive.merge.smallfiles.avgsize 設定未満の場 合にのみトリガされます。最終出力パスが HDFS 内の場合は Amazon EMR Hive の動作はまったく同 じですが、出力パスが Amazon S3 内の場合は hive.merge.smallfiles.avgsize パラメーターは 無視されます。その場合、hive.merge.mapfiles が true に設定されているとマージタスクが常に トリガされます。 ACID トランザクションおよび Amazon S3 ACID(不可分性、整合性、分離性、耐久性)トランザクションは、Amazon S3 に保存された Hive データを使用してサポートされます。Amazon S3 でトランザクションテーブルを作成しようとする と、例外が発生します。 Amazon EMR での Hive の追加機能 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は、Amazon Simple Storage Service (Amazon S3) や DynamoDB への読み取りや書き 込みの機能など、他の AWS サービスとの Hive の統合をサポートする新機能で Hive を拡張します。 これらの追加機能がサポートされている Hive のバージョンについては、Hive のパッチ (p. 256) を 参照してください。 トピック • Amazon S3 にデータを直接書き込む (p. 250) • Hive を使用して Amazon S3 内のリソースにアクセスする (p. 251) • Hive を使用してパーティションを復元する (p. 251) • Hive の変数 (p. 251) • 部分 DynamoDB スキーマに対応するための Amazon EMR Hive クエリ (p. 254) • 異なる AWS リージョン内の DynamoDB テーブル間でデータをコピーする (p. 255) • テーブルごとに DynamoDB スループット値を設定する (p. 256) • Hive のパッチ (p. 256) Amazon S3 にデータを直接書き込む Hadoop Distributed File System(HDFS)および Amazon S3 の扱いは、Amazon EMR と Hive とで異 なります。Amazon EMR でインストールされるバージョンの Hive は、一時ファイルを使用せずに直 接 Amazon S3 に書き込める機能によって拡張されています。これによってパフォーマンスは大幅に 向上しますが、これは HDFS と Amazon S3 の動作が Hive 内で異なることを意味します。 Hive から Amazon S3 に直接書き込まれることの結果として、Amazon S3 内に存在するテーブルに対 しては、同じ Hive ステートメント内で読み取りと書き込みを実行することはできません。次の例は、 複数の Hive ステートメントを使用して Amazon S3 内のテーブルを更新する方法を示しています。 Hive を使用して Amazon S3 内のテーブルを更新するには 1. Hive プロンプトまたはスクリプトから、クラスターのローカル HDFS ファイルシステム内に一時 テーブルを作成します。 250 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 2. Hive クエリの結果を一時テーブルに書き込みます。 3. 一時テーブルの内容を Amazon S3 にコピーします。これを次の例で示します。 CREATE TEMPORARY TABLE tmp LIKE my_s3_table; INSERT OVERWRITE TABLE tmp SELECT ....; INSERT OVERWRITE TABLE my_s3_table SELECT * FROM tmp; Hive を使用して Amazon S3 内のリソースにアクセスする Amazon EMR にインストールされているバージョンの Hive を使用すると、Amazon S3 内に置かれて いる JAR ファイルなどのリソースを参照できます。 add jar s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar また、Amazon S3 内に置かれているスクリプトを参照して、カスタムのマップおよびリデュース操作 を実行できます。これを次の例で示します。 from logs select transform (line) using 's3://mybucket/scripts/parse-logs.pl' as (time string, exception_type string, exception_details string) Hive を使用してパーティションを復元する Hive クエリ言語に、Amazon S3 内にあるテーブルデータからテーブルのパーティションを復元する ステートメントを追加しました。次の例でこれを示します。 CREATE EXTERNAL TABLE (json string) raw_impression PARTITIONED BY (dt string) LOCATION 's3://elastic-mapreduce/samples/hive-ads/tables/impressions'; ALTER TABLE logs RECOVER PARTITIONS; パーティションのディレクトリおよびデータは、テーブル定義で指定された場所に格納し、名前は Hive の表記規則に従って、dt=2009-01-01 のように記述する必要があります。 Note Hive 0.13.1 以降では、この機能は msck repair table を使用してネイティブにサポー トされるため、recover partitions はサポートされません。詳細については、「https:// cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL」を参照してください。 Hive の変数 Hive の引数スクリプト内で変数を使用するには、ドル記号と中括弧を使用します。 251 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 add jar ${LIB}/jsonserde.jar これらの変数の値を Hive に渡すには、次の例で示すようにコマンドラインで -d パラメーターを使用 します。 -d LIB=s3://elasticmapreduce/samples/hive-ads/lib また、Hive スクリプトを実行するステップに値を渡すこともできます。 コンソールを使用して Hive のステップに変数値を渡すには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. 3. [Create cluster] を選択します。 [Steps] セクションの [Add Step] で、リストから [Hive Program] を選択し、[Configure and add] を選択します。 4. [Add Step] ダイアログで、次の表を参考にしながらパラメーターを指定し、[Add] を選択します。 フィールド アクション スクリプト S3 場所* Amazon S3 でスクリプトがある場所の URI を指定します。パスの値は BucketName/path/ScriptName という書式で指定する必要がありま す。たとえば、s3://elasticmapreduce/samples/hive-ads/libs/ response-time-stats.q です。 S3 の場所の入 力 Amazon S3 で入力ファイルがある場所の URI を指定します(オプショ ン)。値は BucketName/path という書式で指定する必要があります。指定 すると、この値は INPUT という名前のパラメーターとして Hive スクリプト に渡されます。たとえば、s3: //elasticmapreduce/samples/hiveads/tables/ です。 S3 の場所の出 力 Amazon S3 で出力を格納する場所の URI を指定します(オプション)。値 は BucketName/path という書式で指定する必要があります。指定すると、 この値は OUTPUT という名前のパラメーターとして Hive スクリプトに渡さ れます。たとえば、s3://mybucket/hive-ads/output/ です。 引数 引数のリスト(スペース区切りの文字列)を入力し、Hive に渡します(オプ ション)。${SAMPLE} という名前の Hive スクリプトでパス変数を定義した 場合の例: CREATE EXTERNAL TABLE logs (requestBeginTime STRING, requestEndTime STRING, hostname STRING) PARTITIONED BY (dt STRING) \ ROW FORMAT serde 'com.amazon.elasticmapreduce.JsonSerde' WITH SERDEPROPERTIES ( 'paths'='requestBeginTime, requestEndTime, hostname' ) LOCATION '${SAMPLE}/tables/ impressions'; ) 変数の値を渡すには、[Arguments] ウィンドウに次のように入力します。 -d SAMPLE=s3://elasticmapreduce/samples/hive-ads/. 252 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 フィールド アクション Action on Failure エラーに反応しているクラスターを判断します。この設定に使用できる値は 次のとおりです。 • Terminate cluster: ステップが失敗した場合、クラスターを停止します。 クラスターの停止保護が有効で、キープアライブが有効な場合は、クラス ターは停止されません。 • Cancel and wait: ステップが失敗した場合、残りのステップをキャンセル します。クラスターのキープアライブが有効な場合、クラスターは停止さ れません。 • Continue: ステップが失敗した場合、次のステップに進みます。 5. 必要に応じて値を選択し、[Create cluster] を選択します。 AWS CLI を使用して Hive のステップに変数値を渡すには AWS CLI を使用して Hive のステップに変数値を渡すには、--steps パラメーターを使用し、引数リ ストを含めます。 • AWS CLI を使用して Hive のステップに変数を渡すには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換え、mybucket をバケット名に置き換えます。この例で、SAMPLE は、 先頭に -d スイッチが付いた変数の値です。この変数は Hive スクリプトで ${SAMPLE} のように 定義されます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3:// mybucket/hive-ads/output/,-d,SAMPLE=s3://elasticmapreduce/samples/hiveads/] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.9 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[f,s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q,d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3:// mybucket/hive-ads/output/,-d,SAMPLE=s3://elasticmapreduce/samples/hiveads/] Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 253 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Java SDK を使用して Hive のステップに変数値を渡すには • 次の例は、SDK を使用してステップに変数を渡す方法を示しています。詳細については、「AWS SDK for Java API Reference」の「Class StepFactory」を参照してください。 StepFactory stepFactory = new StepFactory(); StepConfig runHive = new StepConfig() .withName("Run Hive Script") .withActionOnFailure("TERMINATE_JOB_FLOW") .withHadoopJarStep(stepFactory.newRunHiveScriptStep(“s3://mybucket/ script.q”, Lists.newArrayList(“-d”,”LIB= s3://elasticmapreduce/samples/hiveads/lib”)); 部分 DynamoDB スキーマに対応するための Amazon EMR Hive クエリ このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR Hive は、DynamoDB テーブルをクエリすると、すべての列をクエリに含める必要はな く、データをフィルタできる列のサブセットを指定できるので、柔軟性が最大になります。この部分 スキーマクエリの手法は、スパースデータベーススキーマを使用し、タイムスタンプでのフィルタの ように少数の列に基づいてレコードをフィルタする場合に効果的です。 以下の例では、Hive クエリの使用方法を示します。 • DynamoDB テーブルを作成します。 • DynamoDB で項目(行)のサブセットを選択し、データを特定の列までさらに絞り込みます。 • 結果のデータを Amazon S3 にコピーします。 DROP TABLE dynamodb; DROP TABLE s3; CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, fullColumn map<String, String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.throughput.read.percent" = ".1000", 254 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); CREATE EXTERNAL TABLE s3(map<String, String>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE s3 SELECT item fullColumn FROM dynamodb WHERE recordTimeStamp < "2012-01-01"; 次の表では、DynamoDB から項目の任意の組み合わせを選択するためのクエリ構文を示します。 クエリの例 結果の説明 SELECT * FROM table_name; 特定のテーブルからすべての項目(行)を選択し、 それらの項目で使用できるすべての列のデータを含 めます。 SELECT * FROM table_name WHERE field_name =value; 特定のテーブルから一部の項目(行)を選択し、そ れらの項目で使用できるすべての列のデータを含め ます。 SELECT column1_name, column2_name, column3_name FROM table_name; 特定のテーブルからすべての項目(行)を選択し、 それらの項目で使用できる一部の列のデータを含め ます。 SELECT column1_name, column2_name, column3_name FROM table_name WHERE field_name =value; 特定のテーブルから一部の項目(行)を選択し、そ れらの項目で使用できる一部の列のデータを含めま す。 異なる AWS リージョン内の DynamoDB テーブル間でデータ をコピーする Amazon EMR Hive には、DynamoDB テーブルごとに設定できる dynamodb.region プロパティがあ ります。2 つのテーブルで dynamodb.region の設定が異なると、指定されたリージョンの間でテー ブル間のデータのコピーが自動的に行われます。 次の例では、dynamodb.region プロパティが設定された Hive スクリプトを含む DynamoDB テーブ ルの作成方法を示します。 Note テーブルリージョンごとのプロパティは、グローバル Hive プロパティをオーバーライドしま す。 CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.region" = "eu-west-1", "dynamodb.throughput.read.percent" = ".1000", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); 255 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 テーブルごとに DynamoDB スループット値を設定する Amazon EMR Hive では、テーブル定義で DynamoDB の readThroughputPercent および writeThroughputPercent をテーブルごとに設定できます。以下の Amazon EMR Hive スクリプト では、スループット値の設定方法を示します。DynamoDB スループット値の詳細については、 「Specifying Read and Write Requirements for Tables」を参照してください。 CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ( "dynamodb.table.name" = "myTable", "dynamodb.throughput.read.percent" = ".4", "dynamodb.throughput.write.percent" = "1.0", "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); Hive のパッチ Amazon EMR チームは、Hive 向けに以下のパッチを作成しています。 パッチ 説明 Amazon S3 への書き込み HDFS と Amazon S3 など、異なるファイルシステム間でのデー タの移動をサポート。"move" 操作を提供していないファイルシス テム(Amazon S3 など)向けのサポートを追加。同じ場所の間で のデータの移動など、無駄な操作を削除。 ステータス: 提出済み 修正対象の AWS Hive のバージョン: 0.4 修正対象の Apache Hive のバージョン: n/a(HIVE-2318) Amazon S3 内でのスクリプト Hive が Amazon S3 バケットに Hive スクリプトをダウンロード して実行可能。スクリプトを実行する前に HDFS にコピーするス テップを省略。 Status: コミット済み 修正対象の AWS Hive のバージョン: 0.4 修正対象の Apache Hive のバージョン: 0.7.0(HIVE-1624) パーティションの復元 Amazon S3 内のテーブルデータおよび HDFS 内の Hive テーブル データからパーティションを復元可能。 Status: 未提出 修正対象の AWS のバージョン: 0.4 修正対象の Apache Hive のバージョン: n/a Hive の変数 Hive の変数を管理するための独立した名前空間を(HiveConf とは別に)作成。コマンドラインで '-define x=y' または 'set hivevar:x=y' を使用することによって変数を設定する 機能を追加。ステートメントで '${var_name}' を使用する ことによって変数を参照する機能を追加。'set -v' の出力で hiveconf、hivevar、system、environment の各プロパティを区別 する手段を提供。 Status: コミット済み 修正対象の AWS Hive のバージョン: 0.4 修正対象の Apache Hive のバージョン: 0.8.0(HIVE-2020) 256 Amazon EMR 開発者ガイド Amazon EMR での Hive の追加機能 パッチ 説明 Amazon S3 に書き込み中の進 行状況のレポート FileSinkOperator では、大きなファイルへの書き込み中、タスク がキルされないように進行状況をレポート。 Status: 未提出 修正対象の AWS のバージョン: 0.5 修正対象の Apache Hive のバージョン: n/a 圧縮の変数の修正 FileSinkOperator で圧縮の値が正しく設定されず、圧縮されない ファイルが発生する問題を修正。 ステータス: 提出済み 修正対象の AWS Hive のバージョン: 0.5 修正対象の Apache Hive のバージョン: n/a(HIVE-2266) null のパーセンタイルを許容す るように UDAFPercentile を修 正 null のパーセンタイルリストが渡されると UDAFPercentile が null ポインタ例外をスローする問題を修正。 DoubleWritable クラスの hashCode メソッドの修正 Hive の DoubleWritable の hashCode() メソッドを修正し て、HashMap(タイプ: DoubleWritable)が LinkedList のように 動作することを防止。 Status: コミット済み 修正対象の AWS Hive のバージョン: 0.5 修正対象の Apache Hive のバージョン: 0.8.0(HIVE-2298) Status: コミット済み 修正対象の AWS Hive のバージョン: 0.7 修正対象の Apache Hive のバージョン: 0.7.0(HIVE-1629) パーティションの復元、バー ジョン 2 メモリ使用量の少ない Recover Partitions の改良バージョン。 HAVING 句 式で HAVING 句を使用することによりグループで直接フィルタ リング(クエリのネストではなく)。HAVING 式を利用する他の データ分析ツールと Hive を統合。 Status: 未提出 修正対象の AWS のバージョン: 0.7 修正対象の Apache Hive のバージョン: n/a Status: コミット済み 修正対象の AWS Hive のバージョン: 0.7 修正対象の Apache Hive のバージョン: 0.7.0(HIVE-1790) Hive クエリのパフォーマンス 向上 多数のパーティションにまたがるクエリの起動時間を短縮。 Status: コミット済み 修正対象の AWS Hive のバージョン: 0.7.1 修正対象の Apache Hive のバージョン: 0.8.0(HIVE-2299) 257 Amazon EMR 開発者ガイド サポートされる Hive のバージョン パッチ 説明 Amazon S3 クエリでの Hive ク エリのパフォーマンスの向上 Amazon S3 クエリの起動時間を短縮。最適化を有効にするために Hive.optimize.s3.query=true を設定。 最適化フラグは、パーティションが標準的な Hive パーティショ ン形式 "HIVE_TABLE_ROOT/partititon1=value1/partition2=value2" で格納されていることを前提にしています。これは、Hive でカス タムの場所を指定せずにパーティションを作成するときに使用さ れる形式です。 最適化されたクエリでは、パーティションにこれと同じプレ フィックス HIVE_TABLE_ROOT をコマンドプレフィックスとし て使用する必要があります。 Status: 未提出 修正対象の AWS のバージョン: 0.7.1 修正対象の Apache Hive のバージョン: n/a Hive スクリプト内のコメント のスキップ コメント行で Hive スクリプトが失敗する問題を修正。Hive スク リプトはコメント行をスキップするようになりました。 Status: コミット済み コミット済み 修正対象の AWS Hive のバージョン: 0.7.1 修正対象の Apache Hive のバージョン: 0.8.0(HIVE-2259) パーティションの復元に対する 制限 Amazon S3 からパーティションを復元する際に、復元対象のパー ティションが多い場合のパフォーマンスを向上。 Status: 未提出 修正対象の AWS のバージョン: 0.8.1 修正対象の Apache Hive のバージョン: n/a サポートされる Hive のバージョン Amazon EMR でのデフォルト設定は、最新バージョンの AMI で実行される最新バージョンの Hive で す。以下のバージョンの Hive を使用できます。 Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 0.13.1 2.4.0 以下の機能、拡張された機能、および以前のバージョンとの非互 換性が導入されました。詳細については、「Apache Hive 0.13.1 リリースノート」および「Apache Hive 0.13.0 リリースノート」 を参照してください。 • ベクター化されたクエリ: 行単位に処理するのではなく、数千行 のブロックを処理します。 • インメモリキャッシュ: すばやく読み取るためにホットデータを メモリ内に保持します。 • さらに高速化された計画のシリアル化 • DECIMAL および CHAR データ型のサポート • IN、NOT IN、EXISTS、および NOT EXISTS に対するサブクエ リ(相関および非相関) 258 Amazon EMR 開発者ガイド サポートされる Hive のバージョン Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 • WHERE 句内の JOIN 条件 Amazon EMR に関連するその他の機能: • Hive ウィンドウ関数に対する最適化機能が含まれており、この 関数の処理を大きなデータセットへ拡張することができます。 以前のバージョンとの非互換性(重要): • クエリが失敗した場合に Amazon S3 バケットにエラーログ をプッシュするための -el フラグがサポートされなくなりまし た。 • RECOVER PARTITION 構文がサポートされなくなりました。 代わりに、ネイティブ機能である MSCK REPAIR を使用してく ださい。 • "Round(sum( c ),2) over w1" が "round(sum( c ) over w1,2)" に変 更されました(数か所)。この構文は Hive 0.12 で変更されま した。「HIVE-4214」を参照してください。 • DECIMAL のデフォルトの精度とスケールが変更されました。 以前のバージョンの Hive と比較すると、Hive 13 の DECIMAL は DECIMAL(10,0) になっています。 • RCFile に基づくテーブルのデフォルトの SerDe が、Apache Hive 0.12 以降では LazyBinaryColumnarSerDe にな りました。これは、Hive バージョン 0.12 以降で作成さ れたテーブルは、hive.default.rcfile.serde が org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe に設定されていない場合、Hive 0.11 で生成されたデータファ イルを正しく読み取ることができないことを示しています。 「HIVE-4475」を参照してください。 その他の注意事項と既知の問題: • Hive データベースがカスタムの場所で作成された場 合、CREATE TABLE AS SELECT(CTAS)オペレーショ ンではそのテーブルが無視されます。このオペレーション では、データベースのプロパティではなく、パラメーター hive.metastore.warehouse.dir から場所を取得します。 「HIVE-3486」を参照してください。 • テーブルにデータを読み込むとき、別のファイルを指定 して OVERWRITE を使用しても、上書きはされません。 「HIVE-6209」を参照してください。 • Amazon EMR では HiveServer2 を使用するため、ユーザー名 は、パスワードを指定せずに hadoop にする必要があります。 以下の Hive 0.14.0 パッチが、このリリースに移植されました。 • • • • HIVE-6367 HIVE-6394 HIVE-6783 HIVE-6785 259 Amazon EMR 開発者ガイド サポートされる Hive のバージョン Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 • HIVE-6938 0.11.0.2 1.0.3 2.2.0 以下の新機能および機能向上が導入されます。詳細については、 「Apache Hive 0.11.0 Release Notes」を参照してください。 • Parquet ライブラリを追加します。 • Amazon S3 でスキーマ URL を受け入れて、Avro シリアライ ザー/デシリアライザーに関連して問題を修正します。 • インデックス作成が有効な状態で Hive が正しくない結果を返す 問題を修正します。 • Hive のログレベルを DEBUG から INFO に変更します。 • Amazon S3 の動的なパーティションでファイルを削除中にタス クが進行を報告しないときに問題を修正します。 • この Hive バージョンでは以下の問題が修正されます。 • HIVE-4618 • HIVE-4689 • HIVE-4757 • HIVE-4781 • HIVE-4932 • HIVE-4935 • HIVE-4990 • HIVE-5056 • HIVE-5149 • HIVE-5418 0.11.0.1 1.0.3 2.2.0 • 下位互換性のために symlink /home/hadoop/hive/lib/ hive_contrib.jar を作成します。 • IAM ロールでの Hive 0.11.0 のインストールを妨げる問題を修正 します。 260 Amazon EMR 開発者ガイド サポートされる Hive のバージョン Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 0.11.0 1.0.3 以下の新機能および機能向上が導入されます。詳細については、 「Apache Hive 0.11.0 Release Notes」を参照してください。 2.2.0 • hive.metastore.uris および hive.metastore.local の設定が簡単に なります。(HIVE-2585) • バイナリ型の内部表現が byte[] に変わります。(HIVE-3246) • HiveStorageHandler.configureTableJobProperties() がハンドラ に設定が入力か出力かを通知できます。(HIVE-2773) • 環境コンテキストがメタストアの Thrift 呼び出しに追加されま す。(HIVE-3252) • 新しい最適化された行列ファイル形式が追加されます。 (HIVE-3874) • TRUNCATE が実装されます。(HIVE-446) • LEAD/LAG/FIRST/LAST 分析ウィンドウイング機能が追加され ます。(HIVE-896) • DECIMAL データ型が追加されます。(HIVE-2693) • Hive リストバケット/DML がサポートされます。 (HIVE-3073) • ファイル出力のカスタム区切り文字がサポートされます。 (HIVE-3682) • ALTER VIEW AS SELECT がサポートされます。 (HIVE-3834) • RC ファイルから列の非圧縮/圧縮サイズを取得するためのメ ソッドが追加されます。(HIVE-3897) • CLI によりパーティションのバケット/ソートメタデータを更新 できます。(HIVE-3903) • OVER 句およびパーティション関数で PARTITION BY/ORDER BY を使用できます。(HIVE-4048) • GROUP BY の構文が改善されます。(HIVE-581) • クエリプラン最適化ルールが追加されます。(HIVE-948) • CREATE TABLE LIKE コマンドで TBLPROPERTIES を受け取 ることができます。(HIVE-3527) • サブクエリでのソートマージ結合が修正されます。 (HIVE-3633) • パーティション列タイプの変更をサポートします。 (HIVE-3672) • mapjoin ヒントの強調が解除されます。(HIVE-3784) • パーティションメタデータを基に初期化するようにオブジェク トインスペクタが変更されます。(HIVE-3833) • マージマップジョブとマップリデュースジョブが追加されま す。(HIVE-3952) • hive.enforce.bucketing および hive.enforce.sorting 挿入が最適化されます。(HIVE-4240) 261 Amazon EMR 開発者ガイド サポートされる Hive のバージョン Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 0.8.1.8 1.0.3 • 異なるリージョンの DynamoDB テーブル間のデータコピー のサポートが追加されます。詳細については、「異なる AWS リージョン内の DynamoDB テーブル間でデータをコピーす る (p. 255)」を参照してください。 • すべての列を含めるのではなく、データをフィルタする列のサ ブセットを指定できるクエリの Amazon EMR Hive でのサポー トが追加されます。詳細については、「部分 DynamoDB ス キーマに対応するための Amazon EMR Hive クエリ (p. 254)」 を参照してください。 • 作成時にテーブルごとに DynamoDB readThroughputPercent および writeThroughputPercent 値を設定する機能が追加されま す。詳細については、「テーブルごとに DynamoDB スルー プット値を設定する (p. 256)」を参照してください。 • 入力パスの前にリストする多数のパスがある場合、Amazon S3 入力パスでのクエリがスタックする問題が修正されます。 262 Amazon EMR 開発者ガイド サポートされる Hive のバージョン Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 0.8.1.7 1.0.3 • LateralView で動作するように ColumnPruner が修正されま す。(HIVE-3226) • 正しい結果を返すように utc_from_timestamp および utc_to_timestamp が修正されます。(HIVE-2803) • 認可が有効な結合クエリでの NullPointerException エラーが修 正されます。(HIVE-3225) • ON 条件での mapjoin フィルタが改善されます。(HIVE-2101) • 結合ツリーをマージしながら OUTER JOIN 条件でフィルタを維 持します。(HIVE-3070) • explode で lateral view を使用したときの ConcurrentModificationException が修正されます。 (HIVE-2540) • テーブル名に大文字が含まれる場合にテーブルに挿入す ると既存のテーブルが上書きされる問題が修正されます。 (HIVE-3062) • クエリに複数の集計があるとジョブが失敗する問題が解決され ます。(HIVE-3732) • ネストされたユーザー定義集計関数(UDAF)での NullPointerException エラーが修正されます。(HIVE-1399) • ユーザー定義関数(UDF)の代わりにユーザー定義集計関数 (UDAF)を使用するとエラーメッセージが表示されます。 (HIVE-2956) • ナノ秒部分のないタイムスタンプ値で行の後続の列が分断され る問題が修正されます。(HIVE-3090) • 移動タスクが Hive CLI で設定された hive.exec.max.dynamic.partitions に対する変更を取得 しない問題が修正されます。(HIVE-2918) • メタストアからドロップパーティションを自動的に追加する機 能が追加されます。(HIVE-2777) • 非文字列パーティションのデータベースにパーティション削除 プッシュダウンが追加されます。(HIVE-2702) • hive.merge.mapfiles パラメーターを使用するマップにの み、ジョブの最後で Amazon S3 の小さいファイルをマージ するサポートが追加されます。出力パスが Amazon S3 内の 場合、hive.merge.smallfiles.avgsize の設定は無視さ れます。詳細は、「Amazon S3 での Hive ファイルマージ動 作 (p. 250)」と「Hive Configuration Variables」を参照してく ださい。 • INSERT OVERWRITE コマンドの後のジャンクファイルのク リーンアップが向上します。 0.8.1.6 1.0.3 • IAM ロールのサポートを追加。詳細については、「IAM および アプリケーションの Amazon EMR ロールを設定する (p. 186)」 を参照してください。 263 Amazon EMR 開発者ガイド サポートされる Hive のバージョン Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 0.8.1.5 1.0.3 • 新しい DynamoDB バイナリデータタイプのサポートを追加。 • パッチ Hive-2955 を追加。メタデータのみで構成されるクエリ が常に空の値を返す問題が修正されます。 • パッチ Hive-1376 を追加。"where false" 句を含むクエリによっ て生成される結果セットが空の場合に Hive がクラッシュする問 題が修正されます。 • RCFile と Amazon Simple Storage Service(Amazon S3)の対 話を修正。 • JetS3t を Java 用 AWS SDK に置き換え。 • DynamoDB への書き込みに BatchWriteItem を使用。 • Hive の map<string, string> カラムを使用した DynamoDB テーブルから Hive テーブルへのスキーマレスマッピングを追 加。 0.8.1.4 1.0.3 HBase クラスターで使用されている HBase のバージョンに合わ せて、Hive クラスター上の HBase クライアントをバージョン 0.92.0 に更新。これは、Hive クラスターから HBase クラスター に接続するときに発生していた問題を修正します。 0.8.1.3 1.0.3 Hadoop 1.0.3 のサポートを追加。 0.8.1.2 1.0.3、0.20.205 大きなクラスターにおける重複データの問題を修正。 0.8.1.1 1.0.3、0.20.205 MapR および HBase のサポートを追加。 0.8.1 1.0.3、0.20.205 新機能および機能向上。主なものは以下のとおりです。Hive 0.8.1 における変更の詳細なリストについては、「Apache Hive 0.8.1 Release Notes」を参照してください。 • Binary DataType のサポート(HIVE-2380) • Timestamp DataType のサポート(HIVE-2272) • プラグイン開発者キットの提供(HIVE-2244) • INSERT INTO append セマンティクスのサポート(HIVE-306) • パーティション別 SerDe のサポート(HIVE-2484) • インポート/エクスポート機能のサポート(HIVE-1918) • ビットマップインデックスのサポート(HIVE-1803) • RCFile ブロックマージのサポート(HIVE-1950) • Group By 最適化の導入(HIVE-1694) • HiveServer による -hiveconf オプションの受け入れ (HIVE-2139) • --auxpath オプションのサポート(HIVE-2355) • 新しい builtins サブプロジェクトの追加(HIVE-2523) • パーティションが存在すると insert overwrite table db.tname が 失敗する(HIVE-2617) • 複数の GZip ファイルを各マッパーに渡す新しい入力フォー マットを追加。必要なマッパーの数が減ります。(HIVE-2089) • JDBC ドライバの機能向上 (HIVE-559、HIVE-1631、HIVE-2000、HIVE-2054、HIVE-2144、HIVE-2153、HIV 264 Amazon EMR 開発者ガイド Hive のバージョンの表示 Hive のバー ジョン 互換性のある Hadoop のバー ジョン Hive のバージョンに関する注 0.7.1.4 0.20.205 Hive の "SET" コマンドによって現在のセッションの現在のデータ ベースが変更されるのを防止。 0.7.1.3 0.20.205 dynamodb.retry.duration オプションの追加。これを使用 すると、Amazon DynamoDB 内のテーブルに対する Hive クエ リを再試行するまでのタイムアウト時間を設定できます。この バージョンの Hive では、dynamodb.endpoint もサポートさ れます。これを使用すると、Hive テーブルに使用する Amazon DynamoDB のエンドポイントを指定できます。これらのパラメー ターの詳細については、Hive のオプション (p. 407)を参照して ください。 0.7.1.2 0.20.205 Amazon S3 で動的パーティションのファイル名を決定する方法 を変更。Amazon S3 での動的パーティション用のファイル名の 前に、一意の識別子が付加されます。Hive 0.7.1.2 を使用する と、set hive.exec.parallel=true を指定することにより複 数のクエリを同時に実行できます。また、スペアのデータセット で DynamoDB にアクセスするときのフィルタプッシュダウンに 関する問題も修正されています。 0.7.1.1 0.20.205 DynamoDB へのアクセスのサポートを開始。詳細について は、Amazon EMR による DynamoDB 内テーブルのエクスポー ト、インポート、クエリ、結合 (p. 395) を参照してください。 これは、Amazon EMR チームによって開発された 0.7.1 のマイ ナーバージョンです。Hive のバージョンとして指定すると、Hive 0.7.1.1 固有の値によって Hive 0.7.1 のディレクトリ構造と設定が 上書きされます。具体的には、Hive 0.7.1.1 は Apache Hive 0.7.1 に対応し、クラスターで Hive のサーバーポート、データベース、 および 0.7.1 のログの場所を使用します。 0.7.1 0.20.205、0.20、0.18 パーティションの数が多い場合、および Amazon S3 クエリの際 の Hive クエリのパフォーマンスを向上。コメント行をスキップす るように Hive を変更。 0.7 0.20、0.18 Recover Partitions の使用メモリが少なくなるように改 良、hashCode 方法を修正、式で HAVING 句を使用することによ りグループでフィルタリングする機能を導入。 0.5 0.20、0.18 FileSinkOperator に関する問題を修正し、null のパーセンタイルを 許容するように UDAFPercentile を変更。 0.4 0.20、0.18 Amazon S3 への書き込み機能の導入、Amazon S3 からの Hive ス クリプトの実行、Amazon S3 に格納されているテーブルデータか らのパーティションの回復。また、Hive 変数を管理するための独 立した名前空間も作成されます。 AWS CLI では、Hive の特定のバージョンのインストールがサポートされていません。AWS CLI を使 用している場合、デフォルトでは、AMI に含まれる最新バージョンの Hive がインストールされます。 Hive のバージョンの表示 コンソールを使用して、クラスターにインストールされている Hive のバージョンを確認できます。コ ンソールでは、Hive バージョンが [Cluster Details] ページに表示されます。[Configuration Details] 列 の [Applications] フィールドに Hive のバージョンが表示されます。 265 Amazon EMR 開発者ガイド Hive の複数バージョン間でデータを共有する Hive の複数バージョン間でデータを共有する Hive のバージョンをアップグレードすることにより、既存の Hive クラスターで Hive のバグ修正およ びパフォーマンス向上によるメリットを受けることができます。ただし、Hive はバージョンが違うと スキーマが異なります。2 つのバージョンの Hive の間でデータを共有するには、それぞれのバージョ ンの Hive で同じ LOCATION パラメーターを使用して外部テーブルを作成します。 Hive の複数のバージョン間でデータを共有するには 1 新しいバージョンの Hive でクラスターを開始します。この手順は、古いバージョンの Hive を使ったクラスターがすでに実行されていることを前提にしています。 2 2 つのクラスターがやり取りを行えるように設定します。 古いバージョンの Hive を使用するクラスターで、insert overwrite ディレクトリを、新し いバージョンの Hive を使用するクラスターの HDFS の場所に設定します。 3 データをエクスポートし、インポートし直します。 Hive の作業を送信する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、Amazon EMR クラスターに Hive の作業を送信する方法を示します。クラス ターに Hive の作業をインタラクティブに送信することも、コンソール、CLI、または API を使用して クラスターのステップとして作業を送信することもできます。クラスターが起動されるときにステッ プを送信するか、または実行中のクラスターにステップを送信できます。詳細については、「クラス ターへの作業の送信 (p. 504)」を参照してください。 Amazon EMR コンソールを使用して Hive の作業を 送信する この例では、Amazon EMR コンソールを使用し、実行中のクラスターに Hive のステップを送信する 方法について説明します。クラスターを起動するときにステップを送信する場合も、実行中のクラス ターに送信する場合も、コンソールにステップを追加する手順は同じです。 コンソールを使用して Hive ステップを送信するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] で、クラスターの名前をクリックします。 3. [Steps] セクションまでスクロールして展開し、[Add step] をクリックします。 4. [Add Step] ダイアログで: • [Step type] では、[Hive program] を選択します。 • [Name] では、デフォルト名(Hive program)を使用するか、または新しい名前を入力します。 • [Script S3 location] では、Hive スクリプトの場所を入力または参照します。 • [Input S3 location] では、入力データの場所を入力または参照します。 • [Output S3 location] では、Amazon S3 出力バケットの名前を入力または参照します。出力場所 の作成方法の詳細については、「出力の場所を準備する(オプション) (p. 173)」を参照して ください。 266 Amazon EMR 開発者ガイド AWS CLI を使用して Hive の作業を送信する • [Arguments] では、引数をスペース区切りの文字列として入力するか、フィールドを空のまま にします。 5. 6. • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 [Add] をクリックします。ステップは、[Pending] というステータスでコンソールに表示されま す。 ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] アイコンをク リックします。 AWS CLI を使用して Hive の作業を送信する これらの例では、AWS CLI を使用してクラスターに Hive の作業を送信する方法について説明しま す。CLI を使用して、クラスターの起動時にステップを送信したり、長時間稼働クラスターにステッ プを送信できます。 AWS CLI を使用して、クラスターを起動し、Hive ステップを送信するには クラスターが起動されたときに Hive のステップを送信するには、--steps パラメーターを入力 し、Type 引数を使用してステップタイプを入力し、必要な引数文字列を指定します。 • クラスターを起動して Hive のステップを送信するには、次のコマンドを入力します。必要に応じ て######を置き換えてください。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[f,pathtohivescript,-d,INPUT=pathtoinputdata,d,OUTPUT=pathtooutputbucket] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --amiversion 3.3 --applications Name=Hue Name=Hive Name=Pig -use-default-roles --ec2-attributes KeyName=myKey --instancetype m3.xlarge --instance-count 3 --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[-f,pathtohivescript,d,INPUT=pathtoinputdata,-d,OUTPUT=pathtooutputbucket] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと EC2 インスタンスプロファイルを 作成していない場合は、「aws emr create-default-roles」と入力してそれらを作 成してから、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、『AWS Command Line Interface Reference』を参照してください。 267 Amazon EMR 開発者ガイド クラスター外部の Hive メタストアの作成 AWS CLI を使用して実行中のクラスターに Hive ステップを追加するには 実行中のクラスターに Hive のステップを送信するには、--steps パラメーターを使用して addsteps サブコマンドを入力し、Type 引数を使用してステップタイプを表示して、必要な引数文字列 を指定します。 • 実行中のクラスターに Hive のステップを送信する場合、次のコマンドを入力しま す。j-2AXXXXXXGAPLF をクラスター ID に置き換え、[yourregion] をリージョンの名前に置 き換え、mybucket を Amazon S3 出力場所の名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr add-steps --cluster-id j-2AXXXXXXGAPLF \ --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[f,pathtohivescript,-d,INPUT=pathtoinputdata,d,OUTPUT=pathtooutputbucket] • Windows ユーザー: aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Hive,Name="Hive Program",ActionOnFailure=CONTINUE,Args=[f,pathtohivescript,-d,INPUT=pathtoinputdata,d,OUTPUT=pathtooutputbucket] AWS CLI での Amazon EMR コマンドの使用方法の詳細については、『AWS Command Line Interface Reference』を参照してください。 クラスター外部の Hive メタストアの作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hive は、マスタストア情報を MySQL データベースに記録します。データベースは、デフォルトでは マスターノードにあります。このメタストアには、入力ファイルに含まれるパーティションの名前、 データタイプなど、入力データに関する説明が格納されます。 クラスターが終了すると、関連するすべてのクラスターノードはシャットダウンされます。クラス ターノードに格納されているすべてのデータは、Hive メタストアも含めて削除されます。Amazon S3 バケットなどの他の場所に格納されている情報は残ります。 複数のクラスターで共通のデータを共有し、メタストアを更新している場合は、共有メタデータを持 続的なストレージに置く必要があります。 クラスター間でメタストアを共有するには、MySQL データベースのデフォルトの場所を Amazon RDS インスタンス上の外部の持続的ストレージの場所にオーバーライドします。 Note Hive では、メタストアテーブルに対する同時書き込みアクセスのサポートも防止も行いませ ん。クラスター間でメタストア情報を共有する場合は、同じメタストアテーブルに同時に書 き込まないようにする必要があります。これを守らないと、同じメタストアテーブルの異な るパーティションに書き込みが行われます。 268 Amazon EMR 開発者ガイド クラスター外部の Hive メタストアの作成 次の手順は、Hive メタストアの場所のデフォルト設定値をオーバーライドし、設定を変更した後のメ タストアの場所を使用してクラスターを開始する方法を示しています。 クラスターの外にメタストアを作成するには 1. MySQL データベースを作成します。 Relational Database Service(RDS)は、クラウドベースの MySQL データベースを提供していま す。Amazon RDS データベースの作成方法については、https://aws.amazon.com/rds/ を参照して ください。 2. MySQL データベースと ElasticMapReduce-Master セキュリティグループの間の JDBC 接続が許 可されるようにセキュリティグループを変更します。 アクセス用のセキュリティグループの変更方法については、https://aws.amazon.com/rds/faqs/ #security を参照してください。 3. JDBC 設定値は、hive-site.xml に格納されています。 a. 以下の情報を含む hive-site.xml 設定ファイルを作成します。 <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mariadb://hostname:3306/hive? createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</ description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> <description>Username to use against metastore database</ description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> <description>Password to use against metastore database</ description> </property> </configuration> < hostname> は、MySQL. を実行する Amazon RDS インスタンスの DNS アドレスで す。<username> と <password> は、MySQL データベースへの認証情報です。 JDBC ドライバは、Amazon EMR によってインストールされます。 Note 値のプロパティには、スペースや改行を含めることはできません。すべてを 1 行に する必要があります。 b. 4. Amazon S3 上の ###### hive-site.xmls3://mybucket/hive-site.xml ファイルを保存 します。 クラスターを作成して、新しい Hive 設定ファイルの Amazon S3 のロケーションを指定します。 AWS CLI AWS CLI を使用して設定ファイルの場所を指定するには、以下のコマンドを入力し、myKey を EC2 キーペアの名前に置き換え、mybucket を Amazon S3 バケット名に置き換えます。 269 Amazon EMR 開発者ガイド クラスター外部の Hive メタストアの作成 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --bootstrap-actions Name="Install Hive Site Configuration",Path="s3://region.elasticmapreduce/libs/hive/hivescript",\ Args=["--base-path","s3://elasticmapreduce/libs/hive","--installhive-site","--hive-site=s3://mybucket/hive-site.xml","--hiveversions","latest"] region は、クラスターを起動するリージョンです。 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.10 --applications Name=Hive Name=Pig --use-default-roles -ec2-attributes KeyName=myKey --instance-type m3.xlarge -instance-count 3 --bootstrap-actions Name="Install Hive Site Configuration",Path="s3://elasticmapreduce/libs/hive/hivescript",Args=["--base-path","s3://region.elasticmapreduce/libs/hive","-install-hive-site","--hive-site=s3://mybucket/hive-site.xml","--hiveversions","latest"] region は、クラスターを起動するリージョンです。 上で使用されている us-east-1 エンドポイント (https://s3.amazonaws.com/) は、クラスターがあ るリージョンのエンドポイント Amazon S3 で置き換える必要があります。 Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 5. クラスターのマスターノードに接続します。 マスターノードに接続するための手順については、「SSH を使用してマスターノードに接続す る (p. 459)」を参照してください。を参照してください。 6. 次のようなコマンドを入力することにより、Amazon S3 上の場所を指定して Hive テーブルを作 成します。 270 Amazon EMR 開発者ガイド Hive JDBC ドライバの使用 CREATE EXTERNAL TABLE IF NOT EXISTS table_name ( key int, value int ) LOCATION s3://mybucket/hdfs/ 7. 実行中のクラスターに Hive スクリプトを追加します。 Hive クラスターは、Amazon RDS に置かれたメタストアを使って実行されます。このメタストアを共 有する他の Hive クラスターはすべて、メタストアの場所を指定して起動します。 Hive JDBC ドライバの使用 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Microsoft Excel、MicroStrategy、QlikView、Tableau などの人気のビジネスインテリジェンスツール を Amazon EMR で使用して、データを調査しビジュアル化することができます。この種のツールの 多くは ODBC(Open Database Connectivity)または JDBC(Java Database Connectivity)ドライバ を必要とします。Amazon EMR は JDBC および ODBC 接続の両方をサポートします。 JDBC を介して Hive に接続するには、JDBC ドライバをダウンロードして、SQL クライアントをイ ンストールする必要があります。以下の例は、SQL Workbench/J を使用して、JDBC を使用している Hive に接続する方法を示しています。 JDBC ドライバをダウンロードするには アクセスする Hive のバージョンに対応しているドライバをダウンロードし、展開します。Hive バー ジョンは、Amazon EMR クラスターを作成するときに選択した AMI に応じて異なります。詳細につ いては、「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 • Hive 0.13.1 JDBC ドライバー: https://amazon-odbc-jdbc-drivers.s3.amazonaws.com/public/ AmazonHiveJDBC_1.0.4.1004.zip • Hive 0.11.0 JDBC ドライバ: https://aws.amazon.com/developertools/1982901737448217 • Hive 0.8.1 JDBC ドライバ: https://aws.amazon.com/developertools/4897392426085727 SQL Workbench をインストールして設定するには 1. 2. 3. オペレーティングシステム用の SQL Workbench/J クライアントを http://www.sql-workbench.net/ downloads.html からダウンロードします。 SQL Workbench/J のインストールおよび開始のページに移動し、SQL Workbench/J をシステム にインストールするための手順に従います。 • Linux、Unix、Mac OS X ユーザー: ターミナルセッションで、以下のコマンドを使用して、ク ラスターのマスターノードへの SSH トンネルを作成します。master-public-dns-name を マスターノードのパブリック DNS 名に置き換え、path-to-key-file を Amazon EC2 プラ イベートキー(.pem)ファイルの場所とファイル名に置き換えます。 Hive の コマンド バージョン 0.13.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10000:localhost:10000 hadoop@master-public-dns-name 271 Amazon EMR 開発者ガイド Hive JDBC ドライバの使用 Hive の コマンド バージョン 0.11.0 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10004:localhost:10004 hadoop@master-public-dns-name 0.8.1 ssh -o ServerAliveInterval=10 -i path-to-key-file -N -L 10003:localhost:10003 hadoop@master-public-dns-name • Windows ユーザー: PuTTY セッションで、以下の設定を使用して、クラスターのマスターノー ドへの SSH トンネルを作成します(ローカルポートフォワーディングを使用)。masterpublic-dns-name をマスターノードのパブリック DNS 名に置き換えます。マスターノード への SSH トンネルの作成の詳細については、オプション 1: ローカルポートフォワーディング を使用してマスターノードへの SSH トンネルをセットアップする (p. 466)を参照してくださ い。 Hive の トンネルの設定 バージョン 4. 0.13.1 ソースポート: 10000 送信先: master-public-dns-name:10000 0.11.0 ソースポート: 10004 送信先: master-public-dns-name:10004 0.8.1 ソースポート: 10003 送信先: master-public-dns-name:10003 SQL Workbench/J に JDBC ドライバを追加します。 a. [Select Connection Profile] ダイアログボックスで [Manage Drivers] をクリックします。 b. [Create a new entry](空白のページ)アイコンをクリックします。 c. [Name] フィールドに「Hive JDBC」と入力します。 d. [Library] で [Select the JAR file(s)] アイコンをクリックします。 e. 展開したドライバが含まれている場所を参照し、以下の JAR ファイルを選択して [Open] を クリックします。 Hive ドラ イババー ジョン 0.13.1 0.11.0 追加する JAR ファイル hive_metastore.jar hive_service.jar HiveJDBC3.jar libfb303-0.9.0.jar libthrift-0.9.0.jar log4j-1.2.14.jar ql.jar slf4j-api-1.5.8.jar slf4j-log4j12-1.5.8.jar TCLIServiceClient.jar hadoop-core-1.0.3.jar hive-exec-0.11.0.jar hive-jdbc-0.11.0.jar hive-metastore-0.11.0.jar hive-service-0.11.0.jar libfb303-0.9.0.jar commons-logging-1.0.4.jar 272 Amazon EMR 開発者ガイド Hive JDBC ドライバの使用 Hive ドラ イババー ジョン 追加する JAR ファイル slf4j-api-1.6.1.jar 0.8.1 f. hadoop-core-0.20.205.jar hive-exec-0.8.1.jar hive-jdbc-0.8.1.jar hive-metastore-0.8.1.jar hive-service-0.8.1.jar libfb303-0.7.0.jar libthrift-0.7.0.jar log4j-1.2.15.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar [Please select one driver] ダイアログボックスで以下のいずれかを選択し、[OK] をクリック します。 Hive の バージョ ン 0.13.1 0.11.0 0.8.1 ドライバのクラス名 com.amazon.hive.jdbc3.HS2Driver org.apache.hadoop.hive.jdbc.HiveDriver.jar org.apache.hadoop.hive.jdbc.HiveDriver.jar 5. [Manage Drivers] ダイアログボックスに戻ったら、[Classname] フィールドに値が設定されてい ることを確認し、[OK] をクリックします。 6. [Select Connection Profile] ダイアログボックスに戻ったら、[Driver] フィールドが [Hive JDBC] に 設定されていることを確認し、[URL] フィールドに JDBC 接続文字列を入力します。 Hive の バージョン URL 0.13.1 jdbc:hive2://localhost:10000/default 0.11.0 jdbc:hive://localhost:10004/default 0.8.1 jdbc:hive://localhost:10003/default Note クラスターが AMI バージョン 3.3.1 以降を使用している場合は、[Select Connection Profile] ダイアログボックスの [Username] フィールドに「hadoop」と入力します。 7. [OK] をクリックすると接続します。接続が完了すると、接続の詳細が SQL Workbench/J のウィ ンドウの上部に表示されます。 273 Amazon EMR 開発者ガイド Hive JDBC ドライバの使用 Hive と JDBC インターフェイスの使用の詳細については、http://wiki.apache.org/hadoop/Hive/ HiveClient および http://wiki.apache.org/hadoop/Hive/HiveJDBCInterface を参照してください。 274 Amazon EMR 開発者ガイド Apache Spark このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このドキュメントは、Amazon EMR の バージョン 4.x および 5.x を対象としています。Amazon EMR AMI バージョン 2.x および 3.x については、Amazon EMR 開発者ガイド (PDF) を参照してく ださい。 Apache Spark は、Amazon EMR クラスターの使用による機械学習、ストリーム処理、グラフ分析に 役立つクラスターフレームワークおよびプログラミングモデルです。Spark は、Apache Hadoop と 同様に、ビッグデータのワークロードを処理するために一般的に使用されているオープンソースの 分散処理システムです。ただし、Spark には Hadoop MapReduce との大きな違いがいくつかありま す。Spark は、最適化された Directed Acyclic Graph (DAG) 実行エンジンを備えており、データをイ ンメモリにアクティブにキャッシュするため、特に特定のアルゴリズムやインタラクティブクエリの 場合にパフォーマンスが向上します。 Spark は、Scala、Python、Java で記述されたアプリケーションをネイティブにサポート し、SQL(Spark SQL)、機械学習(MLlib)、ストリーム処理(Spark Streaming)グラフ処理 (GraphX)用の緊密に統合されたライブラリがいくつか用意されています。これらのツールを使用す ると、さまざまなユースケースで Spark フレームワークを活用しやすくなります。 Spark は、Amazon EMR で使用可能な他の Hadoop アプリケーションと同時にインストールするこ とができ、EMR ファイルシステム (EMRFS) を利用して Amazon S3 のデータに直接アクセスするこ とができます。Hive は、Spark とも統合されます。したがって、HiveContext オブジェクトを使用す ることで、Spark を使用して Hive スクリプトを実行できます。Hive コンテキストは、spark-shell に sqlContext として含められます。 Amazon EMR で Spark を使用する場合のエンドツーエンドの例を確認するには、AWS 公式ブログの 「新機能 - Amazon EMR の Apache Spark」を参照してください。 Amazon EMR で Spark を使用した機械学習の例を確認するには、AWS ビッグデータブログの 「Amazon EMR で Spark を使用した大規模機械学習」を参照してください。 トピック • Spark のインタラクティブな使用またはバッチモードでの使用 (p. 276) • Spark を使用したクラスターの作成 (p. 276) • Spark の設定 (EMR 3.x リリース) (p. 277) • Spark シェルへのアクセス (p. 279) 275 Amazon EMR 開発者ガイド Spark のインタラクティブな使 用またはバッチモードでの使用 • Spark アプリケーションの記述 (p. 280) • Spark ステップの追加 (p. 282) Spark のインタラクティブな使用またはバッチ モードでの使用 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR では、Spark アプリケーションを次の 2 つのモードで実行できます。 • インタラクティブ • バッチ コンソールまたは AWS CLI を使用して長時間稼働クラスターを起動する場合、マスターノードに Hadoop ユーザーとして SSH 接続し、Spark シェルを使用して Spark アプリケーションをインタラク ティブに開発したり実行したりすることができます。Spark をインタラクティブに使用すると、Spark アプリケーションのプロトタイプ作成やテストをバッチ環境より簡単に行うことができます。Spark アプリケーションをインタラクティブモードで正常に変更したら、そのアプリケーション のJAR ま たは Python プログラムを、Amazon S3 上のクラスターのマスターノードに対してローカルにある ファイルシステムに配置できます。その後、アプリケーションをバッチワークフローとして送信でき ます。シェルの操作方法の詳細については、「Spark シェルへのアクセス (p. 279)」を参照してくだ さい。 バッチモードで、Spark スクリプトを Amazon S3 またはローカルマスターノードファイルシステム にアップロードした後、作業をクラスターにステップとして送信します。Spark ステップは、長時間 稼働クラスターまたは一時的なクラスターに送信できます。クラスターに作業を送信する方法につい ては、「クラスターへの作業の送信 (p. 504)」を参照してください。長時間稼働クラスターの起動と Spark ステップの送信の例は、「Spark ステップの追加 (p. 282)」を参照してください。 Spark を使用したクラスターの作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 コンソールを使用し、Spark がインストールされた状態でクラスターを起動するには 次の手順では、Spark がインストールされたクラスターを作成します。コンソールを使用したクラス ター起動の詳細については、『Amazon EMR 管理ガイド』の「ステップ 3: Amazon EMR クラスター の起動 (p. 16) 。 1. 2. 3. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 [Create cluster] を選択します。 [Software Configuration] で、最新のリリースを選択します。 4. [Applications to be installed] で、リストから [Spark] を選択してから、[Configure and add] を選択 します。 引数を追加して Spark 設定を変更できます。詳細については、「Spark の設定 (EMR 3.x リリー ス) (p. 277)」を参照してください。[Add] を選択します。 5. 6. 必要に応じて他のオプションを選択し、[Create cluster] を選択します。 276 Amazon EMR 開発者ガイド Spark の設定 (EMR 3.x リリース) AWS CLI を使用し、Spark がインストールされたクラスターを起動するには • 次のコマンドを使用してクラスターを作成します。 aws emr create-cluster --name "Spark cluster" --ami-version 3.10.0 -applications Name=Spark \ --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --use-default-roles Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 SDK for Java を使用し、Spark がインストールされたクラスターを起動するには RunJobFlowRequest で使用される SupportedProductConfig を使用して Spark をアプリケー ションとして指定します。 • 次の Java プログラムの引用は、Spark のあるクラスターを作成する方法を示します。 AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); SupportedProductConfig sparkConfig = new SupportedProductConfig() .withName("Spark"); RunJobFlowRequest request = new RunJobFlowRequest() .withName("Spark Cluster") .withAmiVersion("3.11.0") .withNewSupportedProducts(sparkConfig) .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("myKeyName") .withInstanceCount(1) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m3.xlarge") ); RunJobFlowResult result = emr.runJobFlow(request); Spark の設定 (EMR 3.x リリース) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Spark の設定は、引数を指定してクラスターを作成するときに行う必要があります。Amazon EMR 上の Spark は、GitHub にあるブートストラップアクションに従って設定されます。CLI とコンソー ルは、そこに記載されたオプションを引数として受け入れます。Apache Spark ドキュメントの 「Spark 設定」にリストされたどのオプションでも設定できます。既存のクラスターのこれらの設定 は、$SPARK_CONF_DIR/spark-defaults.conf 設定ファイルで確認できます。 277 Amazon EMR 開発者ガイド Spark のデフォルト設定の変更 クラスターを作成するときには以下の引数を指定できます。 -d key=value SparkConf 設定を指定して spark-defaults.conf を上書きします。複数のオプションを指定 するには、キーと値の各ペアの前に -d を追加します。 -c S3_Path Amazon S3 に格納された spark-install 設定ファイルの場所。 -g -a Spark の Ganglia メトリクス設定をインストールします。 Spark クラスパスのすべてのシステム JAR の前に spark-assembly-*.jar を置きます。 -u S3_Path Spark クラスパスへの特定の S3 URI に JAR を追加します。このオプションは、-a と同時に指定 された場合は -a オプションより優先されます。追加された JAR は、spark-assembly-*.jar の前に配置されます。 -l logging_level ドライバの log4j.logger.org.apache.spark のログレベルを設定します。オプション は、OFF、ERROR、WARN、INFO、DEBUG、または ALL です。デフォルトは INFO です。 -h -x Spark に用意されている JAR の代わりに Amazon EMR カスタム Hive JAR を使用します。 専用 Spark ジョブを使用するためのデフォルト Spark 設定を設定します(例: ノードごとに 1 つ のエグゼキュータ、すべての vcore およびメモリ、すべてのコアノード)。 アプリケーションごとに動的に設定することもできます。詳細については、「Spark のデフォルト設 定の上書き (p. 285)」を参照してください。 Spark のデフォルト設定の変更 次の手順では、CLI またはコンソールを使用してエグゼキュータ設定を設定する方法を示します。 CLI を使用して、spark.executor.memory が 2G に設定されたクラスターを作成するには • 次のコマンドを使用すると、Spark がインストールされ、spark.executor.memory が 2G に設 定されているクラスターを作成できます。 aws emr create-cluster --name "Spark cluster" --ami-version 3.11.0 -applications Name=Spark,\ Args=[-d,spark.executor.memory=2G] --ec2-attributes KeyName=myKey -instance-type m3.xlarge --instance-count 3 --use-default-roles コンソールを使用して、spark.executor.memory が 2G に設定されたクラスターを作成するに は 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Software Configuration] フィールドで、Amazon AMI Version 3.9.0 以降を選択します。 4. [Applications to be installed] フィールドで、リストから [Spark] を選択し、[Configure and add] を 選択します。次に、引数 spark.executor.memory=2G を引数ボックスに入力し、[Add] を選択 します。 5. 必要に応じて他のオプションを選択し、[Create cluster] を選択します。 278 Amazon EMR 開発者ガイド Spark シェルへのアクセス Spark シェルへのアクセス このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Spark シェルは、Scala REPL (Read-Eval-Print-Loop) がベースになっています。このシェルを使用す ると、Spark プログラムをインタラクティブに作成し、作業をフレームワークに送信できます。Spark シェルには、SSH を使用してマスターノードに接続し、spark-shell を呼び出することでアクセス できます。マスターノードへの接続の詳細については、『Amazon EMR 管理ガイド』の「SSH を使 用してマスターノードに接続する (p. 459) 。次の例では、Amazon S3 に格納された Apache HTTP Server アクセスログを使用します。 Note これらの例で使用されているバケットは、米国東部(バージニア北部) にアクセスできるク ライアントが使用できます。 デフォルトでは、Spark シェルは sc と呼ばれる SparkContext オブジェクトを作成します。REPL 内 で必要とされる場合、このコンテキストを使用することができます。sqlContext は、シェルでも使用 できる HiveContext です。 Example Spark を使用して Amazon S3 に格納されたファイルにおける文字列の出現回数をカ ウント この例では、sc を使用して Amazon S3 で textFile を読み取ります。 scala> sc res0: org.apache.spark.SparkContext = org.apache.spark.SparkContext@404721db scala> val textFile = sc.textFile("s3://elasticmapreduce/ samples/hive-ads/tables/impressions/dt=2009-04-13-08-05/ ec2-0-51-75-39.amazon.com-2009-04-13-08-05.log") Spark は、textFile と関連付けられたデータ構造を作成します。次に、この例ではログファイル内の文 字列 "cartoonnetwork.com" を含む行の数をカウントします。 scala> val linesWithCartoonNetwork = textFile.filter(line => line.contains("cartoonnetwork.com")).count() linesWithCartoonNetwork: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[2] at filter at <console>:23 <snip> <Spark program runs> scala> linesWithCartoonNetwork res2: Long = 9 279 Amazon EMR 開発者ガイド Spark アプリケーションの記述 Example Python ベースの Spark を使用して Amazon S3 に格納されたファイルにおける文字 列の出現回数をカウント Spark には、Python ベースのシェルである pyspark も用意されており、Python で記述された Spark プログラムのプロトタイプを作成するために使用できます。spark-shell と同様、マスターノード で pyspark を呼び出します。これにも、SparkContext オブジェクトがあります。 >>> sc <pyspark.context.SparkContext object at 0x7fe7e659fa50> >>> textfile = sc.textFile("s3://elasticmapreduce/ samples/hive-ads/tables/impressions/dt=2009-04-13-08-05/ ec2-0-51-75-39.amazon.com-2009-04-13-08-05.log") Spark は、textFile と関連付けられたデータ構造を作成します。次に、この例ではログファイル内の文 字列 "cartoonnetwork.com" を含む行の数をカウントします。 >>> linesWithCartoonNetwork = textfile.filter(lambda line: "cartoonnetwork.com" in line).count() 15/06/04 17:12:22 INFO lzo.GPLNativeCodeLoader: Loaded native gpl library from the embedded binaries 15/06/04 17:12:22 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev EXAMPLE] 15/06/04 17:12:23 INFO fs.EmrFileSystem: Consistency disabled, using com.amazon.ws.emr.hadoop.fs.s3n.S3NativeFileSystem as filesystem implementation <snip> <Spark program continues> >>> linesWithCartoonNetwork 9 Spark アプリケーションの記述 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Spark アプリケーションは、Scala、Java、または Python で記述できます。Apache Spark ドキュメ ントの「Spark の例」には、Spark アプリケーションの例がいくつかあります。ネイティブにサポー トされる以下の 3 つのアプリケーションには、Estimating Pi の例が示されています。$SPARK_HOME/ examples の詳細な例は、GitHub でも確認できます。Spark 用の JAR を構築する方法の詳細につい ては、Apache Spark ドキュメントの「クイック スタート」を参照してください。 Scala package org.apache.spark.examples import scala.math.random import org.apache.spark._ /** Computes an approximation to pi */ object SparkPi { def main(args: Array[String]) { val conf = new SparkConf().setAppName("Spark Pi") val spark = new SparkContext(conf) val slices = if (args.length > 0) args(0).toInt else 2 280 Amazon EMR 開発者ガイド Java val n = math.min(100000L * slices, Int.MaxValue).toInt // avoid overflow val count = spark.parallelize(1 until n, slices).map { i => val x = random * 2 - 1 val y = random * 2 - 1 if (x*x + y*y < 1) 1 else 0 }.reduce(_ + _) println("Pi is roughly " + 4.0 * count / n) spark.stop() } } Java package org.apache.spark.examples; import import import import import org.apache.spark.SparkConf; org.apache.spark.api.java.JavaRDD; org.apache.spark.api.java.JavaSparkContext; org.apache.spark.api.java.function.Function; org.apache.spark.api.java.function.Function2; import java.util.ArrayList; import java.util.List; /** * Computes an approximation to pi * Usage: JavaSparkPi [slices] */ public final class JavaSparkPi { public static void main(String[] args) throws Exception { SparkConf sparkConf = new SparkConf().setAppName("JavaSparkPi"); JavaSparkContext jsc = new JavaSparkContext(sparkConf); int slices = (args.length == 1) ? Integer.parseInt(args[0]) : 2; int n = 100000 * slices; List<Integer> l = new ArrayList<Integer>(n); for (int i = 0; i < n; i++) { l.add(i); } JavaRDD<Integer> dataSet = jsc.parallelize(l, slices); int count = dataSet.map(new Function<Integer, Integer>() { @Override public Integer call(Integer integer) { double x = Math.random() * 2 - 1; double y = Math.random() * 2 - 1; return (x * x + y * y < 1) ? 1 : 0; } }).reduce(new Function2<Integer, Integer, Integer>() { @Override public Integer call(Integer integer, Integer integer2) { return integer + integer2; } }); 281 Amazon EMR 開発者ガイド Python System.out.println("Pi is roughly " + 4.0 * count / n); jsc.stop(); } } Python import sys from random import random from operator import add from pyspark import SparkContext if __name__ == "__main__": """ Usage: pi [partitions] """ sc = SparkContext(appName="PythonPi") partitions = int(sys.argv[1]) if len(sys.argv) > 1 else 2 n = 100000 * partitions def f(_): x = random() * 2 - 1 y = random() * 2 - 1 return 1 if x ** 2 + y ** 2 < 1 else 0 count = sc.parallelize(xrange(1, n + 1), partitions).map(f).reduce(add) print "Pi is roughly %f" % (4.0 * count / n) sc.stop() Spark ステップの追加 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 『Amazon EMR 管理ガイド』の Amazon EMR ステップ (p. 9) を使用すると、EMR クラスターにイ ンストールされた Spark フレームワークに作業を送信できます。コンソールと CLI では、sparksubmit スクリプトをステップとして自動的に実行する Spark アプリケーションステップを使用して これを行います。API では、ステップを使用し、script-runner.jar を使用して spark-submit を呼び出します。 Spark へのアプリケーションの送信の詳細については、Apache Spark ドキュメントの「アプリケー ションの送信」を参照してください。 Note クライアントデプロイモードを使用して Spark に作業をデプロイすることを選択した場合、 アプリケーションファイルは EMR クラスターのローカルパスに存在する必要があります。現 在のところ、クライアントモードではこの場所に S3 URI を使用することはできません。ただ し、クラスターデプロイモードでは S3 URI を使用できます。 282 Amazon EMR 開発者ガイド Spark ステップの追加 コンソールを使用して Spark ステップを送信する 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] で、クラスターの名前を選択します。 3. [Steps] セクションまでスクロールして展開し、[Add step] を選択します。 4. [Add Step] ダイアログボックスで、次のようにします。 • [Step type] では、[Spark application] を選択します。 • [Name] では、デフォルト名(Spark アプリケーション)を使用するか、または新しい名前を入 力します。 • [Deploy mode] では、[Cluster] または [Client] モードを選択します。クラスターモードでは、 ドライバプログラムがクラスター (JVM ベースのプログラムの場合は main()) で起動されま すが、クライアントモードではドライバプログラムがローカルで起動されます。詳細について は、Apache Spark ドキュメントで「クラスターモードの概要」を参照してください。 Note クラスターモードでは、S3 URI を使用して作業を送信できます。クライアントモード では、クラスターマスターノードのローカルファイルシステムにアプリケーションを 配置する必要があります。 • 目的の Spark-submit オプション を指定します。spark-submit オプションの詳細について は、「spark-submit を使用したアプリケーションの起動」を参照してください。 • [Application location] で、アプリケーションのローカルまたは S3 URI パスを指定します。 • [Arguments] は、フィールドを空のままにします。 • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 5. [Add] を選択します。ステップは、[Pending] というステータスでコンソールに表示されます。 6. ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] アイコンを選択 します。 7. ステップの結果は、ロギングを設定している場合、Amazon EMR コンソールの [Cluster Details] ページで、ログファイルにあるステップの横に表示されます。オプションで、クラスターを起動 したときに設定したログバケットにステップの情報が記載されています。 AWS CLI を使用して作業を Spark に送信するには クラスターを作成するか、既存のクラスターで aws emr add-steps サブコマンドを使用するとき、 ステップを送信します。 1. create-cluster を使用します。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Add Spark Step Cluster" --amiversion 3.11.0 --applications Name=Spark\ --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instancecount 3 \ --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[-class,org.apache.spark.examples.SparkPi,/home/hadoop/spark/lib/sparkexamples-1.3.1-hadoop2.4.0.jar,10] • Windows ユーザー: 283 Amazon EMR 開発者ガイド Spark ステップの追加 aws emr create-cluster --name "Add Spark Step Cluster" --amiversion 3.11.0 --applications Name=Spark --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=Spark,Name="Spark Program",ActionOnFailure=CONTINUE,Args=[-class,org.apache.spark.examples.SparkPi,/home/hadoop/spark/lib/sparkexamples-1.3.1-hadoop2.4.0.jar,10] Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 2. または、既に実行中のクラスターにステップを追加します。add-steps を使用します。 • Linux、UNIX、Mac OS X ユーザー: aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=Spark,Name="Spark Program",\ Args=[--class,org.apache.spark.examples.SparkPi,/home/ hadoop/spark/lib/spark-examples-*.jar,10] • Windows ユーザー: aws emr add-steps --cluster-id j-2AXXXXXXGAPLF -steps Type=Spark,Name="Spark Program", Args=[-class,org.apache.spark.examples.SparkPi,/home/hadoop/spark/lib/spark*.jar,10] SDK for Java を使用して作業を Spark に送信するには • 作業をクラスターに送信するには、ステップを使用して EMR クラスターで spark-submit スク リプトを実行します。AmazonElasticMapReduceClient で addJobFlowSteps メソッドを使用し てステップを追加します。 AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduce emr = new AmazonElasticMapReduceClient(credentials); StepFactory stepFactory = new StepFactory(); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); AddJobFlowStepsRequest req = new AddJobFlowStepsRequest(); req.withJobFlowId("j-1K48XXXXXXHCB"); List<StepConfig> stepConfigs = new ArrayList<StepConfig>(); StepConfig sparkStep = new StepConfig() .withName("Spark Step") .withActionOnFailure("CONTINUE") .withHadoopJarStep(stepFactory.newScriptRunnerStep("/home/hadoop/spark/ bin/spark-submit","--class","org.apache.spark.examples.SparkPi","/home/ hadoop/spark/lib/spark-examples-1.3.1-hadoop2.4.0.jar","10")); stepConfigs.add(sparkStep); 284 Amazon EMR 開発者ガイド Spark のデフォルト設定の上書き req.withSteps(stepConfigs); AddJobFlowStepsResult result = emr.addJobFlowSteps(req); ステップの結果は、ステップのログを調べることで確認します。[Steps] を選択し、使用するステッ プを選択し、[Log files] で、[stdout] または [stderr] を選択して、ログ記録を有効にしている場合 は、AWS マネジメントコンソール でこれを実行できます。利用可能なログを表示するには、[View Logs] を選択します。 Spark のデフォルト設定の上書き Spark のデフォルト設定値をアプリケーションごとに上書きすることができます。これは、ステップ を使用してアプリケーションを送信するとき (原則としてオプションが spark-submit に渡されます) に行うことができます。たとえば、spark.executor.memory を変更することで、実行プログラムの プロセスに割り当てられたメモリを変更することができます。次のような引数を含む --executormemory スイッチを指定します。 /home/hadoop/spark/bin/spark-submit --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/spark/lib/spark-examples*.jar 10 同様に、--executor-cores と --driver-memory を調整できます。ステップでは、次の引数をス テップに指定できます。 --executor-memory 1g --class org.apache.spark.examples.SparkPi /home/hadoop/ spark/lib/spark-examples*.jar 10 さらに、--conf オプションを使用して、組み込みスイッチがない設定を調整することもできます。 調整可能な他の設定の詳細については、Apache Spark ドキュメントの「Spark プロパティの動的な ロード」を参照してください。 285 Amazon EMR 開発者ガイド Impala を使用すると、どのようなことができるのですか? Impala Impala は SQL 構文を使用したインタラクティブなアドホッククエリを行う Hadoop エコシステムの オープンソースツールです。これは、従来のリレーショナルデータベース管理システム(RDBMS)に ある超並列処理(MPP)エンジンに類似した MPP を MapReduce の代わりに活用します。このアー キテクチャでは、HDFS または HBase テーブルのデータを非常にすばやくクエリできるほか、多様な データ型を処理するだけでなく実行時にスキーマを提供する Hadoop の機能を活用することができま す。このため、Impala を利用して、インタラクティブでレイテンシーが短い分析を行うことができま す。また、Impala は Hive メタストアを使用して、パーティション名およびデータ型などの入力デー タに関する情報を保管します。 Note Amazon EMR で Impala を使用するには、AMI で Hadoop 2.x 以降を実行する必要がありま す。 Amazon EMR 上の Impala は、以下をサポートします。 • SQL および HiveQL コマンドの大きなサブセット • HDFS および HBase でのデータのクエリ • ODBC および JDBC ドライバーの使用 • 各 Impala デーモンに対する同時クライアントリクエスト • Kerberos 認証 • パーティションテーブル • INSERT ステートメントを使用して、テーブルにデータを追加および挿入する • 複数の HDFS ファイル形式および圧縮コーデック。詳細については、「Impala をサポートするファ イルと圧縮形式 (p. 300)」を参照してください。 Impala の詳細については、http://en.wikipedia.org/wiki/Cloudera_Impala を参照してください。 Impala を使用すると、どのようなことができるの ですか? Amazon EMR と Hive を併用する場合と同様に、Amazon EMR と Impala を併用すると、SQL 構文を 使用した、洗練されたデータ処理アプリケーションを実装できます。ただし、Impala は、一部のユー 286 Amazon EMR 開発者ガイド 従来のリレーショナルデータベースとの違い スケースで、より高速に実行されるよう作成されています(下記を参照)。Amazon EMR を使用すれ ば、Impala を信頼性の高いデータウェアハウスとして使用して、データ分析、モニタリング、ビジネ スインテリジェンスなどのタスクを実行することができます。ユースケースには以下の 3 つがありま す。 • アドホッククエリを実行するために、長期間稼働するクラスターで Hive の代わりに Impala を使 用する場合。Impala はインタラクティブクエリを数秒に短縮するので、高速な調査を行うための すぐれたツールです。バッチの MapReduce ワークフローと同じクラスターで Impala を実行した り、Hive および Pig とともに長時間稼働する分析クラスターで Impala を使用したり、あるいは Impala のクエリ用に特別に調整されたクラスターを作成することができます。 • 一時的な Amazon EMR クラスターでバッチ ETL ジョブ用に Hive の代わりに Impala を使用する場 合。Impala は、Hive よりも、多くのクエリで高速であり、それらのワークロードに対してより高い パフォーマンスを提供します。Hive と同様に Impala も SQL を使用しているため、クエリを Hive から Impala に簡単に移植できます。 • サードパーティ製のビジネスインテリジェンスツールと一緒に Impala を使用する場合。クライアン トの ODBC または JDBC ドライバーをクラスターと接続し、パワフルな可視化ツールおよびダッ シュボードのエンジンとして Impala を使用します。 バッチ Impala クラスターもインタラクティブな Impala クラスターも Amazon EMR で作成できま す。例えば、長時間実行する Amazon EMR クラスターで、アドホックでインタラクティブなクエリ のために Impala を実行することも、高速の ETL ワークフローのために一時的な Impala クラスターを 使用することもできます。 従来のリレーショナルデータベースとの違い 従来のリレーショナルデータベースシステムは、トランザクションの意味とデータベースのアトミッ ク性、整合性、分離、および堅牢性(ACID)の各特性を提供してきました。また、テーブルをイン デックス化およびキャッシュして少量のデータを非常に高速に読み出したり、少量データをすばやく 更新したり、あるいは参照整合性制約を適用することができます。通常、従来のリレーショナルデー タベースシステムは単一の大規模マシンで稼働し、ユーザー定義された複雑なデータ型に対する処理 まではサポートしません。 Impala は RDBMS にあるのと似た分散クエリシステムを使用しますが、HDFS に保存されているデー タをクエリし、Hive メタストアを使用して入力データに関する情報を保管します。Hive の場合と同 様に、クエリのスキーマは実行時に提供されるため、簡単にスキーマ変更を行うことができます。 また、Impala は様々な複合データ型もクエリできるほか、ユーザー定義関数も実行できます。ただ し、Impala はメモリ内でデータを処理するため、クラスターのハードウェア制限を理解し、クエリの パフォーマンスを最適化する必要があります。 Hive との違い Impala が超並列処理(MPP)エンジンを使用して SQL クエリを実行するのに対し、Hive は MapReduce を使用して SQL クエリを実行します。Impala では、Hive と違って MapReduce ジョブ を作成するオーバーヘッドがかからないため、Hive よりクエリ時間が短縮されます。ただし、Impala は大量のメモリリソースを使用するため、クラスターで利用可能なメモリによって、クエリに使用で きるメモリ量が制約されます。Hive はこのようには制限されていないため、同じハードウェアでより 多くのデータセットを問題なく処理することができます。 一般に、高速のインタラクティブなクエリには Impala の使用が適するのに対し、Hive は大規模な データセットに対する ETL ワークロードに適しています。Impala は時間短縮を目的として開発され ているためアドホックの調査には最も適していますが、負荷の大きいクエリを実行する場合、つまり 非常に大きなデータセットを処理する場合には大量のメモリを必要とします。このような制限がある 287 Amazon EMR 開発者ガイド チュートリアル: Amazon EMR で Impala クラスターを起動およびクエリする ため、完了することの方が時間短縮よりも先決であるワークロードの場合には Hive を使用することを お勧めします。 Note Impala を使用すると、スタンダードインスタンスタイプを使用していても、Hive より性能が 向上していることが体感できる可能性があります。詳細については、「Impala のパフォーマ ンステストおよびクエリの最適化 (p. 301)」を参照してください。 チュートリアル: Amazon EMR で Impala クラス ターを起動およびクエリする このチュートリアルでは、Amazon EMR で Impala を使用して、インタラクティブクエリを実行する 方法を示します。このチュートリアルの指示には、以下の方法が含まれています。 • Amazon EMR にサインアップする • Impala がインストールされている状態で長時間稼働クラスターを起動する • SSH を使用してクラスターに接続する • テストデータセットを生成する • Impala テーブルを作成し、データを入力する • Impala テーブルでインタラクティブクエリを実行する Amazon EMR には、コンソール、CLI、API、複数の SDK など、クラスターを起動し、管理するため に使用できるさまざまなツールが用意されています。これらのツールの詳細については、「Amazon EMR と連携できるツールは何か (p. 12)」を参照してください。 サービスへのサインアップ AWS アカウントをお持ちでない場合、取得する必要があります。AWS アカウントからすべてのサー ビスにアクセスできますが、料金はリソースを利用した分のみに課金されます。このチュートリアル でかかる費用は最小限で済みます。 AWS にサインアップするには 1. https://aws.amazon.com/ にアクセスして [今すぐ申し込む] をクリックします。 2. 画面上の指示に従ってください。 アカウントがアクティブになり、使用可能な状態になったら、AWS から Eメールで通知されます。 クラスターの起動 次のステップは、クラスターの起動です。このチュートリアルでは、Amazon EMR コンソールと CLI の両方を使用して、長時間稼働クラスターを起動するステップについて説明します。ニーズに最適な 方法を選択します。クラスターを起動するとき、計算処理を実行するために Amazon EMR が EC2 イ ンスタンス(仮想サーバー)をプロビジョニングします。これらの EC2 インスタンスは、Amazon EMR 用にカスタマイズされた Amazon マシンイメージ(AMI)でプリロードされ、Amazon EMR は Hadoop とその他のビッグデータアプリケーションをプリロードします。 コンソールを使用してクラスターに Impala を追加するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 288 Amazon EMR 開発者ガイド クラスターの起動 2. [Create cluster] を選択します。 3. [Create Cluster] ページの [Cluster Configuration] セクションで、次の表に従ってフィールドを確 認します。 フィールド アクション クラスター名 クラスターの記述名を入力するか、デフォルト名 "My cluster" のまま にしておきます。 この名前はオプションです。また、一意である必要はありません。 終了保護 デフォルトのオプションを選択したまま([Yes])にします。 終了保護を有効にすると、事故やエラーが発生してもクラスターは シャットダウンしません。詳細については、『Amazon EMR 管理ガイ ド』の「クラスター終了の管理 (p. 481)。通常、アプリケーションの 作成中(クラスターを終了するようなエラーを除去するため)、また 長時間実行するクラスターやデータを保護するために、この値を [Yes] に設定します。 ログ記録 これにより、Amazon EMR が詳細なログデータを Amazon S3 にキャ プチャするかどうかが決まります。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 ログフォルダ S3 の場 所 前のフィールドでログ作成を有効にした場合は、デバッグログを保存 する Amazon S3 パスを入力または参照します。コンソールを使用し て、Amazon S3 を生成することもできます。ログフォルダーがない場 合、Amazon EMR コンソールによって作成されます。 Amazon S3 ログアーカイブを有効にすると、Amazon EMR により、 クラスターの EC2 インスタンスから Amazon S3 にログファイルがコ ピーされます。これにより、クラスターの終了時および クラスターを ホストしている EC2 が終了してもログファイルが失われるのを回避で きます。これらのログは、トラブルシューティングに役立ちます。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 4. [Software Configuration] セクションで、次の表に従ってフィールドを確認します。 フィールド アクション Hadoop ディスト [Amazon] を選択します。 リビューション これにより、クラスターで実行する Hadoop のディストリビューションが 決定されます。Hadoop の Amazon ディストリビューション、または複数 の MapR ディストリビューションのいずれかを実行するように選択できま す。詳細については、「Hadoop 用 MapR ディストリビューションを使用 する (p. 224)」を参照してください。 AMI のバージョ ン 5. 最新の Hadoop 2.4.0 AMI を選択します。 これにより、クラスターで実行する Hadoop および Hive または Pig な どその他のアプリケーションのバージョンが決定されます。Impala に は、Hadoop 2.x 以降のある Amazon EMR AMI が必要です。詳細について は、「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 [Additional Applications ] リストで、[Impala] を選択し、[Configure and add] をクリックします。 289 Amazon EMR 開発者ガイド クラスターの起動 Note 一覧に [Impala] が表示されない場合は、Hadoop 2.4.0 AMI を選択したことを確認しま す。 6. [Add Application] セクションで、次の表に従って選択します。 フィールド アクション バージョン [1.2.4 - ] のような、Impala のバージョンを選択します。 引数 Impala が実行するコマンドライン引数を指定します(オプション)。Impala のコマンドライン引数の例については、「AWS EMR コマンドラインイン ターフェイスのオプション(廃止) (p. 625)」の「--impala-conf」セク ションを参照してください。 7. [Add] をクリックします。 8. [Hardware Configuration] セクションで、次の表に従ってフィールドを確認します。 Note AWS アカウントあたりのデフォルトの最大ノード数は 20 です。例えば、実行中のクラ スターが 2 つある場合、両方のクラスターに対して実行するノード数は合わせて 20 個 以下にする必要があります。この制限を超えるとクラスターエラーが発生します。20 個 を超えてノードが必要な場合は、Amazon EC2 インスタンス制限を増やすようにリクエ ストを送信する必要があります。リクエストされた制限の増加に、ニーズにおける一時 的な未計画の増加に対応するための十分な容量があることを確認します。詳細について は、「Amazon EC2 インスタンス上限緩和申請」を参照してください。 フィールド アクション ネットワーク [Launch into EC2-Classic] を選択します。 リストから VPC サブネット識別子を選択して、Amazon VPC でクラスター を起動します(オプション)。詳細については、「クラスターの Amazon VPC サブネットを選択する (p. 209)」を参照してください。 EC2 アベイラビ リティーゾーン [No preference] を選択します。 特定の Amazon EC2 アベイラビリティーゾーンでクラスターを起動できま す(オプション)。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』 の「リージョンとアベイラビリティゾーン」を参照してください。 マスター [m3.xlarge] を選択します。マスターノードに使用する EC2 インスタンスタ イプを指定します。 マスターノードは、Hadoop タスクをコアとタスクノードに割り当て、ス テータスをモニタリングします。各クラスターには必ず 1 つのマスター ノードがあります。 詳細については、「インスタンスグループ (p. 35)」を参照してくださ い。以前のクラスターをインスタンスグループにマッピングする方法に ついては、「レガシークラスターのインスタンスグループへのマッピン グ (p. 500)」を参照してください。 Request Spot Instances ボックスはオフのままにしておきます。 290 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション これにより、マスターノードをスポットインスタンス上で実行するかどう かが指定されます。詳細については、「(オプション)スポットインスタ ンスでコストを削減する (p. 43)」を参照してください。 Core [m1.large] を選択します。これにより、コアノードとして使用する EC2 イ ンスタンスタイプが指定されます。 コアノードは、Hadoop の Map および Reduce タスクを実行し、Hadoop Distributed File System(HDFS)ファイルシステムを使用してデータを格納 する EC2 インスタンスです。コアノードは、マスターノードによって管理 されます。 詳細については、「インスタンスグループ (p. 35)」を参照してくださ い。以前のクラスターをインスタンスグループにマッピングする方法に ついては、「レガシークラスターのインスタンスグループへのマッピン グ (p. 500)」を参照してください。 カウント 2 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 タスク デフォルトのオプションを受け入れます。これにより、タスクノードとし て使用する EC2 インスタンスタイプが指定されます。 これにより、コアノードをスポットインスタンス上で実行するかどうかが 指定されます。詳細については、「(オプション)スポットインスタンス でコストを削減する (p. 43)」を参照してください。 タスクノードは Hadoop タスクを処理するのみで、データを保存しま せん。クラスターから追加および削除ができるので、容量を増やすこと でピークロードに対応し、後から減らすなど、クラスターで使用される EC2 インスタンス容量を管理するために使用できます。タスクノード は、TaskTracker Hadoop デーモンのみを実行します。 詳細については、「インスタンスグループ (p. 35)」を参照してくださ い。以前のクラスターをインスタンスグループにマッピングする方法に ついては、「レガシークラスターのインスタンスグループへのマッピン グ (p. 500)」を参照してください。 9. カウント 0 を選択します。このチュートリアルでは、タスクノードは使用しません。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、タスクノードをスポットインスタンス上で実行するかどうか が指定されます。詳細については、「(オプション)スポットインスタン スでコストを削減する (p. 43)」を参照してください。 [Security and Access] セクションで、次の表に従ってフィールドに入力します。 フィールド アクション EC2 key pair リストから Amazon EC2 キーペアのプライベートキーを選択します。 オプションで、[Proceed without an EC2 key pair] を選択することもできま す。このフィールドに値を入力しない場合、SSH を使用してマスターノー ドに接続できません。SSH を使用してマスターノードに接続する方法につ いては、『Amazon EMR 管理ガイド』の「SSH を使用してマスターノード に接続する (p. 459)。 291 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション IAM ユーザーア クセス [All other IAM users] を選択すると、クラスターが AWS アカウントのすべ ての IAM ユーザーから表示およびアクセス可能になります。詳細について は、『Amazon EMR 管理ガイド』の「IAM ロールを使用したユーザーアク セス権限の設定 (p. 179) または、現在の IAM ユーザーへのアクセスを制限するには、[No other IAM users] を選択します。 ロールの構成 [Default] を選択して、デフォルトの Amazon EMR ロールと Amazon EC2 インスタンスプロファイルを生成します。既存のデフォルトのロールがあ る場合は、クラスターに使用されます。ない場合は作成されます(適切な アクセス権限があると仮定した場合)。[View policies for default roles] を選 択して、デフォルトのロールプロパティを表示することもできます。また は、カスタムロールがある場合は、[Custom] を選択してロールを選択でき ます。Amazon EMR ロールおよび Amazon EC2 インスタンスプロファイル は、コンソールを使用してクラスターを作成するときに必要になります。 ロールにより、Amazon EMR はユーザーに代わって他の AWS サービスに アクセスできるようになります。Amazon EC2 インスタンスプロファイル により、クラスター内の Amazon EC2 インスタンスへのアプリケーション アクセスが制御されます。 詳細については、『Amazon EMR 管理ガイド』の「IAM およびアプリケー ションの Amazon EMR ロールを設定する (p. 186) 10. [Bootstrap Actions] セクションには、このサンプル設定で必要なブートストラップアクションは ありません。 オプションで、ブートストラップアクションを使用できます。これは、Hadoop が起動する前に クラスターで追加のソフトウェアをインストールし、アプリケーションの設定を変更できるスク リプトです。詳細については、「(オプション)追加のソフトウェアをインストールするための ブートストラップアクションの作成 (p. 121)」を参照してください。 11. [Steps] セクションでは、いずれの設定も変更する必要はありません。 12. 設定を確認し、設定に問題がなければ、[Create Cluster] を選択します。 13. クラスターを起動すると、コンソールに [Cluster Details] ページが表示されます。 AWS CLI を使用してクラスターに Impala を追加するには AWS CLI を使用してクラスターに Impala を追加するには、create-cluster サブコマンドを -applications パラメーターと共に入力します。 • クラスターに Impala をインストールするには、次のコマンドを入力し、myKey を EC2 キーペア の名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=Impala \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=Impala --use-default-roles 292 Amazon EMR 開発者ガイド テストデータを生成する --ec2-attributes KeyName=myKey --instance-type m3.xlarge --instancecount 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 テストデータを生成する マスターノードでテストデータを生成するには 1. SSH を使用してクラスターのマスターノードに接続し、以下のステップで示されているコマンド を実行します。クライアントオペレーティングシステムによりクラスターに接続するためにどの ステップを使用するかが決定されます。詳細については、「クラスターに接続する (p. 458)」を 参照してください。 2. SSH ウィンドウのホームディレクトリから、以下のコマンドを使用して、テストデータを含む ディレクトリを作成し、移動します。 mkdir test cd test 3. 次のコマンドを使用して、自動的にテストデータを作成するプログラムを含む JAR をダウンロー ドします。 wget http://elasticmapreduce.s3.amazonaws.com/samples/impala/dbgen-1.0jar-with-dependencies.jar 4. プログラムを起動し、次のコマンドを使用して、テストデータを作成します。この例では、コマ ンドラインパラメーターにより /mnt/dbgen の出力パスが指定され、books、customers、およ び transactions の各テーブルのサイズがそれぞれ 1 GB になるように指定されます。 java -cp dbgen-1.0-jar-with-dependencies.jar DBGen -p /mnt/dbgen -b 1 -c 1 -t 1 5. クラスターの HDFS ファイルシステムに新しいフォルダを作成し、以下のコマンドを使用して、 テストデータをマスターノードのローカルファイルシステムから HDFS にコピーします。 hadoop fs -mkdir /data/ hadoop fs -put /mnt/dbgen/* /data/ hadoop fs -ls -h -R /data/ 293 Amazon EMR 開発者ガイド Impala テーブルを作成および入力する Impala テーブルを作成および入力する このセクションでは、Impala テーブルを作成し、テストデータを入力します。 Impala テーブルを作成し、テストデータを入力するには 1. SSH ウィンドウで、次のコマンドを使用して Impala シェルプロンプトを起動します。 impala-shell 2. Impala シェルプロンプトで次のコマンドを実行して、books テーブルを作成し、テストデータを 入力します。 create EXTERNAL TABLE books( id BIGINT, isbn STRING, category STRING, publish_date TIMESTAMP, publisher STRING, price FLOAT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/ data/books/'; 3. Impala シェルプロンプトで次のコマンドを実行して、customers テーブルを作成し、テスト データを入力します。 create EXTERNAL TABLE customers( id BIGINT, name STRING, date_of_birth TIMESTAMP, gender STRING, state STRING, email STRING, phone STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/data/customers/'; 4. Impala シェルプロンプトで次のコマンドを実行して、transactions テーブルを作成し、テスト データを入力します。 create EXTERNAL TABLE transactions( id BIGINT, customer_id BIGINT, book_id BIGINT, quantity INT, transaction_date TIMESTAMP ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/data/transactions/'; Impala のクエリ データ このセクションでは、前のステップで Impala テーブルにロードしたデータに対するクエリを実行しま す。 Impala テーブルでテストデータに対するさまざまなクエリを実行するには 1. Impala シェルプロンプトで次のクエリを実行して、カスタマーテーブル全体のテーブルスキャン を実行します。 SELECT COUNT(*) FROM customers WHERE name = 'Harrison SMITH'; 2. Impala シェルプロンプトで次のクエリを実行して、1 つのテーブルをスキャンし、行をグループ 化し、各グループのサイズを計算する 集計クエリを実行します。 SELECT category, count(*) cnt FROM books GROUP BY category 294 Amazon EMR 開発者ガイド Amazon EMR AMI に含まれている Impala の例 ORDER BY cnt DESC LIMIT 10; 3. Impala シェルプロンプトで次のクエリを実行して、ブックテーブルをトランザクションテーブル と結合し、特定の期間中に最大の合計収益があった上位 10 項目のブックカテゴリを見つけるク エリを実行します。 SELECT tmp.book_category, ROUND(tmp.revenue, 2) AS revenue FROM ( SELECT books.category AS book_category, SUM(books.price * transactions.quantity) AS revenue FROM books JOIN [SHUFFLE] transactions ON ( transactions.book_id = books.id AND YEAR(transactions.transaction_date) BETWEEN 2008 AND 2010 ) GROUP BY books.category ) tmp ORDER BY revenue DESC LIMIT 10; 4. Impala シェルプロンプトで次のクエリを実行して、3 つのテーブルを結合する、大量にメモリを 使用するクエリを実行します。 SELECT tmp.book_category, ROUND(tmp.revenue, 2) AS revenue FROM ( SELECT books.category AS book_category, SUM(books.price * transactions.quantity) AS revenue FROM books JOIN [SHUFFLE] transactions ON ( transactions.book_id = books.id ) JOIN [SHUFFLE] customers ON ( transactions.customer_id = customers.id AND customers.state IN ('WA', 'CA', 'NY') ) GROUP BY books.category ) tmp ORDER BY revenue DESC LIMIT 10; Important これで、チュートリアルを完了しましたので、クラスターを終了して、アカウントに 追加料金がかからないようにしてください。詳細については、「クラスターを終了す る (p. 478)」を参照してください。 Amazon EMR AMI に含まれている Impala の例 Amazon EMR AMI 上の Impala インストールに含まれているデータセットとクエリがあります。 トピック • TPCDS (p. 295) • Wikipedia (p. 296) TPCDS TPCDS の例は、Cloudera の Impala デモ仮想マシンから派生しています。 295 Amazon EMR 開発者ガイド Wikipedia TPCDS の例を実行するには 1. クラスターのマスターノードで、examples ディレクトリに移動して、以下のスクリプトを実行し ます。 cd ~/impala/examples/tpcds/ ./tpcds-setup.sh ./tpcds-samplequery.sh tpcds-setup.sh スクリプトが HDFS にデータをロードし、Hive テーブルを作成しま す。tpcds-samplequery.sh スクリプトでは、以下のクエリを使用して、Impala によるデータ をクエリする方法を示します。 select i_item_id, s_state, avg(ss_quantity) agg1, avg(ss_list_price) agg2, avg(ss_coupon_amt) agg3, avg(ss_sales_price) agg4 FROM store_sales JOIN date_dim on (store_sales.ss_sold_date_sk = date_dim.d_date_sk) JOIN item on (store_sales.ss_item_sk = item.i_item_sk) JOIN customer_demographics on (store_sales.ss_cdemo_sk = customer_demographics.cd_demo_sk) JOIN store on (store_sales.ss_store_sk = store.s_store_sk) where cd_gender = 'M' and cd_marital_status = 'S' and cd_education_status = 'College' and d_year = 2002 and s_state in ('TN','SD', 'SD', 'SD', 'SD', 'SD') group by i_item_id, s_state order by i_item_id, s_state limit 100; 2. Impala では、Parquet テーブルの作成と管理ができます。Parquet は、テーブル内の特定の列を 高い効率でスキャンすることを目的とした、列指向のバイナリファイル形式です。詳細につい ては、http://parquet.io/を参照してください。クエリを実行した後、次のスクリプトを実行して Parquet 形式をテストします。 ./tpcds-samplequery-parquet.sh Wikipedia Wikipedia の例では、GitHub における Shark の例のデータとサンプルクエリを使用します。詳細につ いては、https://github.com/amplab/shark/wiki/Running-Shark-on-EC2 を参照してください。 296 Amazon EMR 開発者ガイド Wikipedia Wikipedia の例を実行するには • クラスターのマスターノードで、examples ディレクトリに移動して、以下のスクリプトを実行し ます。 cd ~/impala/examples/wikipedia/ ./wikipedia.sh また、代わりにこのスクリプトを使用することもできます。 ./wikipedia-with-s3distcp.sh wikipedia.sh および wikipedia-with-s3distcp.sh スクリプトは、42 GB のデータを Amazon S3 から HDFS にコピーし、Hive テーブルを作成し、Impala を使用して Hive テーブ ルからデータを選択します。wikipedia.sh と wikipedia-with-s3distcp.sh との違い は、wikipedia.sh では Hadoop distcp を使用して Amazon S3 から HDFS にデータをコピー しますが、wikipedia-with-s3distcp.sh では、同じ目的に Amazon EMR S3DistCp を使用 します。 wikipedia-with-s3distcp.sh スクリプトには、次のコードが含まれています。 #!/bin/bash . /home/hadoop/impala/conf/impala.conf # Copy wikipedia data from s3 to hdfs hadoop jar /home/hadoop/lib/emr-s3distcp-1.0.jar Dmapreduce.job.reduces=30 --src s3://spark-data/ --dest hdfs:// $HADOOP_NAMENODE_HOST:$HADOOP_NAMENODE_PORT/spark-data/ --outputCodec 'none' # Create hive tables hive -e "CREATE EXTERNAL TABLE wiki_small (id BIGINT, title STRING, last_modified STRING, xml STRING, text STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/spark-data/wikipedia-sample/'" hive -e "CREATE EXTERNAL TABLE wiki_full (id BIGINT, title STRING, last_modified STRING, xml STRING, text STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LOCATION '/spark-data/wikipedia-2010-09-12/'" hive -e "show tables" # Check client hostname client="127.0.0.1" echo "Checking client list..." nodelist=`curl -s http://$HADOOP_NAMENODE_HOST:9026/ws/v1/cluster/ hostStatus` echo "Found client list: $nodelist" arr=$(echo $nodelist | tr "\"" "\n") for a in $arr do if [[ $a == ip-* || $a == domU-* || $a =~ ^[0-9] ]]; then client=$a fi done echo "Choose client $client" # Show tables 297 Amazon EMR 開発者ガイド サポートされる Impala のバージョン impala-shell -r -i $client:21000 --query="show tables" # Query wiki_small table impala-shell -r -i $client:21000 --query="SELECT COUNT(1) FROM wiki_small WHERE TEXT LIKE '%Berkeley%'" impala-shell -r -i $client:21000 --query="SELECT title FROM wiki_small WHERE TEXT LIKE '%Berkeley%'" # Query wiki_full table impala-shell -r -i $client:21000 --query="SELECT COUNT(1) FROM wiki_full WHERE TEXT LIKE '%Berkeley%'" impala-shell -r -i $client:21000 --query="SELECT title FROM wiki_full WHERE TEXT LIKE '%Berkeley%'" サポートされる Impala のバージョン 実行可能な Impala のバージョンは、使用している Amazon EMR AMI のバージョンと Hadoop のバー ジョンによって決まります。下のテーブルに Impala のさまざまなバージョンと互換性のある AMI バージョンを示します。パフォーマンスの向上と新機能のメリットを受けられるように、最新バー ジョンの Impala を使用することをお勧めします。Amazon EMR AMI および AMI バージョニングの詳 細については、「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。Amazon EMR コン ソールでは、Impala のバージョニングはサポートされず、常に最新バージョンの Impala が起動され ます。 Impala のバージョン AMI のバージョン Impala のバージョンの詳細 1.2.4 3.1.0 以降 Impala 1.2.4 のサポートを追加 します。 1.2.1 3.0.2 | 3.0.3 | 3.0.4 Amazon EMR では、このバー ジョンで Impala のサポートを導 入します。 トピック • Impala 1.2.4 の更新 (p. 298) Impala 1.2.4 の更新 次の更新は、Impala 1.2.4 に関連します。 • Impala 起動時に行われるメタデータのロードと同期のパフォーマンス向上。ロードが完了する前に クエリを実行できます(クエリでテーブルのメタデータが必要な場合は、ロードされるまで待機し ます)。 • INVALIDATE METADATA は、引数 table_name を引き受けるように変更され、Hive によって作成 される特定のテーブルのメタデータをロードできるようになりました。逆にテーブルが Hive によっ て削除されると、Impala はテーブルがなくなったことを認識します。 • --load_catalog_in_background または --num_metadata_loading_threads を使用し て、catalogd のメタデータのロードの並列処理を設定できます。 Note 次の機能は、Impala 1.2.3 と 1.2.2 に追加され、このリリースで利用可能です。 298 Amazon EMR 開発者ガイド Impala のメモリに関する考慮事項 Impala 1.2.3 の更新 • 重要なバグ修正: Impala の外部で生成された Parquet ファイルとの互換性。 Impala 1.2.2 の更新 • 結合順序の変更。ユーザーが特定の方法で結合の順序を決めるのではなく、Impala がディスクの I/O、およびネットワークトラフィックを最小限に抑えるように自動的に結合クエリを最適化しま す。 • STRAIGHT_JOIN 演算子を使用して、Impala による結合クエリでの自動的なテーブルの最適化の順 序を回避します。 • COMPUTE STATS でテーブルと列の情報を確認します。 • デカルト積を必要とするクエリに対して SELECT ステートメントで CROSS JOIN 演算子を使用し ます。 • ALTER TABLE の新しい句。 • JDBS および ODBC ドライバーの LDAP 認証。 • 数値関数および条件関数では、SMALLINT、FLOAT、およびこれより小さい数値型を返すことがで きます。 詳細については、http://en.wikipedia.org/wiki/Cloudera_Impala を参照してください。 Impala のメモリに関する考慮事項 Impala のメモリ要件はクエリのタイプによる決定されます。クラスターが処理できる最大データサ イズと合計メモリサイズとの間の相互関係を決定する単純なルールはありません。圧縮タイプ、パー ティション、およびクエリ自体(結合の数、結果サイズなど)はすべて、必要となるメモリの構成要 素となります。例えば、クラスターには 60 GB しかメモリがないのに、単一テーブルスキャンを実 行して、128 GB のテーブルを処理できる場合があります。対照的に、結合操作を実行しているとき は、合計テーブルサイズが利用可能なメモリより小さい場合でも、Impala がすぐにメモリを使い尽く す可能性があります。そのため、利用可能なリソースをフルに活用するには、クエリを最適化するこ とが極めて重要です。Impala クエリを最適化してパフォーマンスを向上し、リソースの消費を最小限 にすることができ、また EXPLAIN ステートメントを使用して、クエリに必要なメモリやその他のリ ソースを推定することもできます。また、Impala を使用して最良の結果を得るには、クラスターには メモリが最適化されたインスタンスを使用することをお勧めします。詳細については、「Impala のパ フォーマンステストおよびクエリの最適化 (p. 301)」を参照してください。 Amazon EMR 上の Impala クラスターでは、一度に複数のクエリを実行できます。ただし、各クエリ がメモリ内で完了されるため、予測される同時クエリの数を処理するために、クラスターに相応のリ ソースがある確認します。また、Impala と MapReduce の両方がインストールされていれば、マルチ テナントクラスターを設定できます。各アプリケーションには、Hadoop 2.x で YARN を使用してリ ソース(メモリ、ディスク、および CPU)を割り当てる必要があります。割り当てるリソースは、各 アプリケーションで実行を予定しているジョブのニーズによって決定する必要があります。詳細につ いては、http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html を参照して ください。 メモリが不足した場合、クエリは失敗し、影響を受けるノードにインストールされている Impala デー モンはシャットダウンします。続いて、Amazon EMR がそのノードでデーモンを再開し、Impala が 別のクエリを実行できるようにします。シャットダウンしたのはノード全体でなく、ノードで稼働し ていたデーモンのみであるため、ノードの HDFS のデータは依然として利用可能です。Impala を使用 したアドホック分析の場合、クエリ時間は通常 1 分未満の値として測定できます。このため、クエリ が失敗した場合でも、問題をすみやかに発見し、すぐに新しいクエリを送信できます。 299 Amazon EMR 開発者ガイド Impala と JDBC の使用 Impala と JDBC の使用 Impala は、ODBC ドライバーを実行できるだけでなく、JDBC によって接続されるサードパー ティ製ツールにも有効なエンジンです。Impala クライアントの JDBC ドライバーは、http:// elasticmapreduce.s3 からダウンロードおよびインストールすることができます。amazonaws.com/ libs/impala/1.2.1/impala-jdbc-1.2.1.zip. ビジネスインテリジェンスツールをインストールしたクライアントコンピューターのポート 21050 で SSH または VPN を使用して、Impala クラスターのマスターノードに JDBC ドライバーを接続しま す。詳細については、「オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマ スターノードへの SSH トンネルをセットアップする (p. 469)」を参照してください。 Impala Web ユーザーインターフェイスへのアク セス Impala 1.2.x 以降では、statestore、impalad、catalog の各デーモンの Web ユーザーインターフェイ スが利用できます。これらの Web UI は、それぞれ以下の URL およびポートからアクセスできます。 http://master-node-public-dns-name:25000 http://master-node-public-dns-name:25010 http://master-node-public-dns-name:25020 Amazon EC2 でマスターノードへの SSH トンネルを設定し、以下のコマンド例に従って、ローカル マシンで Web UI を表示できます。 $ ssh -i PERM_FILE -nTxNf -L 127.0.0.1:25000:master-node-public-dnsname:25000 \ hadoop@master-node-public-dns-name $ ssh -i PERM_FILE -nTxNf -L 127.0.0.1:25010:master-node-public-dnsname:25010 \ hadoop@master-node-public-dns-name $ ssh -i PERM_FILE -nTxNf -L 127.0.0.1:25020:master-node-public-dnsname:25020 \ hadoop@master-node-public-dns-name 詳細については、「オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマス ターノードへの SSH トンネルをセットアップする (p. 469)」および「オプション 2、パート 2: マス ターノードでホストされるウェブサイトを表示するようにプロキシを設定する (p. 472)」を参照して ください。 Impala をサポートするファイルと圧縮形式 正しいファイルタイプと圧縮を選択することは、Impala クラスターのパフォーマンスを最適化するた めの要点です。Impala を使用すると、以下のデータ型をクエリできます。 • Parquet • Avro • RCFile • SequenceFile • 非構造化テキスト 300 Amazon EMR 開発者ガイド Impala SQL Dialect また、Impala では以下の圧縮タイプをサポートします。 • Snappy • GZIP • LZO(テキストファイルのみ) • Deflate(Parquet とテキストを除く) • BZIP2(Parquet とテキストを除く) ファイルタイプと圧縮に応じて、データのロードまたはテーブルの作成に Hive を使用する必要がある 場合があります。 Impala SQL Dialect Impala では、HiveQL と類似した標準 SQL 構文のサブセットをサポートします。Impala SQL 言語の 詳細については、「Impala SQL 言語のリファレンス」を参照してください。 Impala ユーザー定義関数 Impala では、Java または C++ で記述されたユーザー定義関数(UDF)をサポートします。ま た、Hive 用に作成された UDF やユーザー定義集計関数に Impala 用の変更を加えることができま す。Hive UDF の詳細については、https://cwiki.apache.org/confluence/display/Hive/LanguageManual +UDF を参照してください。 Impala のパフォーマンステストおよびクエリの最 適化 Impala を使用するとき、クラスターのメモリリソースがどのようにクエリのタイプと処理できる データセットのサイズを制限するかを理解することが重要です。TPCDS および Berkeley の Big Data Benchmark に啓発され、私たちは、テキストファイル形式で特定のサイズのテーブルファイルを生成 する、ワークロードジェネレーターを実装しました。さまざまな数のテーブルで、テーブル全体のス キャン、集計および結合についての Impala のパフォーマンスをテストするために幅広いリレーショ ナルクエリを設計しました。さまざまなインスタンスタイプのクラスターでさまざまな入力クラスに 対して、これらのクエリを実行しました。パフォーマンスデータは、Impala の強さと限界を評価する ために Hive のパフォーマンスデータと比較されました。また、これらのテストで使用された方法は、 [Launching and Querying Impala Clusters on Amazon EMR] チュートリアルの基盤です。詳細につい ては、「チュートリアル: Amazon EMR で Impala クラスターを起動およびクエリする (p. 288)」を 参照してください。 データベーススキーマ 入力データセットは、Impala SQL Dialect にある以下のテーブル作成ステートメントと示されている 3 つのテーブルで構成されます。 CREATE EXTERNAL TABLE books( id BIGINT, isbn STRING, category STRING, 301 Amazon EMR 開発者ガイド サンプルデータ publish_date TIMESTAMP, publisher STRING, price FLOAT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/data/books/'; CREATE EXTERNAL TABLE customers( id BIGINT, name STRING, date_of_birth TIMESTAMP, gender STRING, state STRING, email STRING, phone STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/data/customers/'; CREATE EXTERNAL TABLE transactions( id BIGINT, customer_id BIGINT, book_id BIGINT, quantity INT, transaction_date TIMESTAMP ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '|' LOCATION '/data/transactions/'; サンプルデータ すべてのテーブルには、現実の値と類似しているランダムに生成されたデータが入力されます。 チュートリアルの [Generate Sample Data] セクションで概説されているのと同じ方法でデータを生成 できます。詳細については、「テストデータを生成する (p. 293)」を参照してください。 $ head books/books 0|1-45812-668-3|EDUCATION|1986-06-14|Shinchosha|50.99 1|9-69091-140-1|BODY-MIND-SPIRIT|1983-07-29|Lefebvre-Sarrut|91.99 2|3-73425-809-9|TRANSPORTATION|1996-07-08|Mondadori|54.99 3|8-23483-356-2|FAMILY-RELATIONSHIPS|2002-08-20|Lefebvre-Sarrut|172.99 4|3-58984-308-3|POETRY|1974-06-13|EKSMO|155.99 5|2-34120-729-8|TRAVEL|2004-06-30|Cengage|190.99 6|0-38870-277-1|TRAVEL|2013-05-26|Education and Media Group |73.99 7|8-74275-772-8|LAW|2012-05-01|Holtzbrinck|112.99 8|4-41109-927-4|LITERARY-CRITICISM|1986-04-06|OLMA Media Group|82.99 9|8-45276-479-4|TRAVEL|1998-07-04|Lefebvre-Sarrut|180.99 $ head customers/customers 0|Bailey RUIZ|1947-12-19|M|CT|[email protected]|114-925-4866 1|Taylor BUTLER|1938-07-30|M|IL|[email protected]|517-158-1597 2|Henry BROOKS|1956-12-27|M|IN|[email protected]|221-653-3887 3|Kaitlyn WRIGHT|1988-11-20|F|NE|[email protected]|645-726-8901 4|Miles LOPEZ|1956-03-15|F|ND|[email protected]|222-770-7004 5|Mackenzie PETERSON|1970-09-05|F|NJ|[email protected]| 114-521-5716 6|Maria SPENCER|2002-12-20|F|TX|[email protected]|377-612-4105 7|Sienna HENDERSON|1982-11-04|F|MO|[email protected]| 199-288-5062 302 Amazon EMR 開発者ガイド テーブルのサイズ 8|Samantha WALLACE|1998-03-06|F|TN|[email protected]| 711-348-7410 9|Nevaeh PETERSON|1991-06-26|F|AL|[email protected]|651-686-3436 $ head transactions/transactions 0|360677155|84060207|4|2010-03-24 10:24:22 1|228662770|136084430|5|2009-07-03 14:53:09 2|355529188|26348618|9|2009-09-13 11:53:26 3|1729168|20837134|5|2006-01-05 19:31:19 4|196166644|99142444|19|2007-01-02 15:07:38 5|43026573|479157832|17|2010-04-14 16:42:29 6|306402023|356688712|12|2010-05-24 22:15:54 7|359871959|312932516|31|2000-04-03 11:06:38 8|379787207|265709742|45|2013-09-09 06:01:06 9|144155611|137684093|11|2010-06-06 17:07:07 テーブルのサイズ 以下のテーブルには、各テーブルの行数が示されています(100 万行単位)。GB 値は、各テーブル のテキストファイルのサイズを示しています。入力クラス内では、ブック、カスタマー、トランザク ションの各テーブルは常に同じサイズです。 入力クラス(各テーブ ルのサイズ) ブックテーブル(100 万行) カスタマーテーブル (100 万行) トランザクションテー ブル(100 万行) 4 GB 63 53 87 8 GB 125 106 171 16 GB 249 210 334 32 GB 497 419 659 64 GB 991 837 1304 128 GB 1967 1664 2538 256 GB 3919 3316 5000 クエリ パフォーマンステストでは、4 つの異なるクエリタイプを使用しました。 Q1: スキャンクエリ SELECT COUNT(*) FROM customers WHERE name = 'Harrison SMITH'; このクエリでは、テーブル全体でテーブルスキャンを実行します。このクエリでは、主に以下につい てテストします。 • Impala の読み込みスループットと Hive の読み込みスループットの比較。 • 所定の合計メモリサイズで、テーブルスキャン実行時に入力サイズの制限はあるでしょうか。ある 場合は、Impala が処理できる最大入力サイズはどれほどでしょうか? 303 Amazon EMR 開発者ガイド パフォーマンステストの結果 Q2: 集計クエリ SELECT category, count(*) cnt FROM books GROUP BY category ORDER BY cnt DESC LIMIT 10; 集計クエリでは、1 つのテーブルをスキャンし、行をグループ化し、各グループのサイズを計算しま す。 Q3: 2 つのテーブル間の結合クエリ SELECT tmp.book_category, ROUND(tmp.revenue, 2) AS revenue FROM ( SELECT books.category AS book_category, SUM(books.price * transactions.quantity) AS revenue FROM books JOIN [SHUFFLE] transactions ON ( transactions.book_id = books.id AND YEAR(transactions.transaction_date) BETWEEN 2008 AND 2010 ) GROUP BY books.category ) tmp ORDER BY revenue DESC LIMIT 10; このクエリはブックテーブルをトランザクションテーブルと結合し、特定の期間中に最大の合計収益 があった上位 10 項目のブックカテゴリを見つけます。この実験では、結合操作における Impala のパ フォーマンスをテストし、結果を Hive と比較します。 Q4: 3 つのテーブル間の結合クエリ SELECT tmp.book_category, ROUND(tmp.revenue, 2) AS revenue FROM ( SELECT books.category AS book_category, SUM(books.price * transactions.quantity) AS revenue FROM books JOIN [SHUFFLE] transactions ON ( transactions.book_id = books.id ) JOIN [SHUFFLE] customers ON ( transactions.customer_id = customers.id AND customers.state IN ('WA', 'CA', 'NY') ) GROUP BY books.category ) tmp ORDER BY revenue DESC LIMIT 10; この 4 番目のクエリは、3 つのテーブルを結合するもので、パフォーマンステストで最も大量にメモ リを使用するクエリです。 パフォーマンステストの結果 最初の実験結果は、Amazon EMR Hadoop 2.2.0 および Impala 1.1.1 がインストールされた4 つの m1.xlarge インスタンスのクラスター上で得られました。下記のハードウェア仕様によれば、このク ラスターでは合計 60 GB のメモリが利用できます。 304 Amazon EMR 開発者ガイド パフォーマンステストの結果 インスタンス タイプ プロセッサ アーキテク チャ vCPU ECU メモリ(GiB) インスタン スストレージ (GB) m1.xlarge 64 ビット 4 8 15 4 x 420 クエリの実行時間の観点から Impala と Hive のクエリパフォーマンスを比較し、結果を下のグラフに 示しています。これらのグラフでは、y 軸は 4 回の試行から時刻コマンドを使用した平均実行時間を 示しています。データがないものは、メモリ不足で Impala が失敗したことを示し、失敗した Impala クエリに対する Hive のテストを実施しませんでした。 これらの数字から、小規模(今回の実験では 16 GB 以下)な場合、MapReduce フレームワークオー バーヘッドがないため、Impala は Hive よりかなり高速であることを確認しました。しかし、クエリ 時間全体と比較してフレームワークオーバーヘッドが無視できるほど設定された入力データが大きく なると、Impala は約 3 ~ 10 倍速い程度になります。 305 Amazon EMR 開発者ガイド パフォーマンステストの結果 2 番目の実験環境は、Hadoop 2.2.0 と Impala 1.1.1 がインストールされた AMI の 4 つの m2.4xlarge インスタンスのクラスターでした。このクラスターの合計メモリは 274 GB です。詳細なハードウェ ア仕様と実験結果を下に示します。最初の一連のテスト同様に、データがないものは、メモリ不足が 原因の Impala の失敗を示し、これらのクエリについては Hive のテストは実施しませんでした。 インスタンス タイプ プロセッサ アーキテク チャ vCPU ECU メモリ(GiB) インスタン スストレージ (GB) m2.4xlarge 64 ビット 8 26 68.4 2 x 840 306 Amazon EMR 開発者ガイド クエリの最適化 クエリの最適化 Impala のメモリ要件はクエリタイプで決定されます。クラスターが処理できる最大データサイズと合 計メモリサイズとの間の相互関係を決定する単純で一般的なルールはありません。 Impala はテーブル全体をメモリにロードしないため、利用可能なメモリ量により処理できるテーブル サイズは制限されません。Impala は、結合または集計の結果セットの右側のテーブルのようなメモリ にハッシュテーブルを構築します。また、Impala ではメモリを I/O バッファーとして使用します。こ の場合、クラスター上のプロセッサコア数およびスキャナーの速度がすべてのコアを動作状態に保つ ために必要なバッファー処理量を決定します。例えば、単純な SELECT count(*) FROM table ス テートメントでは、I/O バッファーメモリのみを使用します。 例えば、実験のパート 1 の m1.xlarge クラスターには 60 GB のメモリしかありませんでしたが、1 つ のテーブルスキャンを実行したとき、128 GB 以上のテーブルを処理できました。Impala では、クエ リの結果セット全体をキャッシュする必要がないため、結果セットをクライアントにストリーミング しました。対照的に、結合操作を実行しているときは、合計テーブルサイズが合計メモリ量より小さ い場合でも、Impala がすぐにクラスターのメモリを使い尽くす可能性があります。利用可能なリソー スをフルに活用するには、クエリを最適化することが極めて重要です。このセクションでは、メモリ 不足エラーが発生したときに試してみることができる最適化手法のいくつかを示します。 特定のデータノード上での impalad 処理がメモリの問題のためにクラッシュしたときに受信する、代 表的なエラーメッセージを下に示します。メモリ不足の問題を確認するには、データノードにログオ ンし、top コマンドを使用して、メモリ使用量(%MEM)をモニタリングします。同じクエリであっ ても、メモリ不足エラーが常に同じノードで発生するとは限りません。また、impalad は自動的に再 起動されるため、メモリ不足エラーから回復するためのアクションは不要です。 Backend 6:Couldn't open transport for ip-10-139-0-87.ec2.internal:22000(connect() failed: Connection refused) クエリで使用されるメモリを減らして、メモリ不足エラーを回避するには、シンプルクエリ最適化手 法が有効な場合があります。例えば、最初のバージョンの Q3(最適化前)を下に示します。ここで は、トランザクションテーブルは JOIN の左側にあり、ブックテーブルは右側にあります。 SELECT tmp.book_category, ROUND(tmp.revenue, 2) AS revenue FROM ( SELECT books.category AS book_category, SUM(books.price * transactions.quantity) AS revenue FROM transactions JOIN books ON ( transactions.book_id = books.id AND YEAR(transactions.transaction_date) BETWEEN 2008 AND 2010 ) GROUP BY books.category ) tmp 307 Amazon EMR 開発者ガイド クエリの最適化 ORDER BY revenue DESC LIMIT 10; このクエリは、4 GB 入力クラスにのみ有効であり、メモリ不足エラーにより 8 GB では失敗しまし た。理由を理解するには、Impala がクエリを実行する方法を検討する必要があります。結合の準備と して、Impala は列カテゴリ、価格、ID のみを含むブックテーブルからハッシュテーブルを構築しま す。トランザクションテーブルからメモリにキャッシュされるものはありません。ただし、Impala は この例の右側のテーブルをブロードキャストするため、ブックテーブル は結合にブックテーブルが必 要なすべてのノードにレプリケートされます。1.2.1 より新しい Impala のバージョンの場合、Impala ではテーブル統計に基づいてブロードキャストとパーティション分割された結合の間でコストベース で決定します。下に示す Q3 の 2 番目のバージョンを取得するため、JOIN ステートメントでこれら 2 つのテーブルを単にスワップしました。 SELECT tmp.book_category, ROUND(tmp.revenue, 2) AS revenue FROM ( SELECT books.category AS book_category, SUM(books.price * transactions.quantity) AS revenue FROM books JOIN transactions ON ( transactions.book_id = books.id AND YEAR(transactions.transaction_date) BETWEEN 2008 AND 2010 ) GROUP BY books.category ) tmp ORDER BY revenue DESC LIMIT 10; Q3 の 2 番目のバージョンでは、ブックテーブル全体ではなく、トランザクションテーブルの一部の みがブロードキャストされるため、効率的です。それにも関わらず、32 GB 入力クラスに拡大したと きは、メモリの制約により、Q3 の 2 番目のバージョンでも失敗するようになりました。クエリをさ らに最適化するために、Impala で強制的に「パーティション分割された結合」を使用するためのヒン トを追加しました。これは、上記の [Queries] セクションに示されている Q3 の最後のバージョンを作 成します。すべての最適化により、最終的には最大 64 GB の入力クラスで Q3 を正常に実行すること ができ、最初のバージョンより 16 倍以上のメモリ効率の高いクエリが得られました。Impala のクエ リを最適化する方法は他にも多数あり、これらの方法はハードウェアの最適なパフォーマンスを引き 出し、メモリ不足エラーを回避する優れた方法とみなされます。 308 Amazon EMR 開発者ガイド サポートされている Pig のバージョン Apache Pig このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR(Amazon EMR)では、大量のデータセットの分析と変換に使用できるプログラ ミングフレームワークである Apache Pig がサポートされます。Pig の詳細については、http:// pig.apache.org/ を参照してください。Amazon EMR でサポートされる Pig には、いくつかのバージョ ンがあります。 Pig はオープンソースの Apache ライブラリで、Hadoop 上で稼動します。ライブラリは、Pig Latin と 呼ばれる言語で記述された SQL のようなコマンドを受け付け、これらのコマンドを MapReduce ジョ ブに変換します。Java などの低レベルコンピュータ言語を使用して複雑な MapReduce コードを記述 する必要はありません。 Pig コマンドは、インタラクティブに実行するか、バッチモードで実行できます。Pig をインタラク ティブに使用するには、マスターノードへの SSH 接続を作成し、Grunt シェルを使用してコマンド を送信します。Pig をバッチモードで使用するには、Pig スクリプトを記述し、Amazon S3 にアッ プロードして、クラスターステップとして送信します。クラスターへの作業の提出の詳細について は、クラスターへの作業の送信 (p. 504)を参照してください。 トピック • サポートされている Pig のバージョン (p. 309) • インタラクティブおよびバッチ Pig クラスター (p. 313) • Pig の作業の送信 (p. 313) • Pig からユーザー定義関数を呼び出す (p. 315) サポートされている Pig のバージョン クラスターに追加できる Pig のバージョンは、使用している Amazon EMR (Amazon EMR) AMI の バージョンと Hadoop のバージョンによって決まります。次の表に、各バージョンの Pig と互換性の ある AMI のバージョンおよび Hadoop のバージョンを示します。パフォーマンスの向上と新機能の 309 Amazon EMR 開発者ガイド サポートされている Pig のバージョン メリットを受けられるように、最新バージョンの Pig を使用することをお勧めします。Amazon EMR AMI および AMI バージョニングの詳細については、「Amazon マシンイメージ(AMI) (p. 56)」を参 照してください。 コンソールまたは AWS CLI を使用して Pig をクラスターにインストールする場合は、指定する AMI によって、インストールされる Pig のバージョンが決まります。デフォルトでは、コンソールを使 用する場合、Pig はクラスターにインストールされますが、クラスター作成中に削除できます。Pig は、AWS CLI を使用する場合も、--applications パラメーターを使用してどのアプリケーション がクラスターで必要かを指定しない限り、デフォルトでインストールされます。AWS CLI では、Pig のバージョニングはサポートされていません。 Pig のインストールに API を使用する場合は、RunJobFlow の呼び出し時に Pig をクラスターにロー ドするステップに対する引数として --pig-versions を指定しなければ、デフォルトのバージョン が使用されます。 Pig のバージョン AMI のバージョン 設定パラメーター Pig のバージョンの詳 細 0.12.0 3.1.0 以降 --ami-version 3.1 --ami-version 3.2 --ami-version 3.3 以下のサポートが追加 されています。 リリースノート ドキュメント • JVM 実装を使用しな い UDF のストリー ミング • ASSERT 演算子と IN 演算子 • CASE 式 • Pig 組み込み関数と しての AvroStorage • 組み込み関数として の ParquetLoader と ParquetStorer • BigInteger 型と BigDecimal 型 0.11.1.1 2.2 以降 --pig-versions 0.11.1.1 --ami-version 2.2 Amazon S3 に入 力が存在する場 合、PigStorage で LOAD コマンドのパ フォーマンスを向上さ せます。 2.2 以降 --pig-versions 0.11.1 --ami-version 2.2 JDK 7、Hadoop 2、Groovy User Defined Functions、SchemaTuple 最適化、新しい演算子 などのサポートを追 加します。詳細につ いては、「Pig 0.11.1 Change Log」を参照し てください。 2.2 以降 --pig-versions 0.9.2.2 --ami-version 2.2 Hadoop 1.0.3 のサポー トを追加。 リリースノート ドキュメント 0.11.1 リリースノート ドキュメント 0.9.2.2 リリースノート ドキュメント 310 Amazon EMR 開発者ガイド Pig のバージョンの詳細 Pig のバージョン AMI のバージョン 設定パラメーター Pig のバージョンの詳 細 0.9.2.1 2.2 以降 --pig-versions 0.9.2.1 --ami-version 2.2 MapR のサポートを 追加。詳細につい ては、「Hadoop 用 MapR ディストリ ビューションを使用す る (p. 224)」を参照し てください。 2.2 以降 --pig-versions 0.9.2 --ami-version 2.2 いくつかのパフォーマ ンス向上とバグ修正が 行われています。Pig 0.9.2 でのすべての 変更に関する情報に ついては、Pig 0.9.2 Change Log を参照し てください。 2.0 --pig-versions 0.9.1 --ami-version 2.0 1.0 --pig-versions 0.6 --ami-version 1.0 1.0 --pig-versions 0.3 --ami-version 1.0 リリースノート ドキュメント 0.9.2 リリースノート ドキュメント 0.9.1 リリースノート ドキュメント 0.6 リリースノート 0.3 リリースノート Pig のバージョンの詳細 Amazon EMR では、追加の Amazon EMR パッチが適用される場合がある特定の Pig リリースをサ ポートします。Amazon EMR(Amazon EMR)クラスターで実行する Pig のバージョンを設定するこ とができます。これを行う方法については、「Apache Pig (p. 309)」を参照してください。以下の セクションでは、Pig の各バージョン、および Amazon EMR にロードされたバージョンに適用される パッチについて説明します。 Pig 向けパッチ このセクションでは、Amazon EMR で使用可能な Pig バージョンに適用されるカスタムパッチについ て説明します。 Pig 0.11.1.1 向けパッチ Amazon EMR バージョンの Pig 0.11.1.1 はメンテナンスリリースで、Amazon S3 に入力が存在する 場合、PigStorage で LOAD コマンドのパフォーマンスを向上させます。 Pig 0.11.1 向けパッチ Pig 0.11.1 の Amazon EMR バージョンには、Apache Software Foundation によって提供されるすべ ての更新と、Pig バージョン 0.9.2.2 からの累積した Amazon EMR パッチが含まれます。しかし、Pig 0.11.1 には Amazon EMR 固有の新しいパッチはありません。 311 Amazon EMR 開発者ガイド Pig のバージョンの詳細 Pig 0.9.2 向けパッチ Apache Pig 0.9.2 は、Pig のメンテナンスリリースです。Amazon EMR チームは今までに、Amazon EMR バージョンの Pig 0.9.2 に以下のパッチを適用しています。 パッチ 説明 PIG-1429 Pig に Boolean データタイプを第 1 クラスデータタイプとして 追加。詳細については、https://issues.apache.org/jira/browse/ PIG-1429 を参照してください。 Status: コミット済み Fixed in Apache Pig Version: 0.10 PIG-1824 Jython UDF でインポートモジュールをサポート。詳細について は、https://issues.apache.org/jira/browse/PIG-1824 を参照してく ださい。 Status: コミット済み Fixed in Apache Pig Version: 0.10 PIG-2010 登録済みの JAR を分散キャッシュにバンドル。詳細について は、https://issues.apache.org/jira/browse/PIG-2010 を参照してく ださい。 Status: コミット済み 修正対象の Apache Pig のバージョン: 0.11 PIG-2456 ユーザーがデフォルトの Pig ステートメントを指定でき る ~/.pigbootup ファイルを追加。詳細については、https:// issues.apache.org/jira/browse/PIG-2456 を参照してください。 Status: コミット済み 修正対象の Apache Pig のバージョン: 0.11 PIG-2623 Amazon S3 パスを使用した UDF の登録をサポート。詳細につい ては、https://issues.apache.org/jira/browse/PIG-2623 を参照して ください。 Status: コミット済み 修正対象の Apache Pig のバージョン: 0.11、0.11 Pig 0.9.1 向けパッチ Amazon EMR チームは今までに、Amazon EMR バージョンの Pig 0.9.1 に以下のパッチを適用してい ます。 パッチ 説明 dfs での JAR ファイルと Pig ス クリプトのサポート HDFS、Amazon S3 などの分散ファイルシステムに格納されてい るスクリプトの実行および JAR ファイルの登録をサポートする機 能追加。詳細については、https://issues.apache.org/jira/browse/ PIG-1505 を参照してください。 Status: コミット済み 修正対象の Apache Pig のバージョン: 0.8.0 Pig における複数のファイルシ ステムのサポート あるファイルシステムから読み取ったデータを別のファイルシス テムに書き込む Pig スクリプトに対するサポートを追加。詳細に 312 Amazon EMR 開発者ガイド 追加の Pig 関数 パッチ 説明 ついては、https://issues.apache.org/jira/browse/PIG-1564 を参照 してください。 Status: 未コミット 修正対象の Apache Pig バージョン: n/a Piggybank の datetime および string UDF の追加 カスタムの Pig スクリプトをサポートするために datetime および string UDF を追加。詳細については、https://issues.apache.org/ jira/browse/PIG-1565 を参照してください。 Status: 未コミット 修正対象の Apache Pig バージョン: n/a 追加の Pig 関数 Amazon EMR 開発チームは、文字列操作の簡素化と、日付および時刻情報の書式設定の省力化を行う 追加の Pig 関数を作成しました。これらは、http://aws.amazon.com/code/2730 から入手できます。 インタラクティブおよびバッチ Pig クラスター Amazon EMR(Amazon EMR)では、Pig のスクリプトを次の 2 つのモードで実行できます。 • インタラクティブ • バッチ コンソールまたは AWS CLI を使用して長時間稼働クラスターを起動する場合、マスターノードに Hadoop ユーザーとして ssh を実行し、Grunt シェルを使用して Pig スクリプトをインタラクティブ に開発したり実行したりすることができます。Pig をインタラクティブに使用すると、バッチモード よりも簡単に Pig スクリプトを変更できます。インタラクティブモードで Pig スクリプトの変更が完 了したら、そのスクリプトを Amazon S3 にアップロードし、バッチモードを使用してスクリプトを 本稼働環境で実行できます。また、実行中のクラスターで Pig コマンドをインタラクティブに送信 し、必要に応じてデータの分析や変換を行うことができます。 バッチモードでは、Pig スクリプトを Amazon S3 にアップロードし、クラスターにステップとして 作業を送信します。Pig ステップは、長時間稼働クラスターまたは一時的なクラスターに送信できま す。クラスターに作業を送信する方法については、「クラスターへの作業の送信 (p. 504)」を参照し てください。 Pig の作業の送信 このセクションでは、Pig の作業を Amazon EMR クラスターに送信する方法を示します。次の例 は、Amazon EMR サンプル "Pig を使用した Apache ログ分析" に基づいています。このサンプルで は、Apache ログファイルを評価し、転送された合計バイト数、上位 50 の IP アドレスリスト、上位 50 の外部参照者リスト、Bing や Google を使用した検索語トップ 50 などの情報が含まれるレポー トを生成します。Pig スクリプトは、Amazon S3 バケット s3://elasticmapreduce/samples/ pig-apache/do-reports2.pig に配置されています。入力データは Amazon S3 バケット s3:// elasticmapreduce/samples/pig-apache/input に配置されています。出力は、Amazon S3 バ ケットに保存されます。 313 Amazon EMR 開発者ガイド Amazon EMR コンソールを使用した Pig の作業の送信 Amazon EMR コンソールを使用した Pig の作業の 送信 この例では、Amazon EMR コンソールを使用し、Pig のステップをクラスターに追加する方法につい て説明します。 Pig のステップを送信するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] で、クラスターの名前をクリックします。 3. [Steps] セクションまでスクロールして展開し、[Add step] をクリックします。 4. [Add Step] ダイアログで: • [Step type] で、[Pig program] を選択します。 • [Name] では、デフォルト名(Pig program)を使用するか、または新しい名前を入力します。 • [Script S3 location] で、Pig スクリプトの場所を入力します。たとえば、「s3: // elasticmapreduce/samples/pig-apache/do-reports2.pig」です。 • [Input S3 location] で、入力データの場所を入力します。たとえば、「s3: // elasticmapreduce/samples/pig-apache/input」です。 • [Output S3 location] では、Amazon S3 出力バケットの名前を入力または参照します。 • [Arguments] は、フィールドを空のままにします。 • [Action on failure] では、デフォルトのオプション(Continue)を使用します。 5. [Add] をクリックします。ステップは、[Pending] というステータスでコンソールに表示されま す。 6. ステップが実行されると、ステータスは [Pending] から [Running]、[Running] から [Completed] に変更されます。ステータスを更新するには、[Actions] 列の上にある [Refresh] アイコンをク リックします。 AWS CLI を使用した Pig の作業の送信 AWS CLI を使用して Pig のステップを送信するには AWS CLI を使用してクラスターを起動する場合は、--applications パラメーターを使用して Pig をインストールします。Pig のステップを送信するには、--steps パラメーターを使用します。 • Pig がインストールされたクラスターを起動し、Pig のステップを送信するには、以下のコマンド を入力し、myKey を EC2 キーペアの名前に置き換え、mybucket を Amazon S3 バケットの名前 に置き換えます。 • aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --steps Type=PIG,Name="Pig Program",ActionOnFailure=CONTINUE,Args=[f,s3://elasticmapreduce/samples/pig-apache/do-reports2.pig,p,INPUT=s3://elasticmapreduce/samples/pig-apache/input,-p,OUTPUT=s3:// mybucket/pig-apache/output] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 314 Amazon EMR 開発者ガイド Pig からユーザー定義関数を呼び出す Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Pig からユーザー定義関数を呼び出す Pig では、ユーザー定義関数(UDF)を Pig スクリプトから呼び出すことができます。これに より、Pig スクリプト内で使用するカスタム処理を実装できます。現在サポートされている言語 は、Java、Python/Jython、および Javascript です(ただし、Javascript のサポートはまだ試用段階で す)。 以下のセクションでは、関数を Pig シェルまたは Pig スクリプトから呼び出せるように、Pig に登録 する方法を説明します。Pig で UDF を使用することの詳細については、http://pig.apache.org/docs/ r0.14.0/udf.html を参照してください。 Pig から JAR ファイルを呼び出す Pig スクリプトに REGISTER コマンドを使用して、Pig とともにカスタム JAR ファイルを使用できま す。JAR ファイルは、ローカルファイルシステム、または Amazon S3 などのリモートファイルシス テムです。Pig スクリプトが実行されると、Amazon EMR は自動的に JAR ファイルをマスターノー ドにダウンロードし、その JAR ファイルを Hadoop 分散キャッシュにアップロードします。これによ り、JAR ファイルは必要に応じてクラスター内のすべてのインスタンスで自動的に使用されます。 Pig で JAR ファイルを使用するには 1. Amazon S3 にカスタム JAR ファイルをアップロードします。 2. Pig スクリプト内で REGISTER コマンドを使用して、カスタム JAR ファイルの Amazon S3 バ ケットを指定します。 REGISTER s3://mybucket/path/mycustomjar.jar; Pig から Python/Jython スクリプトを呼び出す Python スクリプトを Pig に登録し、登録したスクリプト内の関数を Pig シェルまたは Pig スクリプト から呼び出すことができます。これを行うには、register キーワードでスクリプトの場所を指定し ます。 Pig は Java で記述されているため、Python スクリプトの解析には Jython スクリプトエンジンが使用 されます。Jython の詳細については、http://www.jython.org/ を参照してください。 Pig から Python/Jython スクリプトを呼び出すには 1. Python スクリプトを作成して、Amazon S3 内の場所にアップロードします。この場所は、Pig ク ラスターを作成するアカウントと同じアカウントが所有しているか、クラスターを作成したアカ ウントがアクセスできるように許可が設定されているバケットである必要があります。この例で は、スクリプトは s3://mybucket/pig/python にアップロードされます。 315 Amazon EMR 開発者ガイド Pig から Python/Jython スクリプトを呼び出す 2. 3. 4. Pig クラスターを起動します。Grunt シェルから Pig にアクセスする予定がある場合は、インタラ クティブクラスターを起動します。Pig コマンドをスクリプトから実行している場合は、スクリ プトで記述された Pig クラスターを起動します。この例では、インタラクティブなクラスターを 起動します。Pig クラスターの詳細については、「Pig の作業の送信 (p. 313)」を参照してくだ さい。 インタラクティブなクラスターを起動したので、次に、Grunt シェルを実行できるマスターノー ドに SSH によって接続します。SSH を使用してマスターノードに接続する方法の詳細について は、SSH into the Master Node を参照してください。 コマンドラインに pig と入力することにより、Pig 向けに Grunt を実行します。 pig 5. 以下に示すように Grunt コマンドプロンプトで register キーワードを使用し、Amazon S3 内 のスクリプトの場所を指定して Jython ライブラリおよび Python スクリプトを Pig に登録しま す。 grunt> register 'lib/jython.jar'; grunt> register 's3://mybucket/pig/python/myscript.py' using jython as myfunctions; 6. 入力データをロードします。次の例では、入力を Amazon S3 上の場所からロードします。 grunt> input = load 's3://mybucket/input/data.txt' using TextLoader as (line:chararray); 7. これにより、myfunctions を使用してスクリプト内の関数を参照して、Pig から呼び出すことが できます。 grunt> output=foreach input generate myfunctions.myfunction($1); 316 Amazon EMR 開発者ガイド Apache HBase このドキュメントは、Amazon EMR の バージョン 4.x および 5.x を対象としています。Amazon EMR AMI バージョン 2.x および 3.x については、Amazon EMR 開発者ガイド (PDF) を参照してく ださい。 HBase は、オープンソースの非リレーショナル型分散データベースです。Apache Software Foundation の Hadoop プロジェクトの一部として開発されており、Hadoop Distributed File System (HDFS) 上で動作して、Hadoop エコシステムに非リレーショナルデータベース機能を提供しま す。HBase では、列ベースの圧縮および保存を使用することにより、障害に強く効率的な方法で大 量のスパースデータを保存できます。さらに、データの大部分がメモリにキャッシュされるため、 データ検索が迅速に実行されます。クラスターインスタンスのストレージも引き続き使用されま す。HBase は、シーケンシャル書き込み操作用に最適化されており、バッチ挿入、更新、および削除 処理も非常に効率的です。HBase では、セルのバージョニングがサポートされるため、セルまたは行 の複数の旧バージョンを検索および使用できます。 HBase は、Hadoop のファイルシステムを共有して、MapReduce フレームワークおよび実行エン ジンに対する直接入力および出力として機能することで、Hadoop とシームレスに連携します。ま た、HBase テーブルに対する SQL のようなクエリ、Hive ベースのテーブルとの結合、および Java Database Connectivity(JDBC)を有効にすることで、Apache Hive とも統合されます。 さらに、Amazon EMR の HBase には、HBase データを Amazon Simple Storage Service(Amazon S3)に直接バックアップする機能も用意されています。HBase クラスターの起動時に、以前作成した バックアップから復元することができます。W 詳細については、HBase のウェブサイトおよびドキュメントを参照してください。 トピック • HBase を使用すると、どのようなことができるのですか? (p. 318) • サポートされる HBase バージョン (p. 318) • HBase クラスターの前提条件 (p. 319) • Amazon EMR クラスターで HBase を インストールする (p. 319) • HBase シェルを使用する (p. 325) • Hive で HBase テーブルにアクセスする (p. 326) • HBase をバックアップおよび復元する (p. 327) • HBase クラスターを終了する (p. 333) • HBase を設定する (p. 333) 317 Amazon EMR 開発者ガイド HBase を使用すると、どのようなことができるのですか? • ユーザーインターフェイスを表示する (p. 339) • • • • HBase ログファイルを表示する (p. 339) CloudWatch で HBase を監視する (p. 340) Ganglia で HBase を監視する (p. 340) HBase の以前のバージョンからの移行 (p. 342) HBase を使用すると、どのようなことができるの ですか? HBase を使用することで、大量のデータへのランダムアクセスを繰り返し行ったり、このようなデー タを変更したりできます。また、少ないレイテンシーで検索や範囲スキャンを実行できるほか、個別 のレコードを効率的に更新、削除することもできます。 検討すべき HBase ユースケースをいくつか次に示します。 Reference data for Hadoop analytics HBase は Hadoop および Hive と直接統合され、格納されているデータに迅速にアクセスできるの で、複数の Hadoop タスクまたは複数の Hadoop クラスターで使用されているリファレンスデータを 格納する際に使用できます。このデータは、Hadoop タスクを実行しているクラスター、または切り 離されたクラスターに直接格納できます。分析のタイプには、人口動態データ、IP アドレス地理位置 検索テーブル、および商品のディメンションデータへの高速なアクセスを必要とする分析が含まれま す。 Real-time log ingestion and batch log analytics HBase の高い書き込みスループット、順次データの最適化、およびスパースデータの効率的なスト レージは、ログデータをリアルタイムで処理するためのソリューションとして非常に優れています。 また、Hadoop と統合されているだけでなく、順次読み取りおよびスキャン向けに最適化されている ので、処理実行後のログデータのバッチ分析にも適しています。一般的ユースケースには、アプリ ケーションログ、クリックストリームデータ、ゲーム内の使用状況データの処理と分析などがありま す。 Store for high frequency counters and summary data カウンターのインクリメントは、データベースの writes だけではなく read-modify-writes でもあるの で、リレーショナルデータベースにとってはコストがかなりかかります。ただし、HBase は非リレー ショナル型の分散データベースなので、整合性のある読み込みと書き込みを行いながら、非常に高速 に更新できます。また、更新されたデータにもすばやくアクセスできます。さらに、より複雑な集計 (max-min(最大値/最小値)、average(平均)、group-by(グループ化)など)を実行する必要が ある場合は、Hadoop ジョブを直接実行して、集計結果を HBase に入力することができます。 サポートされる HBase バージョン このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 HBase バージョン AMI のバージョン AWS CLI 設定パラメー ター HBase バージョンの詳 細 0.94.18 3.1.0 以降 --ami-version 3.1 • バグの修正と機能強 化。 318 Amazon EMR 開発者ガイド HBase クラスターの前提条件 HBase バージョン AMI のバージョン AWS CLI 設定パラメー ター HBase バージョンの詳 細 --ami-version 3.2 --ami-version 3.3 --applications Name=HBase 0.94.7 3.0-3.0.4 --ami-version 3.0 --applications Name=HBase 0.92 2.2 以降 --ami-version 2.2 or later --applications Name=HBase HBase クラスターの前提条件 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 HBase を実行するには、Amazon EMR クラスターが次の要件を満たしている必要があります。 • AWS CLI (オプション) – コマンドラインを使用して HBase を操作するには、最新バージョンの AWS CLI をダウンロードしてインストールします。詳細については、『AWS Command Line Interface ユーザーガイド』の「AWS コマンドラインインターフェイスのインストール」を参照し てください。 • 2 つ以上のインスタンス (オプション) – クラスターのマスターノードでは HBase マスターサーバー と Zookeeper、スレーブノードでは HBase リージョンサーバーが実行されます。最大のパフォーマ ンスを確保するには、HBase クラスターが 2 つ以上の EC2 インスタンスを実行する必要がありま すが、評価目的の場合は HBase を単一ノードで実行できます。 • Long-running cluster – HBase は長時間稼働クラスター上でのみ実行されます。デフォルトで は、CLI および Amazon EMR コンソールは長時間稼働クラスターを作成します。 • Amazon EC2 キーペア (推奨) – マスターノードと接続し、HBase シェルコマンドを実行するた めに Secure Shell (SSH) ネットワークプロトコルを使用するには、クラスターを作成するときに Amazon EC2 キーペアを使用する必要があります。 • The correct AMI and Hadoop versions – HBase クラスターは、現在 Hadoop 20.205 以降でのみサ ポートされています。 • Ganglia (オプション) – HBase パフォーマンスメトリクスを監視する必要がある場合は、クラス ターの作成時に、Ganglia をインストールします。 • ログ用 Amazon S3 バケット (オプション) – HBase 用ログはマスターノードで使用できます。これ らのログを Amazon S3 にコピーするには、クラスターの作成時にログファイルを受け取るための S3 バケットを指定します。 Amazon EMR クラスターで HBase を インストー ルする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 319 Amazon EMR 開発者ガイド Amazon EMR クラスターで HBase を インストールする Amazon EMR で HBase を使用すると、拡張性と操作性に優れ、低コストで、使用分にしか支払いが 発生しないという AWS クラウドのメリットを活かすことができます。Amazon EMR チームは、AWS で最適に実行されるように HBase を調整しました。HBase と、Amazon EMR での HBase 実行の詳 細については、「Apache HBase (p. 317)」を参照してください。 次の手順は、デフォルトの設定で HBase クラスターを起動する方法を示しています。アプリケーショ ンを独自に設定する必要がある場合は、「HBase を設定する (p. 333)」の説明に従って HBase を設 定してください。 Note HBase は起動時にのみ設定できます。 クラスターを起動し、コンソールを使用して HBase をインストールするには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Create Cluster] ページの [Cluster Configuration] セクションで、次の表に従ってフィールドを確 認します。 フィールド アクション クラスター名 クラスターの記述名を入力するか、デフォルト名 "My cluster" のまま にしておきます。 この名前はオプションです。また、一意である必要はありません。 終了保護 デフォルトのオプションを選択したまま([Yes])にします。 終了保護を有効にすると、事故やエラーが発生してもクラスターは シャットダウンしません。詳細については、『Amazon EMR 管理ガイ ド』の「クラスター終了の管理 (p. 481)。通常、アプリケーションの 作成中(クラスターを終了するようなエラーを除去するため)、また 長時間実行するクラスターやデータを保護するために、この値を [Yes] に設定します。 ログ記録 これにより、Amazon EMR が詳細なログデータを Amazon S3 にキャ プチャするかどうかが決まります。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 ログフォルダ S3 の場 所 前のフィールドでログ作成を有効にした場合は、デバッグログを保存 する Amazon S3 パスを入力または参照します。コンソールを使用し て、Amazon S3 を生成することもできます。ログフォルダーがない場 合、Amazon EMR コンソールによって作成されます。 Amazon S3 ログアーカイブを有効にすると、Amazon EMR により、 クラスターの EC2 インスタンスから Amazon S3 にログファイルがコ ピーされます。これにより、クラスターの終了時および クラスターを ホストしている EC2 が終了してもログファイルが失われるのを回避で きます。これらのログは、トラブルシューティングに役立ちます。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 4. [Software Configuration] セクションで、次の表に従ってフィールドを確認します。 320 Amazon EMR 開発者ガイド Amazon EMR クラスターで HBase を インストールする フィールド アクション Hadoop ディスト [Amazon] を選択します。 リビューション これにより、クラスターで実行する Hadoop のディストリビューションが 決定されます。Hadoop の Amazon ディストリビューション、または複数 の MapR ディストリビューションのいずれかを実行するように選択できま す。詳細については、「Hadoop 用 MapR ディストリビューションを使用 する (p. 224)」を参照してください。 AMI のバージョ ン リストから最新の Hadoop 2.x AMI または最新の Hadoop 1.x AMI を選択し ます。 選択した AMI により、クラスターで実行する Hadoop および Hive または Pig などその他のアプリケーションのバージョンが決定されます。詳細につ いては、「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 5. [Additional Applications] で、[HBase] と [Configure and add] を選択します。 6. [Add Application] セクションで、HBase クラスターに、Amazon S3 に保存されているデータを事 前にロードするかどうか、および HBase クラスターのバックアップを定期的に実行するようにス ケジュールするかどうかを指定し、[Add] を選択します。選択の際のガイダンスとして、次の表を ご利用ください。HBase データのバックアップと復元の詳細については、「HBase をバックアッ プおよび復元する (p. 327)」を参照してください。 7. フィールド アクション Restore from backup HBase クラスターに、Amazon S3 に保存されているデータを事前にロード するかどうかを指定します。 Backup location Amazon S3 で復元するバックアップがある場所の URI を指定します。 Backup version [Backup Location] で指定した場所にある、使用するバックアップのバージョ ン名を指定します(オプション)。このフィールドに何も指定しない場合 は、[Backup Location] で指定した場所にあるバックアップの最新バージョン が、新しい HBase クラスターに設定されます。 Schedule Regular Backups 自動増分バックアップをスケジュールするかどうかを指定します。最初は完 全バックアップによって、以降の差分バックアップのベースラインとなる バックアップが作成されます。 Consistent backup バックアップの整合性を確保するかどうかを指定します。バックアップの整 合性とは、バックアップ処理の初期段階であるノード同期中に、書き込みオ ペレーションを一時停止することです。つまり、一時停止された書き込みオ ペレーションはすべてキューに置かれ、同期が完了したら再開されます。 Backup frequency スケジュールされたバックアップの頻度 (日/時間/分単位)。 Backup location バックアップが保存される Amazon S3 の URI。差分バックアップの正確性 を確保するために、バックアップは、HBase クラスターごとにそれぞれ異な る場所に格納する必要があります。 Backup start time 最初のバックアップの時間を指定します。これを now に設定した場合、クラ スターが実行されると直ちに最初のバックアップが行われます。または、日 付と時刻を ISO 形式で入力します。例えば、2012-06-15T20:00Z を入力する と、2012 年 6 月 15 日午後 8 時(UTC)に設定されます。 [Hardware Configuration] セクションで、次の表に従ってフィールドを確認します。 321 Amazon EMR 開発者ガイド Amazon EMR クラスターで HBase を インストールする Note AWS アカウントあたりのデフォルトの最大ノード数は 20 です。クラスターが 2 つある 場合、両方のクラスターに対して実行するノード数は合わせて 20 個以下にする必要があ ります。この制限を超えるとクラスターエラーが発生します。20 個を超えてノードが必 要な場合は、Amazon EC2 インスタンス制限を増やすようにリクエストを送信する必要 があります。リクエストされた制限の増加に、ニーズにおける一時的な未計画の増加に 対応するための十分な容量があることを確認します。詳細については、「Amazon EC2 インスタンス上限緩和申請」を参照してください。 フィールド アクション ネットワーク デフォルト VPC を選択します。詳細については、「デフォルトの VPC と サブネット」 (Amazon VPC ユーザーガイド) を参照してください。 必要に応じて追加の VPC を作成した場合、任意の VPC サブネット識別子 をリストから選択して Amazon VPC でクラスターを起動できます。詳細に ついては、「クラスターの Amazon VPC サブネットを選択する (p. 209)」 を参照してください。 EC2 アベイラビ リティーゾーン [No preference] を選択します。 または、特定の アベイラビリティーゾーンでクラスターを起動できます。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』 の「リージョンとアベイラビリティゾーン」を参照してください。 マスター デフォルトのインスタンスタイプをそのまま使用します。 マスターノードは、Hadoop タスクをコアとタスクノードに割り当て、ス テータスをモニタリングします。各クラスターには必ず 1 つのマスター ノードがあります。 マスターノードに使用する EC2 インスタンスタイプを指定します。 デフォルトのインスタンスタイプは Hadoop 2.x 向けの m1.medium です。 このインスタンスタイプは、テストや開発など、負荷の軽いワークロード に適しています。 Amazon EMR でサポートされるインスタンスタイプの詳細については、 「仮想サーバー設定」を参照してください。Amazon EMR インスタンスグ ループの詳細については、「インスタンスグループ (p. 35)」を参照してく ださい。以前のクラスターをインスタンスグループにマッピングする方法 については、「レガシークラスターのインスタンスグループへのマッピン グ (p. 500)」を参照してください。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、マスターノードをスポットインスタンス上で実行するかどう かが指定されます。詳細については、「(オプション)スポットインスタ ンスでコストを削減する (p. 43)」を参照してください。 322 Amazon EMR 開発者ガイド Amazon EMR クラスターで HBase を インストールする フィールド アクション コア デフォルトのインスタンスタイプをそのまま使用します。 コアノードは、Hadoop の Map および Reduce タスクを実行し、Hadoop Distributed File System(HDFS)ファイルシステムを使用してデータを格納 する EC2 インスタンスです。コアノードは、マスターノードによって管理 されます。 これにより、コアノードとして使用する EC2 インスタンスタイプが指定さ れます。 デフォルトのインスタンスタイプは Hadoop 2.x 向けの m1.medium です。 このインスタンスタイプは、テストや開発など、負荷の軽いワークロード に適しています。 Amazon EMR でサポートされるインスタンスタイプの詳細については、 「仮想サーバー設定」を参照してください。Amazon EMR インスタンスグ ループの詳細については、「インスタンスグループ (p. 35)」を参照してく ださい。以前のクラスターをインスタンスグループにマッピングする方法 については、「レガシークラスターのインスタンスグループへのマッピン グ (p. 500)」を参照してください。 カウント 2 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 タスク デフォルトのインスタンスタイプをそのまま使用します。 これにより、コアノードをスポットインスタンス上で実行するかどうかが 指定されます。詳細については、「(オプション)スポットインスタンス でコストを削減する (p. 43)」を参照してください。 タスクノードは Hadoop タスクを処理するのみで、データを保存しま せん。クラスターから追加および削除ができるので、容量を増やすこと でピークロードに対応し、後から減らすなど、クラスターで使用される EC2 インスタンス容量を管理するために使用できます。タスクノード は、TaskTracker Hadoop デーモンのみを実行します。 これにより、タスクノードとして使用する EC2 インスタンスタイプが指定 されます。 Amazon EMR でサポートされるインスタンスタイプの詳細については、 「仮想サーバー設定」を参照してください。Amazon EMR インスタンスグ ループの詳細については、「インスタンスグループ (p. 35)」を参照してく ださい。以前のクラスターをインスタンスグループにマッピングする方法 については、「レガシークラスターのインスタンスグループへのマッピン グ (p. 500)」を参照してください。 8. カウント 0 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、タスクノードをスポットインスタンス上で実行するかどうか が指定されます。詳細については、「(オプション)スポットインスタン スでコストを削減する (p. 43)」を参照してください。 [Security and Access] セクションで、次の表に従ってフィールドに入力します。 323 Amazon EMR 開発者ガイド Amazon EMR クラスターで HBase を インストールする フィールド アクション EC2 key pair リストから Amazon EC2 キーペアのプライベートキーを選択します。 オプションで、[Proceed without an EC2 key pair] を選択することもできま す。このフィールドに値を入力しない場合、SSH を使用してマスターノー ドに接続できません。SSH を使用してマスターノードに接続する方法につ いては、『Amazon EMR 管理ガイド』の「SSH を使用してマスターノード に接続する (p. 459)。 IAM ユーザーア クセス [All other IAM users] を選択すると、クラスターが AWS アカウントのすべ ての IAM ユーザーから表示およびアクセス可能になります。詳細について は、『Amazon EMR 管理ガイド』の「IAM ロールを使用したユーザーアク セス権限の設定 (p. 179) または、現在の IAM ユーザーへのアクセスを制限するには、[No other IAM users] を選択します。 ロールの構成 [Default] を選択して、デフォルトの Amazon EMR ロールと Amazon EC2 インスタンスプロファイルを生成します。既存のデフォルトのロールがあ る場合は、クラスターに使用されます。ない場合は作成されます(適切な アクセス権限があると仮定した場合)。[View policies for default roles] を選 択して、デフォルトのロールプロパティを表示することもできます。また は、カスタムロールがある場合は、[Custom] を選択してロールを選択でき ます。Amazon EMR ロールおよび Amazon EC2 インスタンスプロファイル は、コンソールを使用してクラスターを作成するときに必要になります。 ロールにより、Amazon EMR はユーザーに代わって他の AWS サービスに アクセスできるようになります。Amazon EC2 インスタンスプロファイル により、クラスター内の Amazon EC2 インスタンスへのアプリケーション アクセスが制御されます。 詳細については、『Amazon EMR 管理ガイド』の「IAM およびアプリケー ションの Amazon EMR ロールを設定する (p. 186) 9. [Bootstrap Actions] セクションには、このサンプル設定で必要なブートストラップアクションは ありません。 オプションで、ブートストラップアクションを使用できます。これは、Hadoop が起動する前に クラスターで追加のソフトウェアをインストールし、アプリケーションの設定を変更できるスク リプトです。詳細については、「(オプション)追加のソフトウェアをインストールするための ブートストラップアクションの作成 (p. 121)」を参照してください。 10. [Steps] セクションでは、いずれの設定も変更する必要はありません。 11. 設定を確認し、設定に問題がなければ、[Create Cluster] を選択します。 12. クラスターを起動すると、コンソールに [Cluster Details] ページが表示されます。 クラスターを起動し、AWS CLI を使用して HBase をインストールするには create-cluster サブコマンドと --applications パラメーターを入力することで、AWS CLI を使 用してクラスターに HBase をインストールできます。--applications パラメーターを使用すると きは、インストールするアプリケーションの名前を Name 引数で指定します。 デフォルトでは、AWS CLI で起動されたクラスターでは、終了保護が無効になっています。クラ スターが予期せずに、またはエラーの発生によって終了することを防ぐには、--terminationprotected パラメーターを create-cluster サブコマンドに追加します。 1. 以前にデフォルトの Amazon EMR ロールおよび Amazon EC2 インスタンスプロファイルを作 成していない場合は、次のコマンドを入力して作成します。あるいは、独自のロールを指定でき 324 Amazon EMR 開発者ガイド HBase シェルを使用する ます。クラスターの作成時に Amazon EMR ロールおよび Amazon EC2 インスタンスプロファ イルを指定しないと、HBase のバックアップおよび復元機能に問題が発生する場合がありま す。ロールの詳細については、「IAM およびアプリケーションの Amazon EMR ロールを設定す る (p. 186)」を参照してください。 aws emr create-default-roles 2. クラスターが起動されたときに HBase をインストールするには、次のコマンドを入力し、myKey を Amazon EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=HBase --use-default-roles --ec2-attributes KeyName=myKey --instance-type c1.xlarge --instancecount 3 --termination-protected Note --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つの マスターノードが起動され、残りのインスタンスはコアノードとして起動されます。す べてのノードで、コマンドで指定したインスタンスタイプが使用されます。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 HBase シェルを使用する HBase クラスターを作成したら、次は HBase に接続し、データの読み取りと書き込みを開始できる ようにします。HBase シェルを使用すると、コマンドをテストできます。 HBase シェルを開くには 1. SSH を使用して、HBase クラスターのマスターサーバーに接続します。SSH を使用してマス ターノードに接続する方法の詳細については、Amazon EMR 管理ガイドの「SSH を使用してマ スターノードに接続する (p. 459)」を参照してください。 2. hbase shell を実行します。HBase シェルが開き、次の例のようなプロンプトが表示されま す。 hbase(main):001:0> Base シェルコマンドを発行するには、プロンプトを使用します。シェルコマンドの説明や、シェルコ マンドを呼び出す方法については、HBase プロンプトで「help」と入力し、Enter キーを押します。 325 Amazon EMR 開発者ガイド テーブルを作成する テーブルを作成する 次のコマンドを実行すると、「f1」という名前の 1 つの列ファミリーが含まれる、「t1」という名前 のテーブルが作成されます。 hbase(main):001:0>create 't1', 'f1' 値を入力する 次のコマンドを実行すると、テーブル「t1」の行「r1」、および列「f1」に対して値「v1」が入力され ます。 hbase(main):001:0>put 't1', 'r1', 'f1:col1', 'v1' 値を取得する 次のコマンドを実行すると、テーブル「t1」の行「r1」の値を取得できます。 hbase(main):001:0>get 't1', 'r1' Hive で HBase テーブルにアクセスする HBase と Hive と Amazon EMR (EMR 3.x リリース) (p. 247) は、緊密に統合されているため、HBase に格納されたデータに対して並列処理の大量ワークロードを直接実行できます。HBase と共に Hive を使用するには、通常は同じクラスターでこれらを起動します。ただし Hive と HBase を別々のクラ スターで起動することもできます。HBase と Hive を別々のクラスターに切り離して実行すると、各 アプリケーションがクラスターのリソースをより効率的に使用できるため、パフォーマンスが向上す る可能性があります。 次の手順は、Hive を使用してクラスターの HBase に接続する方法を説明します。 Note Hive クラスターは 1 つの HBase クラスターにのみ接続できます。 Hive を HBase に接続するには 1. 2. 3. 4. Hive と HBase がインストールされた別々のクラスターを作成するか、HBase と Hive の両方イ ンストールされている 1 つのクラスターを作成します。 別々のクラスターを使用する場合は、2 つのノード間で HBase と Hive のポートが開くように、 セキュリティグループを変更します。 SSH を使用して、Hive がインストールされているクラスターのマスターノードに接続しま す。詳細については、Amazon EMR 管理ガイドの「SSH を使用してマスターノードに接続す る (p. 459)」を参照してください。 次のコマンドで Hive シェルを起動します。 326 Amazon EMR 開発者ガイド HBase をバックアップおよび復元する hive 5. (オプション) HBase と Hive が同一のクラスターにある場合、これを行う必要はありませ ん。Hive クラスターの HBase クライアントを、データが含まれる HBase クラスターに接続しま す。次の例の public-DNS-name は、HBase クラスターのマスターノードのパブリック DNS 名 に置き換えます(例: ec2-50-19-76-67.compute-1.amazonaws.com)。 set hbase.zookeeper.quorum=public-DNS-name; 6. 必要に応じて、HBase データに対して Hive クエリを実行するか、次の手順に進みます。 Hive から HBase データにアクセスするには • Hive クラスターと HBase クラスターの間の接続が確立されたら(前述の手順を参照)、Hive に 外部テーブルを作成することで、HBase クラスターに格納されているデータにアクセスできま す。 次の例では、Hive プロンプトからの実行時に、inputTable という HBase テーブルに格納さ れているデータを参照する外部テーブルを作成しています。その後、Hive ステートメントで inputTable を参照し、HBase クラスターに格納されているデータに対してクエリを実行した り、そのデータを変更したりできます。 Note 以下の例では、AMI 2.3.3 で protobuf-java-2.4.0a.jar を使用しますが、サンプルをご自分 のバージョンに合せてお使いください。 お持ちの Protocol Buffers の JAR のバージョン をチェックするには、Hive コマンドプロンプトでコマンドを実行します: ! ls /home/ hadoop/lib; add jar lib/emr-metrics-1.0.jar ; add jar lib/protobuf-java-2.4.0a.jar ; set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com ; create external table inputTable (key string, value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1") tblproperties ("hbase.table.name" = "t1"); select count(*) from inputTable ; HBase と Hive を組み合わせた高度なユースケースと例については、「Combine NoSQL and Massively Parallel Analytics Using Apache HBase and Apache Hive on Amazon EMR」という AWS ビッグデータブログを参照してください。 HBase をバックアップおよび復元する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 327 Amazon EMR 開発者ガイド コンソールを使用して HBase を バックアップおよび復元する Amazon EMR には、手動で、または自動化されたスケジュールに従って、HBase データを Amazon S3 にバックアップする機能が用意されています。完全バックアップと増分バックアップの両方を実行 できます。HBase データのバックアップバージョンを作成した後、そのバージョンを HBase クラス ターに復元できます。復元は現在実行中の HBase クラスターに対して行うことができます。また、 バックアップされたデータが設定されたクラスターを新しく作成することもできます。 バックアップ処理中も、HBase は書き込みコマンドを実行し続けます。これにより、バックアップ中 もクラスターを使用し続けることができますが、バックアップ中のデータと、並行して実行されてい る書き込みオペレーションとの間に不整合が発生するリスクがあります。発生する可能性がある不整 合について理解するには、HBase では、書き込みオペレーションがクラスター内のノード全体に分散 されるという点を考慮する必要があります。特定のノードがポーリングされた後、書き込みオペレー ションが発生すると、そのデータはバックアップアーカイブに保存されません。HBase クラスターへ の以前の書き込み(既にポーリングされたノードに送信された書き込み)がバックアップアーカイブ に含まれない可能性がある一方で、それより後の書き込み(ポーリングされる前のノードに送信され た書き込み)がアーカイブに保存されることもあります。 整合性のあるバックアップが必要な場合は、バックアップ処理の初期段階であるノード同期中 に、HBase への書き込みを一時停止する必要があります。これを行うには、バックアップをリクエス トするときに --consistent パラメーターを指定します。このパラメーターが指定されている場合 は、この期間中の書き込みがキューに入れられ、同期が完了するとすぐに実行されます。定期バック アップをスケジュールすることもできます。これにより徐々に発生する不整合が解決されます。ある バックアップパスで逃したデータが、次のパスでバックアップされるからです。 HBase データをバックアップするときに、クラスターごとにさまざまなバックアップディレクトリを 指定する必要があります。これを簡単に行うには、クラスター識別子を、バックアップディレクトリ に指定されたパスの一部として使用します。("s3://mybucket/backups/j-3AEXXXXXX16F2" な ど)。これにより、以降のすべての差分バックアップが適切な HBase クラスターを参照するようにな ります。 不要になった古いバックアップファイルを削除する準備ができたら、まず HBase データの完全バック アップを行うことをお勧めします。これによりすべてのデータが保存されます。このデータは、その 後の差分バックアップのベースとして使用できます。完全バックアップが完了した後、バックアップ の場所に移動し、古いバックアップファイルを手動で削除できます。 HBase バックアップ処理では、一時ファイルの格納スペースに特定の制限がある S3DistCp をコピー 操作に使用します。詳細については、「S3DistCp (p. 386)」を参照してください。 コンソールを使用して HBase をバックアップおよ び復元する コンソールを使用すると、新しいクラスターを起動して、以前の HBase バックアップのデータを 入力することができます。また、HBase データの定期差分バックアップをスケジュールすること もできます。追加のバックアップおよび復元機能、たとえば、既に実行中のクラスターにデータを 復元したり、手動バックアップを行ったり、自動完全バックアップをスケジュールしたりする機能 は、CLI で使用できます。詳細については、「AWS CLI を使用して HBase をバックアップおよび復 元する; (p. 330)」を参照してください。 コンソールを使用して、アーカイブされた HBase データを新しいクラスターに指定するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Software Configuration] セクションの [Additional Applications] で、[HBase] と [Configure and add] を選択します。 4. [Add Application] ダイアログボックスで、[Restore From Backup] チェックボックスをオンにしま す。詳細については、「Amazon EMR クラスターで HBase を インストールする (p. 319) 」を 参照してください。 328 Amazon EMR 開発者ガイド コンソールを使用して HBase を バックアップおよび復元する 5. [Backup Location] で、新しい HBase クラスターにロードするバックアップの場所を指定しま す。ここには、Amazon S3 URL を s3://myawsbucket/backups/ という形式で指定する必要 があります。 6. [Backup Version] では、値を設定して、ロードするバックアップバージョンの名前を指定するオ プションがあります。[Backup Version] に値を設定しない場合は、指定した場所にある最新の バックアップがロードされます。 7. [Add] を選択して、必要に応じたオプションによるクラスターの作成に進みます。 コンソールを使用して HBase データの自動バックアップをスケジュールするには 1. [Software Configuration] セクションの [Additional Applications] で、[HBase]、[Configure and add] の順に選択します。 2. [Schedule Regular Backups] を選択します。 3. バックアップの整合性を確保するかどうかを指定します。バックアップの整合性とは、バック アップ処理の初期段階であるノード同期中に、書き込みオペレーションを一時停止することで す。つまり、一時停止された書き込みオペレーションはすべてキューに置かれ、同期が完了した ら再開されます。 4. バックアップの頻度を設定します。それには、[Backup Frequency] に数値を入力し、[Days]、 [Hours]、または [Minutes] を選択します。最初に実行される自動バックアップは完全バックアッ プです。その後、指定したスケジュールに基づき、差分バックアップが Amazon EMR によって 保存されます。 5. バックアップを格納する Amazon S3 における場所を指定します。差分バックアップが適切に判 断されるように、HBase クラスターはそれぞれ Amazon S3 内の個別の場所にバックアップする 必要があります。 6. [Backup Start Time] で、バックアップを最初に行うタイミングの値を指定します。これを now に 設定した場合、クラスターが実行されると直ちに最初のバックアップが行われます。または、日 付と時刻を ISO 形式で入力します。たとえば、「2013-09-26T20:00Z」と入力すると、開始時間 が 2013 年 9 月 26 日午後 8 時 (UTC) に設定されます。 329 Amazon EMR 開発者ガイド AWS CLI を使用して HBase を バックアップおよび復元する; 7. [Add] を選択します。 8. 必要に応じて他のオプションを指定し、クラスターの作成を進めます。 AWS CLI を使用して HBase をバックアップおよび 復元する; HBase を Amazon EMR で実行するとさまざまな方法でデータをバックアップし、完全バックアップ または差分バックアップを作成したり、バックアップを手動で実行したり、自動バックアップをスケ ジュールしたりできます。 AWS CLI を使用して、HBase バックアップの作成、 EMR クラスター作成時のバックアップからの HBase データの復元、HBase バックアップのスケジュール、Amazon S3 のバックアップデータから の HBase の復元、および HBase バックアップの無効化が可能です。 AWS CLI を使用して手動で HBase バックアップを作成するには HBase バックアップを作成するには、create-hbase-backup サブコマンドを --dir パラ メーターと共に入力して、Amazon S3 のバックアップ場所を識別します。Amazon EMR は、 バックアップの起動時間に基づいて付けられた名前でバックアップをタグ付けします。形式は YYYYMMDDTHHMMSSZ(例: 20120809T031314Z)です。他の名前を使ってバックアップにラベ 330 Amazon EMR 開発者ガイド AWS CLI を使用して HBase を バックアップおよび復元する; ルを付けるには、Amazon S3 に場所を作成し (以下の例では backups)、その場所の名前を、バック アップファイルをタグ付けする手段として使用できます。 • 次のコマンドを入力して、HBase データを s3://mybucket/backups にバックアップします。 タイムスタンプはバージョン名として使用します。j-3AEXXXXXX16F2 をクラスター ID に置き換 え、mybucket を Amazon S3 バケット名に置き換えます。このバックアップでは HBase への書 き込みが一時停止されないので、不整合が発生する可能性があります。 aws emr create-hbase-backup --cluster-id j-3AEXXXXXX16F2 --dir s3:// mybucket/backups/j-3AEXXXXXX16F2 次のコマンドを入力してデータをバックアップし、--consistent パラメーターを使用してバッ クアップの整合性を適用します。このフラグは、バックアップ中の HBase へのすべての書き込み を一時停止します。 aws emr create-hbase-backup --cluster-id j-3AEXXXXXX16F2 --dir s3:// mybucket/backups/j-3AEXXXXXX16F2 --consistent 詳細については、AWS CLI での Amazon EMR コマンドの使用方法を参照してください。 AWS CLI を使用して HBase データの自動バックアップをスケジュールするには HBase バックアップをスケジュールするには、schedule-hbase-backup サブコマンドを -interval および --unit パラメーターと共に入力します。開始時間を指定しない場合、最初のバッ クアップは直ちに開始されます。--consistent パラメーターを使用して、バックアップ処理中に HBase へのすべての書き込み操作を一時停止します。 • 整合性のある HBase バックアップをスケジュールするには、次のコマンド例を使用します。 整合性のある週 1 回の完全バックアップを作成し、最初のバックアップをすぐに開始するには、 次のコマンドを入力します。j-3AEXXXXXX16F2 はクラスター ID に置き換え、mybucketは Amazon S3 バケット名に置き換えます。 aws emr schedule-hbase-backup --cluster-id j-3AEXXXXXX16F2 --type full --dir s3://mybucket/backups/j-3AEXXXXXX16F2 --interval 7 --unit days -consistent 週 1 回行われる整合性のある完全バックアップを作成し、最初のバックアップを 2014 年 6 月 15 日 午後 8 時(UTC 時間)に開始するには、次のように入力します。 aws emr schedule-hbase-backup --cluster-id j-3AEXXXXXX16F2 --type full --dir s3://mybucket/backups/j-3AEXXXXXX16F2 --interval 7 --unit days -start-time 2014-06-15T20:00Z --consistent 毎日行われる整合性のある増分バックアップを作成し、最初のバックアップをすぐに開始するに は、次のように入力します。 aws emr schedule-hbase-backup --cluster-id j-3AEXXXXXX16F2 -type incremental --dir s3://mybucket/backups/j-3AEXXXXXX16F2 --interval 24 --unit hours --consistent 毎日行われる整合性のある増分バックアップを作成し、最初のバックアップを 2014 年 6 月 15 日 午後 8 時(UTC 時間)に開始するには、次のように入力します。 331 Amazon EMR 開発者ガイド AWS CLI を使用して HBase を バックアップおよび復元する; aws emr schedule-hbase-backup --cluster-id j-3AEXXXXXX16F2 -type incremental --dir s3://mybucket/backups/j-3AEXXXXXX16F2 --interval 24 --unit hours --start-time 2014-06-15T20:00Z --consistent 詳細については、AWS CLI での Amazon EMR コマンドの使用方法を参照してください。 AWS CLI を使用して HBase バックアップを無効にするには HBase バックアップを無効にするには、disable-hbase-backups サブコマンドを --cluster-id パラメーターと共に入力します。コンソールまたは list-clusters サブコマンドを使用してクラス ター ID を取得できます。バックアップを無効にする場合、バックアップタイプ(--full または -incremental)を識別します。 • 次のコマンドを入力して完全バックアップを無効にし、j-3AEXXXXXX16F2 をクラスター ID と置 き換えます。 aws emr disable-hbase-backups --cluster-id j-3AEXXXXXX16F2 --full 詳細については、AWS CLI での Amazon EMR コマンドの使用方法を参照してください。 AWS CLI を使用して、実行中のクラスターに HBase バックアップデータを復元するには 実行中のクラスターに HBase バックアップデータを復元するには、restore-from-hbase-backup サブコマンドを --cluster-id パラメーターと共に入力します。バックアップから復元するには、 バックアップディレクトリおよび(オプションで)バックアップバージョンを指定する必要がありま す。バックアップバージョンは、復元する既存のバックアップのバージョン番号を指定します。バッ クアップバージョンが指定されていない場合は、最新のバックアップが辞書順に使用されます。形式 は YYYYMMDDTHHMMSSZ(例: 20120809T031314Z)です。 • 実行中のクラスターに HBase バックアップデータを復元するには、次のコマンドを入力 し、j-3AEXXXXXX16F2 をクラスター ID に置き換え、mybucket を Amazon S3 バケット名に置 き換えます。 aws emr restore-from-hbase-backup --cluster-id j-3AEXXXXXX16F2 --dir s3:// mybucket/backups/j-3AEXXXXXX16F2 --backup-version 20120809T031314Z 詳細については、AWS CLI での Amazon EMR コマンドの使用方法を参照してください。 AWS CLI を使用して、HBase バックアップデータを新しいクラスターに設定するには 新しいクラスターに HBase バックアップデータを設定するには、create-cluster サブコマンドを --restore-from-hbase-backup パラメーターと共に入力します。バックアップから復元するに は、バックアップディレクトリおよび(オプションで)バックアップバージョンを指定する必要があ ります。バックアップバージョンは、復元する既存のバックアップのバージョン番号を指定します。 バックアップバージョンが指定されていない場合は、最新のバックアップが辞書順に使用されます。 形式は YYYYMMDDTHHMMSSZ(例: 20120809T031314Z)です。 • 次のコマンドを入力して、HBase がインストールされた状態でクラスターを作成し、s3: // mybucket/backups/j-3AEXXXXXX16F2 のバックアップデータを HBase に読み込みま す。myKey は、Amazon EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: 332 Amazon EMR 開発者ガイド HBase クラスターを終了する aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --restore-from-hbase-backup Dir=s3://mybucket/backups/ j-3AEXXXXXX16F2,BackupVersion=20120809T031314Z \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 --applications Name=Hue Name=Hive Name=Pig Name=HBase --restore-from-hbase-backup Dir=s3://mybucket/backups/ j-3AEXXXXXX16F2,BackupVersion=20120809T031314Z --use-default-roles --ec2-attributes KeyName=myKey --instance-type c1.xlarge --instancecount 3 --termination-protected --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと Amazon EC2 インスタンスプロ ファイルを作成していない場合は、「aws emr create-default-roles」と入力して それらを作成してから、create-cluster サブコマンドを入力します。 詳細については、AWS CLI での Amazon EMR コマンドの使用方法を参照してください。 HBase クラスターを終了する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 デフォルトでは、Amazon EMR は終了保護を有効にした状態でコンソールを使用して、作成されたク ラスターを起動します。これにより、エラーが発生したときや不注意でクラスターが終了するのを防 ぐことができます。クラスターを終了するには、まず、終了保護を無効にする必要があります。 AWS CLI を使用して作成されたクラスターでは、終了保護が無効になっています。クラスターが予期 せずに、またはエラーの発生によって終了することを防ぐには、--termination-protected パラ メーターを create-cluster サブコマンドに追加します。 HBase を設定する デフォルトの設定はほとんどのアプリケーションで動作しますが、HBase 設定を変更する柔軟性も確 保されています。これを行うには、次の 2 つのブートストラップアクションスクリプトのいずれかを 実行します。 • configure-hbase-daemons—マスター、regionserver、および zookeeper デーモンのプロパティを 設定します。これらのプロパティには、HBase デーモンの開始時に Java Virtual Machine(JVM) 333 Amazon EMR 開発者ガイド HBase デーモンを設定する に渡すヒープサイズおよびオプションが含まれます。これらのプロパティは、ブートストラップア クションの引数として設定します。このブートストラップアクションでは、HBase クラスターの / home/hadoop/conf/hbase-user-env.sh 設定ファイルが変更されます。 • configure-hbase—HBase マスターノードのバインド先ポート、CLI クライアントがアクションを 再試行する最大回数など、HBase サイト固有の設定を指定します。これらはブートストラップアク ションの引数として 1 つずつ設定するか、Amazon S3 で XML 設定ファイルの場所を指定します。 このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbase-site.xml 設 定ファイルが変更されます。 Note これらのスクリプトを実行できるのは、他のブートストラップアクションの場合と同様、ク ラスターの作成時のみです。このスクリプトを使用して、現在実行中の HBase クラスターの 設定を変更することはできません。 configure-hbase または configure-hbase-daemons ブートストラップアクションを実行すると、指定し た値によってデフォルトの値が上書きされます。明示的に設定しなかった値には、デフォルト値が設 定されます。 これらのブートストラップアクションでの HBase の設定操作は、Amazon EMR でブートストラップ アクションを使用して Hadoop 設定と Hadoop デーモンのプロパティを設定するのと似ています。 異なるのは、HBase にはプロセスごとのメモリオプションがないという点です。メモリオプション は、--daemon-opts 引数を使用して設定されます。daemon は、設定するデーモンの名前に置き換 えてください。 HBase デーモンを設定する Amazon EMR には、HBase デーモンの設定変更に使用できるブートストラップアクション s3://region.elasticmapreduce/bootstrap-actions/configure-hbase-daemons が用意さ れています。region は、HBase クラスターを起動するリージョンです。 Amazon EMR でサポートされるリージョンについては、「AWS リージョンを選択する (p. 32)」を参 照してください。ブートストラップアクションは、HBase クラスターの起動時にのみ実行できます。 コンソール、AWS CLI、または API を使用して、ブートストラップアクションを設定できます。ブー トストラップアクションの設定の詳細については、「(オプション)追加のソフトウェアをインス トールするためのブートストラップアクションの作成 (p. 121)」を参照してください。 AWS CLI を使用して HBase デーモンを設定するには クラスターを起動して、1 つ以上の HBase デーモンを設定するときに、ブートストラップアクション configure-hbase-daemons を追加します。次のプロパティを設定するには、configure-hbasedaemons ブートストラップアクションを使用します。 可変 説明 hbase-master-opts JVM によるマスターデーモンの実行方法をコントロールす るオプション。設定されている場合は、これらによってデ フォルトの HBASE_MASTER_OPTS 変数が上書きされま す。 regionserver-opts JVM によるリージョンサーバーデーモンの実行方法をコン トロールするオプション。設定されている場合は、これら によってデフォルトの HBASE_REGIONSERVER_OPTS 変数が上書きされます。 334 Amazon EMR 開発者ガイド HBase サイト設定を指定する 可変 説明 zookeeper-opts JVM による zookeeper デーモンの実行方法をコントロー ルするオプション。設定されている場合は、これらによっ てデフォルトの HBASE_ZOOKEEPER_OPTS 変数が上書 きされます。 これらのオプションの詳細については、HBase ドキュメントの「hbase-env.sh」を参照してくださ い。 • ブートストラップアクションを使用して zookeeper-opts と hbase-master-opts の値を設定 するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hbase-daemons,Args=["--hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-master-opts=-Xmx2048m","--hbaseregionserver-opts=-Xmx4096m"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=HBase --use-defaultroles --ec2-attributes KeyName=myKey --instance-type c1.xlarge -instance-count 3 --termination-protected --bootstrap-action Path=s3:// elasticmapreduce/bootstrap-actions/configure-hbase-daemons,Args=["-hbase-zookeeper-opts=-Xmx1024m -XX:GCTimeRatio=19","--hbase-masteropts=-Xmx2048m","--hbase-regionserver-opts=-Xmx4096m"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと Amazon EC2 インスタンスプロ ファイルを作成していない場合は、「aws emr create-default-roles」と入力して それらを作成してから、create-cluster サブコマンドを入力します。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 HBase サイト設定を指定する Amazon EMR は、HBase の設定を変更するために使用できるブートストラップアクション s3:// elasticmapreduce/bootstrap-actions/configure-hbase を提供します。設定値はブートスト ラップアクションで引数として 1 つずつ設定するか、Amazon S3 で XML 設定ファイルの場所を指定 します。少しの設定を行えばいいだけの場合は、設定値を 1 つずつ設定する方が便利です。追加する 335 Amazon EMR 開発者ガイド HBase サイト設定を指定する 変更が多数ある場合、または再利用できるよう設定を保存したい場合は、XML ファイルを使用して設 定することをお勧めします。 Note Amazon S3 バケット名には、s3://region.elasticmapreduce/bootstrap-actions/ configure-hbase のようにリージョンプレフィックスを付けることができます (region は、HBase クラスターを作成するリージョン)。Amazon EMR でサポートされるリージョン については、「AWS リージョンを選択する (p. 32)」を参照してください。 このブートストラップアクションでは、HBase クラスターの /home/hadoop/conf/hbasesite.xml 設定ファイルが変更されます。ブートストラップアクションは、HBase クラスターの起動 時にのみ実行できます。ブートストラップアクションの設定の詳細については、「(オプション)追 加のソフトウェアをインストールするためのブートストラップアクションの作成 (p. 121)」を参照し てください。 設定可能な HBase サイト設定の詳細については、HBase ドキュメントでデフォルト設定の項を参照 してください。 AWS CLI を使用して個別の HBase のサイト設定を指定するには HBase クラスターの起動時に configure-hbase ブートストラップアクションを設定し、hbasesite.xml で変更する値を指定します。 • hbase.hregion.max.filesize 設定を変更するには、次のコマンドを入力し、myKey を Amazon EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hbase,Args=["-s","hbase.hregion.max.filesize=52428800"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=HBase --use-defaultroles --ec2-attributes KeyName=myKey --instance-type c1.xlarge --instance-count 3 --termination-protected --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase,Args=["s","hbase.hregion.max.filesize=52428800"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと Amazon EC2 インスタンスプロ ファイルを作成していない場合は、「aws emr create-default-roles」と入力して それらを作成してから、create-cluster サブコマンドを入力します。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 336 Amazon EMR 開発者ガイド 最適化のための HBase サイト設定 AWS CLI を使用して XML ファイルで HBase サイト設定を指定するには 1. カスタムバージョンの hbase-site.xml を作成します。カスタムファイルは有効な XML であ る必要があります。エラーが発生する可能性を少なくするには、/home/hadoop/conf/hbasesite.xml の Amazon EMR HBase マスターノードにある hbase-site.xml のデフォルトのコ ピーから開始し、そのファイルのコピーを編集します。ファイルをゼロから作成する必要はあり ません。新しいファイルに新しい名前を付けるか、hbase-site.xml をそのまま使用します。 2. カスタム hbase-site.xml ファイルを Amazon S3 バケットにアップロードします。クラスター を起動する AWS アカウントがファイルにアクセスできるように、このバケットには権限が設定 されています。さらに、クラスターを起動する AWS アカウントが Amazon S3 バケットを所有し ている場合は、アクセス権が付与されます。 3. HBase クラスターの起動時に configure-hbase ブートストラップアクションを設定し、カス タム hbase-site.xml ファイルの場所を含めます。 次の例では、HBase サイト設定の値 を、s3://mybucket/my-hbase-site.xml で指定した値に設定しています。 次のコマンドを 入力し、myKey を EC2 キーペアの名前に置き換え、mybucket; を Amazon S3 バケットの名前 に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hbase,Args=["--site-config-file","s3://mybucket/config.xml"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=HBase --use-defaultroles --ec2-attributes KeyName=myKey --instance-type c1.xlarge -instance-count 3 --termination-protected --bootstrap-action Path=s3:// elasticmapreduce/bootstrap-actions/configure-hbase,Args=["--site-configfile","s3://mybucket/config.xml"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの Amazon EMR サービスロールと Amazon EC2 インスタンスプロ ファイルを作成していない場合は、「aws emr create-default-roles」と入力して それらを作成してから、create-cluster サブコマンドを入力します。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 最適化のための HBase サイト設定 HBase サイト設定の一部またはすべてを設定することで、アプリケーションのワークロード用に HBase クラスターを最適化できます。調査の出発点として次の設定を使用することをお勧めしま す。複数のオプションを指定する場合は、キーと値の各ペアの前に -s オプションスイッチを付加す る必要があります。次に示すオプションはすべて、AWS CLI 用です。 337 Amazon EMR 開発者ガイド 最適化のための HBase サイト設定 zookeeper.session.timeout デフォルトのタイムアウトは 3 分(180000 ミリ秒)です。リージョンサーバーがクラッシュしたと き、そのリージョンサーバーが存在しないことをマスターサーバーが認識し、回復処理を開始するの に要する時間です。マスターサーバーの回復処理を高速化するには、この値を小さくして時間を短く します。次の例では、1 分 (60000 ミリ秒) を使用しています。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehbase,Args=["-s","zookeeper.session.timeout=60000"] hbase.regionserver.handler.count リクエストをテーブルに提供するためにリージョンサーバーが開いたままにするスレッド数を定 義します。同時実行クライアント数が多い大きな書き込みバッファを使用するときに、ユーザー によるリージョンサーバーの強制終了を防ぐため、デフォルトでは 10 という低い値が設定され ています。大まかな方法として、リクエストあたりのペイロードが MB 範囲に近いときは(big puts、ラージキャッシュを使用した scans)小さな値を、ペイロードが小さいときは(gets、small puts、ICV、deletes)、大きな値を指定します。次の例では、開いているスレッドの数を 30 まで増や しています。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehbase,Args=["-s","hbase.regionserver.handler.count=30"] hbase.hregion.max.filesize このパラメーターは、個別のリージョンのサイズ(バイト単位)を管理します。デフォルトで は、256 MB に設定されています。大量のデータを HBase クラスターに書き込んでおり、頻繁に分割 が発生する場合は、このサイズを増やすことで個別のリージョンを大きくします。分割は少なくなり ますが、サーバー間におけるリージョンの負荷分散にかかる時間が長くさなります。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehbase,Args=["-s","hbase.hregion.max.filesize=1073741824"] hbase.hregion.memstore.flush.size このパラメーターは、ディスクにフラッシュする前の memstore の最大サイズ(バイト単位)を管理 します。デフォルト値は、64 MB です。ワークロードが書き込みオペレーションの短期バーストで構 成されている場合は、この制限を増やして、バースト中もすべての書き込みがメモリに収まるように して、後でディスクにフラッシュされるようにします。これにより、バースト中のパフォーマンスが 向上することがあります。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehbase,Args=["-s","hbase.hregion.memstore.flush.size=134217728"] 338 Amazon EMR 開発者ガイド ユーザーインターフェイスを表示する ユーザーインターフェイスを表示する HBase にはウェブベースのユーザーインターフェイスが用意されており、これを使用して HBase ク ラスターをモニタリングできます。Amazon EMR で HBase を実行するとき、ウェブインターフェイ スはマスターノードで実行され、ポート転送を使用して表示できます。これは、SSH トンネルの作成 とも呼ばれます。 HBase ユーザーインターフェイスを表示するには 1. SSH を使用してマスターノードにトンネル接続し、安全な接続を確立します。詳細について は、Amazon EMR 管理ガイドの「オプション 2、パート 1: ダイナミックポートフォワーディン グを使用してマスターノードへの SSH トンネルをセットアップする (p. 469)」を参照してくだ さい。 2. プロキシツール(Firefox 用 FoxyProxy プラグインなど)を備えたウェブブラウザをインストール して、AWS ドメイン用の SOCKS プロキシを作成します。詳細については、『Amazon EMR 管 理ガイド』の「オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示する ようにプロキシを設定する (p. 472)。 3. プロキシセットと SSH 接続が開いている場合、HBase UI を表示するには、ブラウザウィンドウ で http://master-public-dns-name:60010/master-status を開きます。master-public-dnsname は、HBase クラスターのマスターサーバーのパブリック DNS アドレスです。 HBase ログファイルを表示する HBase では、そのオペレーションの一環として、設定、デーモン、アクション、および例外に関する 詳しい情報をログファイルに書き込みます。これらのログファイルは、HBase で問題をデバッグする だけでなく、パフォーマンスを追跡するときにも役に立ちます。 ログファイルを Amazon S3 に保持するようクラスターを設定した場合、ログが Amazon S3 に書き込 まれるのは 5 分ごとであり、最新のログファイルが利用できるようになるまでに若干の遅れが生じる 可能性があるという点に注意する必要があります。 マスターノードで HBase ログを表示するには • 現在の HBase ログを表示するには、SSH を使用してマスターノードに接続し、mnt/var/log/ hbase ディレクトリに移動します。これらのログは、クラスターの起動時に Amazon S3 へのロ グを有効にしない限り、クラスター終了後に使用できなくなります。詳細については、Amazon EMR 管理ガイドの「SSH を使用してマスターノードに接続する (p. 459)」を参照してくださ い。SSH を使用してマスターノードに接続したら、次のようなコマンドを使用して、ログディレ クトリに移動できます。 cd mnt/var/log/hbase Amazon S3 で HBase ログを表示するには • Amazon S3 で HBase ログおよび他のクラスターログにアクセスするには、また、クラスターの 終了後もこうしたログを利用できるようにするには、クラスターの作成時にこれらのログを受け 取るよう Amazon S3 バケットを指定する必要があります。これは、--log-uri オプションを使 用して行います。クラスターのログ記録を有効にする方法の詳細については、Amazon EMR 管理 ガイドの「ログ記録およびデバッグの作成(オプション) (p. 204)」を参照してください。 339 Amazon EMR 開発者ガイド CloudWatch で HBase を監視する CloudWatch で HBase を監視する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は、HBase バックアップのモニタリングに使用できる 3 つのメトリクスを CloudWatch に報告します。これらのメトリクスは CloudWatch に 5 分間隔でプッシュされ、料金はかかり ません。CloudWatch を使用して Amazon EMR メトリクスを監視する方法の詳細については、 「CloudWatch でメトリクスをモニタリングする (p. 436)」を参照してください。 メトリクス 説明 HBaseBackupFailed 前回のバックアップに失敗したかどうか。デフォルトでは 0 に設定されており、前回のバックアップが失敗した場合 は 1 に更新されます。このメトリクスは、HBase クラス ターについてのみ報告されます。 ユースケース: HBase バックアップを監視する 単位: Count HBaseMostRecentBackupDuration 前回のバックアップが完了するのにかかった時間。このメ トリクスは、前回完了したバックアップが成功したか失敗 したかに関係なく設定され、このメトリクスは、バック アップの進行中に、バックアップが開始してからの分数を 返します。このメトリクスは、HBase クラスターについて のみ報告されます。 ユースケース: HBase バックアップを監視する 単位: Minutes HBaseTimeSinceLastSuccessfulBackup クラスターで前回成功した HBase バックアップが開始し てから経過した分数。このメトリクスは、HBase クラス ターについてのみ報告されます。 ユースケース: HBase バックアップを監視する 単位: Minutes Ganglia で HBase を監視する Ganglia オープンソースプロジェクトは拡張可能な分散システムで、パフォーマンスへの影響を最小 限に抑えながら、クラスターやグリッドをモニタリングできるように設計されています。クラスター で Ganglia を有効にすると、レポートを生成し、クラスター全体のパフォーマンスを表示するだけで なく、個別のノードインスタンスのパフォーマンスを調べることができます。Ganglia オープンソー スプロジェクトの詳細については、http://ganglia.info/ を参照してください。Amazon EMR クラスター での Ganglia の使用の詳細については、「Ganglia でパフォーマンスをモニタリングする (p. 452)」 を参照してください。 configure-hbase-for-ganglia ブートストラップアクションを使用して、HBase に対して Ganglia を設 定できます。このブートストラップアクションは、Ganglia にメトリクスを発行するように HBase を 設定します。 340 Amazon EMR 開発者ガイド Ganglia で HBase を監視する Note クラスターを起動するときは、HBase と Ganglia を設定する必要があります。Ganglia のレ ポートを、実行中のクラスターに追加することはできません。 Ganglia を設定してクラスターを起動した後は、マスターノードで実行中のグラフィカルインター フェイスを使用して、Ganglia のグラフやレポートにアクセスできます。 Ganglia のログファイルは /mnt/var/log/ganglia/rrds にあるサーバーに格納されます。ログ ファイルが Amazon S3 バケットに保存されるようにクラスターを設定した場合は、Ganglia ログファ イルも同様に同じ場所に保存されます。 AWS CLI を使用して Ganglia および HBase のクラスターを設定するには • クラスターを起動し、configure-hbase-for-ganglia ブートストラップアクションを指定するには、 次のコマンドを入力し、myKey を Amazon EC2 キーペアの名前に置き換えます。 Note Amazon S3 バケットパスには、HBase クラスターが作成されたリージョンのプレフィッ クスを付けることができます (たとえば、s3://region.elasticmapreduce/bootstrapactions/configure-hbase-for-ganglia)。Amazon EMR でサポートされるリージョンについ ては、「AWS リージョンを選択する (p. 32)」を参照してください。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 \ --applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type c1.xlarge --instance-count 3 --termination-protected \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hbase-for-ganglia • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig Name=HBase Name=Ganglia --use-default-roles --ec2-attributes KeyName=myKey --instancetype c1.xlarge --instance-count 3 --termination-protected --bootstrapaction Path=s3://elasticmapreduce/bootstrap-actions/configure-hbase-forganglia Ganglia のウェブインターフェイスで HBase メトリクスを表示するには 1. SSH を使用してマスターノードにトンネル接続し、安全な接続を確立します。詳細について は、Amazon EMR 管理ガイドの「オプション 2、パート 1: ダイナミックポートフォワーディン グを使用してマスターノードへの SSH トンネルをセットアップする (p. 469)」を参照してくだ さい。 2. プロキシツール(Firefox 用 FoxyProxy プラグインなど)を備えたウェブブラウザをインストール して、AWS ドメイン用の SOCKS プロキシを作成します。詳細については、『Amazon EMR 管 理ガイドオプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するように プロキシを設定する (p. 472)』の「。 3. プロキシセットと SSH 接続が開いている場合、Ganglia メトリクスを表示するには、ブラウザ ウィンドウで http://master-public-dns-name/ganglia/ を開きます。master-public-dnsname は、HBase クラスターのマスターサーバーのパブリック DNS アドレスです。 341 Amazon EMR 開発者ガイド HBase の以前のバージョンからの移行 マスターノードで Ganglia ログファイルを表示するには • クラスターが実行中の場合、ログファイルにアクセスするには、SSH を使用してマスター ノードに接続し、/mnt/var/log/ganglia/rrds ディレクトリに移動します。詳細について は、Amazon EMR 管理ガイドの「SSH を使用してマスターノードに接続する (p. 459) 」を参照 してください。 Amazon S3 で Ganglia ログファイルを表示するには • 起動時にログファイルを Amazon S3 に保存するようクラスターを設定した場合は、Ganglia ロ グファイルも同様にその場所に保存されます。ログが Amazon S3 に書き込まれるのは 5 分ごと であり、最新のログファイルが利用できるようになるまでに若干の遅れが生じる可能性がありま す。詳細については、「HBase ログファイルを表示する (p. 339)」を参照してください。 HBase の以前のバージョンからの移行 HBase の以前のバージョンからデータを移行するには、Apache HBase リファレンスガイドの 「Upgrading」および「HBase version number and compatibility」を参照してください。HBase の 1.0 バージョンより以前のバージョンからアップグレードする場合は、要件に特にご注意ください。 342 Amazon EMR 開発者ガイド Hue とは データの表示、照会、操作に関する Hue の設定 このセクションは、次のトピックで構成されます。 トピック • Hue とは (p. 343) • Hue がインストールされた状態でのクラスターの作成 (p. 344) • Hue ウェブインターフェイスを起動する (p. 345) • Amazon RDS でリモートデータベースと Hue を使用する (p. 346) • Hue の詳細設定 (p. 349) • Metastore Manager の制限 (p. 354) Hue とは このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hue は、Amazon EMR と Apache Hadoop で使用するオープンソースでウェブベースのグラフィ カルユーザーインターフェイスです。Hue は、複数の異なる Hadoop エコシステムプロジェクトを Amazon EMR クラスター向けの、設定可能なインターフェイスにまとめます。Amazon は、Amazon EMR 上の Hue に固有のカスタマイズを追加しました。Amazon EMR コンソールを使用してクラス ターを起動し、Hue を使用してクラスター上にある Hadoop および関連コンポーネントを操作できま す。Hue の詳細については、http://gethue.com を参照してください。 Amazon EMR 上の Hue の主要な機能について Amazon EMR 上の Hue は、以下をサポートします。 • Amazon S3 と Hadoop ファイルシステム(HDFS)ブラウザ - 適切なアクセス権限があれば、エメ フェラル HDFS ストレージとアカウントに属する Amazon S3 バケット間でデータを参照し、移動 することができます。 343 Amazon EMR 開発者ガイド Hue がインストールされた状態でのクラスターの作成 • Hive - データでインタラクティブなクエリを実行するには、Hive Editor を使用します。これは、プ ログラムまたはバッチ処理されたクエリのプロトタイプを作成する場合にも役立ちます。 • Pig - データでスクリプトを実行するか、またはインタラクティブなコマンドを実行するには、Pig Editor を使用します。 • Metastore Manager - Hive メタストアのコンテンツの表示と操作(インポート/作成、削除など)を 可能にします。 • Job Browser - 送信された Hadoop ジョブのステータスを表示するには、Job Browser を使用しま す。 • ユーザー管理 - Hue ユーザーアカウントを管理し、LDAP ユーザーを Hue と統合することができま す。 • AWS サンプル - Hue のアプリケーションを使用して、さまざまな AWS サービスからサンプルデー タを処理する、いくつかのすぐに使用できるサンプルが用意されています。Hue にログインする と、Hue Home アプリケーションに移動します。ここには、サンプルがプレインストールされてい ます。 Hue と AWS マネジメントコンソール クラスター管理者は AWS マネジメントコンソールを使用してクラスターを起動、管理します。こ の場合も、Hue がインストールされた状態でクラスターを起動します。その一方で、エンドユー ザーは Hue などのアプリケーションを介して Amazon EMR クラスターを完全に操作することがで きます。Hue はクラスターのアプリケーションのフロントエンドとして動作し、ユーザーはユー ザーフレンドリなウェブインターフェイスを使用して、クラスターを操作することができます。Hive Editor、Pig Editor などの Hue のアプリケーションでは、それぞれのシェルアプリケーションでインタ ラクティブにスクリプトを実行するために、クラスターにログインする必要がありません。 サポートされる Hue のバージョン Amazon EMR でサポートされる Hue の最初のバージョンは Hue 3.6 です。 Hue がインストールされた状態でのクラスターの 作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 コンソールを使用し、Hue がインストールされた状態でクラスターを起動するには 1. [Go to advanced options] を選択します。 2. [Software Configuration] に移動し、[Hadoop distribution] として [Amazon] を選択し、[AMI version] として [3.3.0](またはそれ以降)を選択します。 3. [Software Configuration] > [Applications to be installed] で、Hue はデフォルトで表示されます。 4. [Hardware Configuration] で、デフォルトの EC2 インスタンスの種類として、[m3.xlarge] を使用 します。ニーズに適合するようにインスタンスタイプを変更できます。Hue に同時にアクセスし ているユーザーが 20 人以上の場合は、マスターノードのインスタンスタイプとして、m3.2xlarge 以上をお勧めします。また、Hue を実行しているクラスターに対して、最低 2 個のコアノードを 持つことをお勧めします。 5. [Security and Access] で、クラスターへの接続のキーペアを選択します。マスターノードの Hue ウェブインターフェイスに接続するには、キーペアを使用して SSH トンネルを開く必要がありま す。 344 Amazon EMR 開発者ガイド Hue ウェブインターフェイスを起動する 6. [Create Cluster ] をクリックします。 AWS CLI を使用し、Hue がインストールされた状態でクラスターを起動するには AWS CLI を使用して、Hue がインストールされた状態でクラスターを起動するには、createcluster サブコマンドを --applications パラメーターと共に入力します。 Note 最新バージョンの AWS CLI をインストールする必要があります。最新リリースをダウンロー ドするには、https://aws.amazon.com//cli/ を参照してください。 1. 以前にデフォルトの EMR ロールおよび EC2 インスタンスプロファイルを作成していない場合 は、次のコマンドを入力して作成します。あるいは、独自のロールを指定できます。独自のロー ルの使用の詳細については、「IAM およびアプリケーションの Amazon EMR ロールを設定す る (p. 186) 」を参照してください。 aws emr create-default-roles 2. デフォルトのロールを使用して Hue がインストールされた状態で Amazon EMR クラスターを起 動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Hue cluster" --ami-version 3.11.0 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Hue cluster" --ami-version 3.11.0 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 Note Windows の場合、上記の Linux 行連結記号 (\) をキャレット (^) に置き換えます。 Note --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つの マスターノードが起動され、残りのインスタンスはコアノードとして起動されます。す べてのノードで、コマンドで指定したインスタンスタイプが使用されます。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Hue ウェブインターフェイスを起動する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 345 Amazon EMR 開発者ガイド Amazon RDS でリモートデータベースと Hue を使用する Hue の起動は、クラスターのマスターノードにホストされている任意の HTTP インターフェイスへの 接続と同じです。次の手順は、Hue インターフェイスにアクセスする方法を示しています。マスター ノードでホストされているウェブインターフェイスへのアクセスの詳細については、「Amazon EMR クラスターでホストされているウェブサイトの表示 (p. 464) 」を参照してください。 Hue ウェブインターフェイスを起動するには 1. 「 オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマスターノードへの SSH トンネルをセットアップする (p. 469) 」の手順に従ってマスターノードへの SSH トンネ ルを作成し、ブラウザの HTTP プロキシアドインを設定します。 2. ブラウザにアドレス http://master public DNS:8888 を入力して Hue ウェブインターフェ イスを開きます。 3. Hue のログイン画面で、管理者として初めてログインする場合、ユーザー名とパスワードを入力 して Hue のスーパーユーザーのアカウントを作成し、[Create account] をクリックします。それ 以外の場合は、ユーザー名とパスワードを入力し、[Create account] をクリックするか、管理者か ら提供された認証情報を入力します。 Amazon RDS でリモートデータベースと Hue を 使用する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 デフォルトでは、Hue のユーザー情報とクエリ履歴は、マスターノード上のローカルの MySQL デー タベースに保存されます。ただし、Amazon S3 に保存されている設定と、Amazon RDS の MySQL データベースを使用して、Hue が有効な 1 つ以上のクラスターを作成することができます。こうする ことで、Amazon EMR クラスターを実行し続けなくても、Hue によって作成されたユーザー情報とク エリ履歴を永続化できます。設定ファイルは、Amazon S3 サーバーサイド暗号化機能を使って保存す ることをお勧めします。 最初に、Hue のリモートデータベースを作成します。 外部の MySQL データベースを作成するには 1. https://console.aws.amazon.com/rds/ にある Amazon RDS コンソールを開きます。 2. [Launch a DB Instance] をクリックします。 3. MySQL を選択し、[Select] をクリックします。 4. [Multi-AZ Deployment and Provisioned IOPS Storage] はデフォルトのままにして、[Next] をク リックします。 5. [Instance Specifications] はデフォルトのままにして、[Settings] を指定し、[Next] をクリックしま す。 6. [Configure Advanced Settings] ページで、適切なセキュリティグループとデータベース名を選択 します。使用するセキュリティグループは、少なくともクラスターのマスターノードからのポー ト 3306 に対するイングレス TCP アクセスを許可する必要があります。この時点でまだクラス ターを作成していない場合、ポート 3306 への接続をすべてのホストに許可し、クラスターを起 動した後にセキュリティグループを調整することができます。[Launch DB Instance] をクリック します。 7. JSON 設定ファイルを作成します。 a. RDS ダッシュボードで、[Instances] をクリックし、先ほど作成したインスタンスを選択し ます。データベースを使用できる場合、テキストエディタを開いて以下の内容をファイル 346 Amazon EMR 開発者ガイド Amazon RDS でリモートデータベースと Hue を使用する hueconfig.json にコピーできます。以下の JSON ブロックのコメントは、RDS コンソー ルで使用される対応する名前を示しています。 { "hue":{ "database": { "name": "dbname", "user": "username", "password": "password", "host": "hueinstance.c3b8apyyjyzi.us-east-1.rds.amazonaws.com", "port": "3306", "engine": "mysql" } } } b. AWS CLI を使って Hue データベース設定ファイルを管理者の Amazon S3 バケットにアップ ロードする aws s3 cp ./hueconfig.json s3://mybucket Hue の設定ロールの作成 Important Hue はデフォルトで EMR_EC2_DefaultRole(InstanceProfile など)を使用して Hue デー タベース設定とファイルブラウザ機能の両方を取得するために Amazon S3 にアクセスするの で、設定ファイルはすべての Hue ユーザーに公開されます。 これを回避するには、管理者はその設定ファイルにアクセスするために引き受ける追加のロールを設 定できます。これにより、EMR_EC2_DefaultRole を制限し、ユーザーが設定にアクセスできないよ うにします。 1. https://console.aws.amazon.com/iam/ で Identity and Access Management (IAM) コンソールにサ インインします。 2. HueConfigRole というロールを作成します。 a. [Roles] をクリックし、次に [Create New Role] をクリックします。 b. c. d. [Role Name] に「HueConfigRole」と入力し、[Next Step] をクリックします。 [Role for Cross-Account Access] で [Provide access between AWS accounts you own] を選択 し、[Next Step] をクリックします。 Hue ユーザーの [Account ID] を入力し、[Next Step] をクリックします。 e. カスタムポリシーを選択し、[Select] をクリックします。 HueConfigRole にアタッチ中の次のポリシーの名前を選択します: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], 347 Amazon EMR 開発者ガイド Amazon RDS でリモートデータベースと Hue を使用する "Resource": "arn:aws:s3:::bucketName/path" } ] } ここで bucketName と path は Hue 設定ファイルの場所です。[Next Step] をクリックしま す。 f. 3. [Create Role] をクリックします。 ダッシュボードでロールを選択し、[Attach Role Policy] をクリックすることによ り、EMR_EC2_DefaultRole に次のカスタム信頼ポリシーをアタッチします。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::AccountID:role/HueConfigRole" }, { "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::<bucketName/path>" } ] } AccountID は所有者のアカウントで、ルートと同義です。詳細については、「AWS アカウント ID」を参照してください。 これは、ユーザーが管理者でない通常の EMR_EC2_DefaultRole イ ンスタンスプロファイルへのバケットアクセスを拒否する効果があります。 次に、作成した設定ファイルを使用してクラスターを起動できます。 コンソールを使用してクラスターを起動するときに、Hue の 外部 MySQL データベースを指 定するには 1. [Applications to be installed] セクションで、Hue の [Edit] アイコンをクリックします。 2. [Update Application] ダイアログの [Use external database] で、[Yes] をクリックし、Amazon S3 の Hue 設定ファイルの場所を入力または参照して、[Save] をクリックします。 3. 「Hue がインストールされた状態でのクラスターの作成 (p. 344)」のステップを使用してクラ スターの作成に進みます。 AWS CLI を使用してクラスターを起動するときに、Hue の外部 MySQL データベースを指定 するには AWS CLI を使用してクラスターを起動するときに、Hue の外部 MySQL データベースを指定するに は、--applications パラメーターを入力し、引数リストで Hue 設定ファイルのパスを指定しま す。 Note 外部にある同一のデータベースを使用するが、各クラスターはクエリ履歴とユーザー情報を 共有する複数のクラスターを作成できます。 348 Amazon EMR 開発者ガイド トラブルシューティング • クラスターの起動時に Hue の外部 MySQL データベースを指定するには、次のコマンドを入力し ます。myKey は EC2 キーペアの名前に置き換え、path-to-config.json は .json 設定ファイ ルのファイル名へのパスに置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Hue cluster" --ami-version 3.11.0 -applications Name=Hive Name=Pig \ Name=Hue,Args=[--hue-config=s3://path-to-config.json,--hue-configrole=HueConfigRole] --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Hue cluster" --ami-version 3.11.0 -applications Name=Hive Name=Pig Name=Hue,Args=[--hue-config=s3://pathto-config.json] --use-default-roles --ec2-attributes KeyName=myKey -instance-type m3.xlarge --instance-count 3 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 トラブルシューティング Amazon RDS フェイルオーバーの場合 Hue データベースインスタンスが応答しなくなったり、フェイルオーバー処理の途中であるために、 クエリの実行中に遅延が発生する可能性があります。この問題に関する情報とガイドラインを以下に 示します。 • Amazon RDS コンソールにログインすると、フェイルオーバーイベントを検索できます。たとえ ば、フェイルオーバーが処理中または発生したことが表示されたら、"Multi-AZ instance failover started" や "Multi-AZ instance failover completed" などのイベントを探します。 • RDS インスタンスがフェイルオーバーを完了するのに、約 30 秒かかります。 • Hue で、クエリの応答に通常より長い時間がかかっている場合は、クエリの再実行を試みます。 Hue の詳細設定 このセクションでは、次のトピックについて説明します。 トピック • LDAP ユーザーに関して Hue を設定する (p. 350) 349 Amazon EMR 開発者ガイド LDAP ユーザーに関して Hue を設定する LDAP ユーザーに関して Hue を設定する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 LDAP との統合により、ユーザーは LDAP のディレクトリに保存されている既存の認証情報を使用し て Hue にログインすることができます。Hue を LDAP と統合する場合、Hue で個別にユーザー情報 を管理する必要はありません。以下に示す情報では、Microsoft Active Directory との Hue の統合を示 していますが、その設定オプションはどの LDAP のディレクトリでも類似しています。 LDAP 認証では、最初にサーバーをバインドして接続を確立します。次に、確立された接続は、LDAP ユーザー情報を検索するために以降のクエリで使用されます。Active Directory サーバーで匿名接続が 許可されていない限り、接続はバインド識別子名とパスワードで確立される必要があります。バイン ド識別子名(DN)は、bind_dn 設定で定義されます。バインドパスワードは bind_password 設定 で定義されます。Hue には、LDAP リクエストをバインドするために、検索バインドと直接バインド という 2 つの方法があります。Amazon EMR で Hue を使用するための推奨の方法は、検索バインド です。 検索バインドが Active Directory で使用される場合、Hue はベース識別子名(DN)から取得される必 要がある属性を見つけるために、ユーザー名属性(user_name_attr config で定義されます)を使 用します。検索バインドは、完全な DN が Hue のユーザーに対して不明な場合に役立ちます。 たとえば、共通名(CN)を使用するように user_name_attr config を設定している場合があり ます。その場合は、Active Directory サーバーは、ログイン時に提供される Hue ユーザー名を使用し て、ベース識別子名から開始して一致する共通名をディレクトリツリーで検索します。Hue ユーザー の共通名が見つかった場合、ユーザーの識別子名がサーバーによって返されます。次に、Hue はバイ ンド操作を実行して、ユーザーの認証に使用される識別子名を構築します。 Note 検索バインドでは、ベース識別子名で開始してすべてのディレクトリのサブツリーでユー ザー名を検索します。Hue の LDAP 設定で指定されたベース識別子名はユーザー名の最も近 い親である必要があります。それ以外の場合、LDAP 認証のパフォーマンスが低下する可能性 があります。 直接バインドが Active Directory で使用されている場合、認証には正確な nt_domain また は ldap_username_pattern、が使用される必要があります。直接バインドが使用されてい る場合、nt ドメイン(nt_domain 設定で定義されます)属性が定義されていると、<login username>@nt_domain 形式を使用してユーザー識別名テンプレートが作成されます。この テンプレートは、ベース識別子名で開始してすべてのディレクトリのサブツリーを検索するた めに使用されます。nt ドメインが設定されていない場合、Hue はユーザーの正確な識別子名 パターン(ldap_username_pattern 設定で定義されます)を検索します。このインスタン スで、サーバーは、ベース識別子名で開始してすべてのディレクトリサブツリーで、一致する ldap_username_pattern 値を検索します。 LDAP の統合のために Hue 設定ファイルを使用して Amazon EMR クラスターを起動するには 1. 次のテキストを .json 設定ファイルに入力して、LDAP の検索バインドを有効にします。 { "hue": { "ldap": { "ldap_servers": { "yourcompany": { "base_dn": "DC=yourcompany,DC=hue,DC=com", "ldap_url": "ldap://ldapurl", "search_bind_authentication": "true", 350 Amazon EMR 開発者ガイド LDAP ユーザーに関して Hue を設定する "bind_dn": "CN=hue,CN=users,DC=yourcompany,DC=hue,DC=com", "bind_password": "password" } } } } } 次のテキストを .json 設定ファイルに入力し、nt_domain を使用して LDAP の直接バインドを 有効にします。 { "hue": { "ldap": { "ldap_servers": { "yourcompany": { "base_dn": "DC=yourcompany,DC=hue,DC=com", "ldap_url": "ldap://ldapurl", "search_bind_authentication": "false", "bind_dn": "hue", "bind_password": "password", "nt_domain": "yourcompany.hue.com" } } } } } 次のテキストを .json 設定ファイルに入力し、ldap_username_pattern を使用して LDAP に 対して直接バインドを有効にします。 { "hue": { "ldap": { "ldap_servers": { "yourcompany": { "base_dn": "DC=yourcompany,DC=hue,DC=com", "ldap_url": "ldap://ldapurl", "search_bind_authentication": "false", "bind_dn": "CN=administrator,CN=users,DC=yourcompany,DC=hue,DC=com", "bind_password": "password", "ldap_username_pattern": "CN=username,OU=orgunit,DC=yourcompany,DC=hue,DC=com" } } } } } Note ldap_username_pattern を使用して Hue で LDAP の直接バインドを設定していて、 識別子名にユーザー名の共通名属性が含まれる場合、共通名(または Active Directory の フルネーム)を使用してログインする必要があります。この場合、sAMAccountName を 使用してログインすることはできませんが、Hue がグループとユーザーを同期している 351 Amazon EMR 開発者ガイド LDAP ユーザーに関して Hue を設定する ときは、Hue でのユーザーの作成に sAMAccountName が使用されます。これにより、グ ループの同期は無効と表示されます。 グループをネスト済みで、LDAP の直接バインドを nt_domain で使用する際に、サブグループ のすべてのユーザーを同期する場合は、次のテキストを入力します。この設定では、subgroups および nested_members_search_depth パラメーターを使用します。 { "hue": { "ldap": { "ldap_servers": { "yourcompany": { "base_dn": "DC=yourcompany,DC=hue,DC=com", "ldap_url": "ldap://ldapurl", "search_bind_authentication": "false", "bind_dn": "hue", "bind_password": "password", "nt_domain": "yourcompany.hue.com" } }, "subgroups": "nested", "nested_members_search_depth": 3 } } } 検索バインドを使用し、LDAP エンティティを管理するときにユーザーおよびグループのフィル タを適用するには、次のテキストを入力します。この設定では、groups および users パラメー ターを使用します。 { "hue": { "ldap": { "ldap_servers": { "yourcompany": { "base_dn": "DC=yourcompany,DC=hue,DC=com", "ldap_url": "ldap://ldapurl", "search_bind_authentication": "true", "bind_dn": "CN=hue,CN=users,DC=yourcompany,DC=hue,DC=com", "bind_password": "password", "groups": { "group_name_attr": "cn", "group_filter": "objectclass=group" }, "users": { "user_filter": "objectclass=user", "user_name_attr": "sAMAccountName" } } } } } } 2. Hue 設定(.json)ファイルを Amazon S3 バケットにアップロードします。 352 Amazon EMR 開発者ガイド LDAP ユーザーに関して Hue を設定する Important .json 設定ファイルは安全な Amazon S3 バケットに保存して、設定を保護する必要があ ります。 3. Amazon EMR クラスターを作成し、.json 設定ファイルに LDAP 設定を適用するには、次の コマンドを AWS CLI に入力します。mybucket は Amazon S3 バケットの名前、myKey は EC2 キーペアの名前、hueconfig.json は .json ファイルのパスとファイル名に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Hue cluster" --ami-version=3.11.0 -applications Name=Hive \ Name=Pig Name=Hue,Args=[--hue-config=s3://mybucket/hueconfig.json] \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Hue cluster" --ami-version=3.11.0 --applications Name=Hive Name=Pig Name=Hue,Args=[--hueconfig=s3://mybucket/hueconfig.json] --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Hue で LDAP 設定を表示するには 1. Amazon EMR クラスターのマスターノードに対するアクティブな VPN 接続または SSH トンネ ルがあることを確認します。次に、ブラウザで、「master-public-dns:8888」と入力して Hue ウェブインターフェイスを開きます。 2. Hue の管理者認証情報を使用してログインします。[Did you know?] ウィンドウが開いた場合は、 [Got it, prof!] をクリックして閉じます。 3. ツールバーの [Hue] アイコンをクリックします。 4. [About Hue] ページで、[Configuration] をクリックします。 5. [Configuration Sections and Variables] セクションで、[Desktop] をクリックします。 6. [ldap] セクションにスクロールして、設定を確認します。 353 Amazon EMR 開発者ガイド Metastore Manager の制限 Metastore Manager の制限 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Metastore Manager のデフォルトデータベースは HDFS に存在します。HDFS に格納されている データベースを使用して Amazon S3 からテーブルをインポートすることはできません。テーブルを Amazon S3 からインポートするには、新しいデータベースを作成し、そのデータベースのデフォルト の場所を Amazon S3 に変更します。次に、データベースでテーブルを作成し、Amazon S3 からテー ブルをインポートします。 354 Amazon EMR 開発者ガイド Amazon EMR と Amazon Kinesis の統 合で、どのようなことができますか? Amazon Kinesis データを分析する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Note Amazon EMR の Amazon Kinesis 機能は、中国 (北京)を除くすべてのパブリックリージョン で利用できます。 Amazon EMR クラスターは、Hive、Pig、MapReduce、Hadoop Streaming API、Cascading などの Hadoop エコシステムで使い慣れたツールを使用して、Amazon Kinesis ストリームを直接読み込み、 処理することができます。また、実行しているクラスターで Amazon Kinesis のリアルタイムデータ を Amazon S3、Amazon DynamoDB、および HDFS の既存データと結合できます。後処理のアク ティビティとして、Amazon EMR から Amazon S3 または DynamoDB に直接データをロードできま す。Amazon Kinesis の主なサービスと料金については、Amazon Kinesis を参照してください。 Amazon EMR と Amazon Kinesis の統合で、どの ようなことができますか? Amazon EMR と Amazon Kinesis の統合により、以下のようなシナリオへの対応が非常に容易になり ます。 • ストリーミングログ分析 – ストリーミングのウェブログを分析して、リージョン別、ブラウザ別、 およびアクセスドメイン別に、数分ごとの上位 10 件のエラータイプのリストを生成できます。 • カスタマーエンゲージメント – Amazon Kinesis のクリックストリームデータと DynamoDB テーブ ルに保存されている広告キャンペーン情報を結合するクエリを作成し、特定のウェブサイトに表示 される最も効果的な広告カテゴリを特定できます。 • アドホックインタラクティブクエリ – Amazon Kinesis ストリームから HDFS に定期的にデータを 読み込み、ローカルの Impala テーブルとして使用可能にすることで、高速かつインタラクティブな 分析クエリを実行できます。 355 Amazon EMR 開発者ガイド Amazon Kinesis ストリームのチェックポイントの分析 Amazon Kinesis ストリームのチェックポイント の分析 ユーザーは、反復と呼ばれるもので、Amazon Kinesis ストリームの定期的なバッチ分析を実行でき ます。Amazon Kinesis ストリームのデータレコードはシーケンス番号を使用して取得されるため、反 復の境界は Amazon EMR によって DynamoDB テーブルに格納される開始と終了のシーケンス番号で 定義されます。たとえば、iteration0 が終了すると、終了のシーケンス番号が DynamoDB に格納 されるため、iteration1 ジョブが開始されたとき、ストリームからそれに続くデータを取得できま す。このストリームデータの反復のマッピングはチェックポイントと呼ばれます。詳細については、 「Kinesis コネクター」を参照してください。 反復でチェックポイントが作成され、ジョブが反復の処理に失敗すると、データレコードが 24 時間 以内に Amazon Kinesis に到達しなかった場合は Amazon EMR で反復のレコードを処理しようとしま す。 チェックポイントは、次のことが可能になる機能です。 • 同じストリームと論理名で実行した前のクエリにより処理された連続番号の後でデータ処理を開始 します • 前のクエリで処理された Amazon Kinesis のデータと同じバッチを再処理します チェックポイントを有効にするには、スクリプトで kinesis.checkpoint.enabled パラメーター を true に設定します。また、以下のパラメーターを設定します。 構成設定 説明 kinesis.checkpoint.metastore.table.name チェックポイント情報が保存される DynamoDB テー ブル名 kinesis.checkpoint.metastore.hash.key.name DynamoDB テーブルのハッシュキー名 kinesis.checkpoint.metastore.hash.range.nameDynamoDB テーブルの範囲キー名 kinesis.checkpoint.logical.name 現在の処理の論理名 kinesis.checkpoint.iteration.no 論理名に関連付けられている処理の反復番号 kinesis.rerun.iteration.without.wait 失敗した反復がタイムアウトを待たずに再実行できる かどうかを示すブール値(デフォルトは false)。 Amazon DynamoDB テーブルのプロビジョニングさ れた IOPS に関する推奨事項 Amazon Kinesis 用の Amazon EMR コネクタは、チェックポイントのメタデータの補助として DynamoDB データベースを使用します。Amazon Kinesis ストリームのデータをチェックポイント の間隔で Amazon EMR クラスターで使用する前に、DynamoDB のテーブルを作成する必要があ ります。テーブルは Amazon EMR クラスターと同じリージョンに存在する必要があります。以下 は、DynamoDB テーブルにプロビジョニングする必要がある IOPS の数に関する一般的な推奨で す。j は同時に実行できる Hadoop ジョブ(異なる論理名 + 反復数の組み合わせ)の最大数で、s は ジョブが処理するシャードの最大数です。 [Read Capacity Units] の場合: j*s/5 [Write Capacity Units] の場合: j*s 356 Amazon EMR 開発者ガイド パフォーマンスに関する考慮事項 パフォーマンスに関する考慮事項 Amazon Kinesis シャードスループットは、Amazon EMR クラスターのノードのインスタンスのサイ ズ、およびストリームのレコードのサイズに正比例しています。本稼働の作業負荷にはマスターノー ドやコアノードで m1.xlarge かそれ以上のインスタンスを使用することをお勧めします。 Amazon EMR クラスターで Amazon Kinesis 分析 をスケジュールする 任意の繰り返しについてタイムアウトと最大期間で制限される、アクティブな Amazon Kinesis スト リームでデータを分析するときは、ストリームから定期的に詳細を取得するために、分析を頻繁に 実行することが重要です。定期的な間隔でこのようなスクリプトおよびクエリを実行する方法は複数 ありますが、これらのような反復タスクには、AWS Data Pipeline を使用することをお勧めします。 詳細については、「AWS Data Pipeline 開発者ガイド」の「AWS Data Pipeline PigActivity」および 「AWS Data Pipeline HiveActivity」を参照してください。 チュートリアル: Amazon EMR および Hive によ る Amazon Kinesis ストリームの分析 Note Amazon EMR の Amazon Kinesis 機能は、中国 (北京)を除くすべてのパブリックリージョン で利用できます。 このチュートリアルでは、Amazon EMR を使用して、Hive を使用して Amazon Kinesis ストリームか らの受信データに対するクエリと分析を実行する方法を示します。このチュートリアルの指示には、 以下の方法が含まれています。 • AWS アカウントにサインアップする • Amazon Kinesis ストリームを作成する • Amazon Kinesis Publisher サンプルアプリケーションを使用して、サンプルの Apache ウェブログ データをストリームに入力する • Hive で使用するインタラクティブ Amazon EMR クラスターを作成する • クラスターに接続し、Hive を使用してストリームデータの処理を行う Note Amazon Kinesis の Log4J Appender は、現在、米国東部(バージニア北部) リージョンで作 成されたストリームについてのみ動作します。 トピック • サービスへのサインアップ (p. 358) • Amazon Kinesis ストリームを作成する (p. 358) • Amazon DynamoDB テーブルの作成 (p. 358) • Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイル、サ ンプルログファイルをダウンロードする (p. 359) 357 Amazon EMR 開発者ガイド サービスへのサインアップ • Amazon Kinesis Publisher サンプルアプリケーションを起動する (p. 360) • • • • クラスターの起動 (p. 362) アドホック Hive クエリを実行する (p. 366) チェックポイントによるクエリの実行 (p. 369) スクリプトによるクエリのスケジュール設定 (p. 370) サービスへのサインアップ AWS アカウントをお持ちでない場合は、次に説明する手順に従ってアカウントを作成してください。 AWS にサインアップするには 1. 2. https://aws.amazon.com/ を開き、[AWS アカウントの作成] を選択します。 オンラインの手順に従います。 アカウントがアクティブになり、使用可能な状態になったら、AWS から Eメールで通知されま す。AWS アカウントからすべてのサービスにアクセスできますが、料金はリソースを利用した分のみ に課金されます。このチュートリアルでかかる費用は最小限で済みます。 Amazon Kinesis ストリームを作成する Streams ストリームを作成する前に、ストリームのサイズを決定する必要があります。ストリーム のサイズの決定に関する詳細については、「How Do I Size an Amazon Kinesis Stream?」(Amazon Kinesis Developer Guide)を参照してください。 Streams のエンドポイントについては、アマゾン ウェブ サービス全般のリファレンスの「リージョン とエンドポイント」を参照してください。 ストリームを作成するには 1. https://console.aws.amazon.com/kinesis/ にある Streams コンソールを開きます。 2. お客様がまだ Amazon Kinesis サービスにサインアップしていない場合、コンソールに移動する とサインアップするように促すメッセージが表示されます。 リージョンセレクターで [米国東部 (バージニア北部) リージョン] を選択します。 3. 4. 5. [Create Stream] を選択します。 [Create Stream] ページで、ストリームの名前を指定し(「AccessLogStream」など)、シャー ドの数として「2」を指定して、[Create] を選択します。 ストリームの作成中、[Stream List] ページのストリームの [Status] の値は、[CREATING] です。 ストリームを使用する準備ができると、[Status] の値は [ACTIVE] に変わります。 ストリームの名前を選択します。[Stream Details] ページには、ストリーム設定の概要とモニタリ ング情報が表示されます。 Amazon Kinesis ストリームをプログラムで作成する方法については、「Amazon Kinesis Developer Guide」 の 「Using the Amazon Kinesis Service API」 を参照してください。 Amazon DynamoDB テーブルの作成 Amazon Kinesis の Amazon EMR connector は、DynamoDB のデータベースをバッキングデータベー スとして使用してチェックポイントを作成します。Amazon Kinesis ストリームのデータをチェックポ イントの間隔で Amazon EMR クラスターで使用する前に、DynamoDB のテーブルを作成する必要が あります。 358 Note Amazon EMR 開発者ガイド Amazon Kinesis サンプルアプリケーション の Log4J Appender、サンプル認証情報ファイ ル、サンプルログファイルをダウンロードする 同じ DynamoDB テーブルを使用する他のチュートリアルを完了している場合、テーブルを再 作成する必要はありません。ただしテーブルのデータは、このチュートリアルのチェックポ イント作成のスクリプトで使用する前に、削除する必要があります。 Amazon Kinesis の Amazon EMR Connector で使用するために Amazon DynamoDB データ ベースを作成するには 1. Amazon EMR クラスターと同じリージョンで DynamoDB コンソールを使用 し、MyEMRKinesisTable という名前でテーブルを作成します。 2. [Primary Key Type] の [Hash and Range] を選択します。 3. [Hash Attribute Name] の [HashKey] を使用します。 4. [Range Attribute Name] の [RangeKey] を使用します。 5. [Continue] を選択します。 6. このチュートリアルでは、インデックスを追加する必要はありません。[Continue] を選択しま す。 7. [Read Capacity Units] および [Write Capacity Units] では、それぞれ 10 IOPS を使用します。 Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイル、サ ンプルログファイルをダウンロードする Amazon Kinesis Log4j Appender は、カスタムコードを必要とせずに Log4J 出力を直接ユーザー 指定の Amazon Kinesis ストリームにプッシュする Apache Log4J Appender インターフェイス を実装しています。この実装では Amazon Kinesis 向けの AWS SDK for Java API を使用してお り、log4j.properties ファイルを使用して設定できます。このサンプルの Amazon Kinesis Log4j Appender を単独で利用するには、こちらから jar ファイルをダウンロードできます。このチュートリ アルのステップを簡略化するため、以下で参照しているサンプルアプリケーションで、JAR ファイル を組み込んで appender のデフォルト設定を提供しています。Publisher のサンプルアプリケーション の全機能を試すユーザーは、log4j.properties を変更できます。設定可能なオプションは次のと おりです。 log4j.properties の設定オプション オプション Default 説明 log4j.appender.KINESIS.streamName AccessLogStream データが発行されたストリー ム名。 log4j.appender.KINESIS.encoding UTF-8 Amazon Kinesis に送信される 前にログメッセージの文字列 をバイトに変換するために使 用されるエンコーディング。 log4j.appender.KINESIS.maxRetries 3 ログメッセージを発行するた めに Kinesis API を呼び出すと きの再試行の最大回数。 log4j.appender.KINESIS.backoffInterval 100ms 359 再試行が行われるまでのミリ 秒単位の期間。 Amazon EMR 開発者ガイド Amazon Kinesis Publisher サン プルアプリケーションを起動する オプション Default 説明 log4j.appender.KINESIS.threadCount 20 設定した Kinesis ストリーム にログを発行するための並列 スレッドの数。 log4j.appender.KINESIS.bufferSize 2000 メモリに残すことができる未 処理のログメッセージの最大 数。 log4j.appender.KINESIS.shutdownTimeout 30 アプリケーション JVM が正 常に終了する前に、バッファ 内のメッセージを送信する秒 数。 Amazon Kinesis Publisher のサンプルアプリケーションは kinesis-log4j-appender-1.0.0.jar で、Java 1.7 以降が必要です。 Amazon Kinesis Log4j Appender ツールをダウンロードして設定するには 1. http://emr-kinesis.s3.amazonaws.com/publisher/kinesis-log4j-appender-1.0.0.jar から Amazon Kinesis Log4j Appender JAR をダウンロードします。 2. kinesis-log4j-appender-1.0.0.jar をダウンロードしたフォルダ に、AwsCredentials.properties というファイルを作成し、ご自分の認証情報を指定して編 集します: accessKey=<your_access_key> secretKey=<your_secret_key> <your_access_key> と <your_secret_key> をご自分の AWS アカウントの accessKey と secretKey に置き換えてください。アクセスキーの詳細については、「How Do I Get Security Credentials?」を参照してください(AWS General Reference)。 3. http://elasticmapreduce.s3.amazonaws.com/samples/pig-apache/input/access_log_1 からサンプ ルアクセスログファイル access_log_1 をダウンロードして、認証情報と JAR ファイルを保存 したディレクトリと同じディレクトリに保存します。 4. (オプション) 同じディレクトリに、http://emr-kinesis.s3.amazonaws.com/publisher/ log4j.properties から log4j.properties をダウンロードして、アプリケーションのニーズに応 じて設定を変更します。 Amazon Kinesis Publisher サンプルアプリケーショ ンを起動する 次のステップは、Amazon Kinesis 発行者ツールを起動することです。 1 回限りの発行のため Amazon Kinesis Publisher を開始するには 1. JAR ファイル、認証情報、およびログファイルがあるディレクトリと同じパスで、以下のコマン ドをコマンドラインから実行します。 • Linux、UNIX、Mac OS X ユーザー: 360 Amazon EMR 開発者ガイド Amazon Kinesis Publisher サン プルアプリケーションを起動する ${JAVA_HOME}/bin/java -cp .:kinesis-log4j-appender-1.0.0.jar com.amazonaws.services.kinesis.log4j.FilePublisher access_log_1 • Windows ユーザー: %JAVA_HOME%/bin/java -cp .;kinesis-log4j-appender-1.0.0.jar com.amazonaws.services.kinesis.log4j.FilePublisher access_log_1 2. Amazon Kinesis Publisher は残りの行がなくなるまでログファイルの各行を Amazon Kinesis に アップロードします。 [...] DEBUG [main] (FilePublisher.java:62) - 39100 records written DEBUG [main] (FilePublisher.java:62) - 39200 records written DEBUG [main] (FilePublisher.java:62) - 39300 records written INFO [main] (FilePublisher.java:66) - Finished publishing 39344 log events from access_log_1, took 229 secs to publish INFO [main] (FilePublisher.java:68) - DO NOT kill this process, publisher threads will keep on sending buffered logs to Amazon Kinesis Note Amazon Kinesis ストリームにレコードを発行した後、メッセージ "INFO [main] (FilePublisher.java:68) - DO NOT kill this process, publisher threads will keep on sending buffered logs to Kinesis" が表示されること があります。このチュートリアルの目的を達成するためには、このメッセージが表示さ れたらプロセスを終了しても差し支えありません。 Linux で継続して発行するために Amazon Kinesis Publisher を開始するには チェックポイント作成のスクリプトで使用するために Amazon Kinesis ストリームに連続して発行 するシミュレーションを行う場合は、Linux システムで以下のステップを実行して、400 秒ごとに Amazon Kinesis ストリームにサンプルログをロードするこのシェルスクリプトを実行します。 1. http://emr-kinesis.s3.amazonaws.com/publisher/publisher.sh からファイル publisher.sh をダウ ンロードします。 2. publisher.sh を実行可能にします。 % chmod +x publisher.sh 3. publisher.sh 出力のリダイレクト先のログディレクトリ /tmp/cronlogs を作成します。 % mkdir /tmp/cronlogs 4. 次の nohup コマンドで publisher.sh を実行します。 % nohup ./publisher.sh publisher.log & 1>>/tmp/cronlogs/publisher.log 361 2>>/tmp/cronlogs/ Amazon EMR 開発者ガイド クラスターの起動 5. Important このスクリプトは永久に実行されます。チュートリアルの完了にこれ以上の料金が発生 しないように、スクリプトを終了します。 Windows で継続して発行するために Amazon Kinesis Publisher を開始するには チェックポイント作成のスクリプトで使用するために Amazon Kinesis ストリームに連続して発行す るシミュレーションを行う場合は、Windows システムで以下のステップを実行して、400 秒ごとに Amazon Kinesis ストリームにサンプルログをロードするこのバッチスクリプトを実行します。 1. http://emr-kinesis.s3.amazonaws.com/publisher/publisher.bat からファイル publisher.bat をダ ウンロードします。 2. コマンドプロンプトで publisher.bat と入力して Enter を押して、実行します。必要に応じ て、Windows エクスプローラーでファイルを開くことができます。 3. Important このスクリプトは永久に実行されます。チュートリアルの完了にこれ以上の料金が発生 しないように、スクリプトを終了します。 クラスターの起動 次のステップは、クラスターの起動です。このチュートリアルでは、Amazon EMR コンソールと Amazon EMR CLI の両方を使用して、クラスターを起動するステップについて説明します。ニー ズに最適な方法を選択します。クラスターを起動するとき、計算処理を実行するために Amazon EMR が EC2 インスタンス(仮想サーバー)をプロビジョニングします。これらの EC2 インスタ ンスは、Amazon EMR 用にカスタマイズされた Amazon マシンイメージ(AMI)でプリロードさ れ、Amazon EMR は Hadoop とその他のビッグデータアプリケーションをプリロードします。 コンソールを使用して Amazon Kinesis で使用するクラスターを起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Create Cluster] ページの [Cluster Configuration] セクションで、次の表に従ってフィールドを確 認します。 フィールド アクション クラスター名 クラスターの記述名を入力するか、デフォルト名 "My cluster" のまま にしておきます。 この名前はオプションです。また、一意である必要はありません。 終了保護 デフォルトのオプションを選択したまま([Yes])にします。 終了保護を有効にすると、事故やエラーが発生してもクラスターは シャットダウンしません。詳細については、『Amazon EMR 管理ガイ ド』の「クラスター終了の管理 (p. 481)。通常、アプリケーションの 作成中(クラスターを終了するようなエラーを除去するため)、また 長時間実行するクラスターやデータを保護するために、この値を [Yes] に設定します。 ログ記録 これにより、Amazon EMR が詳細なログデータを Amazon S3 にキャ プチャするかどうかが決まります。 362 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 ログフォルダ S3 の場 所 前のフィールドでログ作成を有効にした場合は、デバッグログを保存 する Amazon S3 パスを入力または参照します。コンソールを使用し て、Amazon S3 を生成することもできます。ログフォルダーがない場 合、Amazon EMR コンソールによって作成されます。 Amazon S3 ログアーカイブを有効にすると、Amazon EMR により、 クラスターの EC2 インスタンスから Amazon S3 にログファイルがコ ピーされます。これにより、クラスターの終了時および クラスターを ホストしている EC2 が終了してもログファイルが失われるのを回避で きます。これらのログは、トラブルシューティングに役立ちます。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 4. [Software Configuration] セクションで、次の表に従ってフィールドを確認します。 フィールド アクション Hadoop ディスト [Amazon] を選択します。 リビューション これにより、クラスターで実行する Hadoop のディストリビューションが 決定されます。Hadoop の Amazon ディストリビューション、または複数 の MapR ディストリビューションのいずれかを実行するように選択できま す。詳細については、「Hadoop 用 MapR ディストリビューションを使用 する (p. 224) 」を参照してください。 AMI のバージョ ン 5. [3.0.4 (Hadoop 2.2.0)] を選択します。 詳細については、「Amazon マシンイメージ(AMI) (p. 56)」を参照してく ださい。 [Hardware Configuration] セクションで、次の表に従ってフィールドを確認します。 Note AWS アカウントあたりのデフォルトの最大ノード数は 20 です。例えば、実行中のクラ スターが 2 つある場合、両方のクラスターに対して実行するノード数は合わせて 20 個 以下にする必要があります。この制限を超えるとクラスターエラーが発生します。20 個 を超えてノードが必要な場合は、Amazon EC2 インスタンス制限を増やすようにリクエ ストを送信する必要があります。リクエストされた制限の増加に、ニーズにおける一時 的な未計画の増加に対応するための十分な容量があることを確認します。詳細について は、「Amazon EC2 インスタンス上限緩和申請」を参照してください。 フィールド アクション ネットワーク [Launch into EC2-Classic] を選択します。 リストから VPC サブネット識別子を選択して、Amazon VPC でクラスター を起動します(オプション)。詳細については、「クラスターの Amazon VPC サブネットを選択する (p. 209) EC2 アベイラビ リティーゾーン [No preference] を選択します。 363 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション 特定の Amazon EC2 アベイラビリティーゾーンでクラスターを起動できま す(オプション)。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』 の「リージョンとアベイラビリティゾーン」を参照してください。 マスター [m1.large] を選択します。 マスターノードは、Hadoop タスクをコアとタスクノードに割り当て、ス テータスをモニタリングします。各クラスターには必ず 1 つのマスター ノードがあります。 これにより、マスターノードとして使用する EC2 インスタンス タイプが指定されます。有効なタイプは、m1.large(デフォル ト)、m1.、c1.medium、c1.xlarge、m2.xlarge、m2.2xlarge、および m2.4xlarge、xlarge、cg1.4xlarge です。 このチュートリアルでは、すべてのノードで m1.large インスタンスを使用 します。 Request Spot Instances ボックスはオフのままにしておきます。 コア [m1.large] を選択します。 これにより、マスターノードをスポットインスタンス上で実行するかどう かが指定されます。詳細については、「(オプション)スポットインスタ ンスでコストを削減する (p. 43)」を参照してください。 コアノードは、Hadoop の Map および Reduce タスクを実行し、Hadoop Distributed File System(HDFS)ファイルシステムを使用してデータを格納 する EC2 インスタンスです。コアノードは、マスターノードによって管理 されます。 これにより、コアノードとして使用する EC2 インスタンスタ イプが指定されます。有効なタイプは、m1.large(デフォル ト)、m1.、c1.medium、c1.xlarge、m2.xlarge、m2.2xlarge、および m2.4xlarge、xlarge、cg1.4xlarge です。 このチュートリアルでは、すべてのノードで m1.large インスタンスを使用 します。 カウント 2 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、コアノードをスポットインスタンス上で実行するかどうかが 指定されます。詳細については、「(オプション)スポットインスタンス でコストを削減する (p. 43)」を参照してください。 364 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション タスク [m1.large] を選択します。 タスクノードは Hadoop タスクを処理するのみで、データを保存しま せん。クラスターから追加および削除ができるので、容量を増やすこと でピークロードに対応し、後から減らすなど、クラスターで使用される EC2 インスタンス容量を管理するために使用できます。タスクノード は、TaskTracker Hadoop デーモンのみを実行します。 これにより、タスクノードとして使用する EC2 インスタンス タイプが指定されます。有効なタイプは、m1.large(デフォル ト)、m1.、c1.medium、c1.xlarge、m2.xlarge、m2.2xlarge、および m2.4xlarge、xlarge、cg1.4xlarge です。 カウント 0 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、タスクノードをスポットインスタンス上で実行するかどうか が指定されます。詳細については、「(オプション)スポットインスタン スでコストを削減する (p. 43)」を参照してください。 Note コストを節約するために、このチュートリアルでは m1.large インスタンスタイプの使用 をお勧めします。本稼働ワークロードの場合は、m1.xlarge インスタンスタイプ以上をお 勧めします。 6. [Security and Access] セクションで、次の表に従ってフィールドに入力します。 フィールド アクション EC2 key pair リストから Amazon EC2 キーペアのプライベートキーを選択します。 オプションで、[Proceed without an EC2 key pair] を選択することもできま す。このフィールドに値を入力しない場合、SSH を使用してマスターノー ドに接続できません。SSH を使用してマスターノードに接続する方法につ いては、『Amazon EMR 管理ガイド』の「SSH を使用してマスターノード に接続する (p. 459)。 IAM ユーザーア クセス [All other IAM users] を選択すると、クラスターが AWS アカウントのすべ ての IAM ユーザーから表示およびアクセス可能になります。詳細について は、『Amazon EMR 管理ガイド』の「IAM ロールを使用したユーザーアク セス権限の設定 (p. 179) または、現在の IAM ユーザーへのアクセスを制限するには、[No other IAM users] を選択します。 ロールの構成 [Default] を選択して、デフォルトの Amazon EMR ロールと Amazon EC2 インスタンスプロファイルを生成します。既存のデフォルトのロールがあ る場合は、クラスターに使用されます。ない場合は作成されます(適切な アクセス権限があると仮定した場合)。[View policies for default roles] を選 択して、デフォルトのロールプロパティを表示することもできます。また は、カスタムロールがある場合は、[Custom] を選択してロールを選択でき ます。Amazon EMR ロールおよび Amazon EC2 インスタンスプロファイル は、コンソールを使用してクラスターを作成するときに必要になります。 365 Amazon EMR 開発者ガイド アドホック Hive クエリを実行する フィールド アクション ロールにより、Amazon EMR はユーザーに代わって他の AWS サービスに アクセスできるようになります。Amazon EC2 インスタンスプロファイル により、クラスター内の Amazon EC2 インスタンスへのアプリケーション アクセスが制御されます。 詳細については、『Amazon EMR 管理ガイド』の「IAM およびアプリケー ションの Amazon EMR ロールを設定する (p. 186) 7. [Bootstrap Actions] および [Steps] セクションでは、いずれの設定も変更する必要はありません。 8. 設定を確認し、設定に問題がなければ、[Create Cluster] を選択します。 9. クラスターを起動すると、コンソールに [Cluster Details] ページが表示されます。 AWS CLI を使用してクラスターを作成するには • クラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換え ます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "EmrKinesisTutorial" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "EmrKinesisTutorial" --ami-version 3.3 --applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 アドホック Hive クエリを実行する アドホック Hive クエリを実行するには 1. SSH を使用してクラスターのマスターノードに接続し、以下のステップで示されているコマンド を実行します。クライアントオペレーティングシステムによりクラスターに接続するためにどの ステップを使用するかが決定されます。詳細については、Amazon EMR 管理ガイドSSH を使用 してマスターノードに接続する (p. 459)の「」を参照してください。 2. SSH ウィンドウのホームディレクトリから、次のコマンドを実行して、Hive シェルを起動しま す。: 366 Amazon EMR 開発者ガイド アドホック Hive クエリを実行する ~/bin/hive 3. 次のクエリを実行して、Amazon Kinesis ストリーム AccessLogStream のレコードを解析する ことで apachelog テーブルを作成します。 DROP TABLE apachelog; CREATE TABLE apachelog ( host STRING, IDENTITY STRING, USER STRING, TIME STRING, request STRING, STATUS STRING, SIZE STRING, referrer STRING, agent STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^ \"]*\") ([0-9]*) ([0-9]*) ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\")" ) STORED BY 'com.amazon.emr.kinesis.hive.KinesisStorageHandler' TBLPROPERTIES("kinesis.stream.name"="AccessLogStream"); このクエリは、各列で Apache ウェブログ形式を解析するために RegexSerde を使用します。こ のクエリが Amazon Kinesis ストリーム名を指定する方法に注意してください。 4. オプションの追加設定は、以下の追加行を使用してテーブル定義の一部として指定できます。例: ... STORED BY 'com.amazon.emr.kinesis.hive.KinesisStorageHandler' TBLPROPERTIES( "kinesis.stream.name"="AccessLogStream", "kinesis.accessKey"="AwsAccessKey", "kinesis.secretKey"="AwsSecretKey", "kinesis.nodata.timeout"="1", "kinesis.iteration.timeout"="5", "kinesis.iteration.batchsize"="1000", "kinesis.endpoint.region"="us-east-1", "kinesis.retry.interval"="1000", "kinesis.retry.maxattempts"="3" ); また、これらのオプションのプロパティは、実際のクエリを実行する前にグローバル変数を使用 して設定することもできます。 ... hive> SET kinesis.stream.name=AccessLogStream; hive> SET kinesis.nodata.timeout=1; hive> ... 367 Amazon EMR 開発者ガイド アドホック Hive クエリを実行する Note これらのテーブルプロパティの値は、常にグローバル設定値をオーバーライドします。 次の表には、テーブル定義、およびグローバル変数で設定できるその他の設定プロパティについ ての情報が記載されています。 構成設定 デフォルト値 説明 kinesis.stream.name データのソースとしての Amazon Kinesis ストリーム 名。 kinesis.accessKey クラスターに設定された AWS アクセスキー。 Amazon S3 認証情報または Amazon S3 認証情報がない場 合は、IAM ベースのロール認 証情報. kinesis.secretKey クラスターに設定された AWS 秘密キー。 Amazon S3 認証情報または Amazon S3 認証情報がない場 合は、IAM ベースのロール認 証情報。 kinesis.nodata.timeout 5 この期間連続してデータが受 信されない場合にこの繰り 返しを終了するための分(整 数)単位のタイムアウト。 kinesis.iteration.timeout 15 この繰り返しを実行する分 (整数)単位の最大期間。ク ラスターにより最後にチェッ クポイントが作成されます。 kinesis.iteration.batchsize 1,000 1 回の GetRecords API 呼び 出しで Amazon Kinesis スト リームから取得するレコード の数。10,000 を超えることは できません(Amazon Kinesis API によって強制される制 限)。 kinesis.endpoint.region us-east-1 Amazon Kinesis エンドポイン トリージョン。Amazon EMR クラスターリージョンに最 も近い Amazon Kinesis リー ジョンを選択することで、パ フォーマンスが向上する可能 性があります。 kinesis.retry.interval 500 Amazon Kinesis API 呼び出し 時の障害の場合のミリ秒(整 数)単位の再試行間隔。 kinesis.retry.maxattempts 5 失敗したときに再試行を止め るまでの最大再試行回数. 368 Amazon EMR 開発者ガイド チェックポイントによるクエリの実行 5. 次のクエリを実行して、Step 3 (p. 367) で作成される Hive テーブルを分析します。このクエリ では、Windows または Linux オペレーティングシステムからアクセスし、404 エラーが表示され た訪問者の数をカウントします。 SELECT OS, COUNT(*) AS COUNT FROM ( SELECT regexp_extract(agent,'.*(Windows|Linux).*',1) AS OS FROM apachelog WHERE STATUS=404 ) X WHERE OS IN ('Windows','Linux') GROUP BY OS; 6. 7. 分析クエリの出力を確認します。このクエリは次のような外観です。 Important 追加料金の発生を防ぐため、必ずクラスターは終了してください。 チェックポイントによるクエリの実行 Note 同じ DynamoDB テーブルを使用するその他のチュートリアルを完了している場合は、以下の コマンドを実行する前に、そのテーブルデータをクリアする必要があります。 次の例に示すように、Hive の動的パーティションと以前に作成したテーブル apachelog を使用し て、実行中の Amazon Kinesis ストリームでデータを処理し、結果を Amazon S3 に保存することがで きます。 CREATE TABLE apachelog_s3 (os string, error_count int) PARTITIONED BY(iteration_no int) LOCATION 'my s3 location'; set kinesis.checkpoint.enabled=true; set kinesis.checkpoint.metastore.table.name=MyEMRKinesisTable; set kinesis.checkpoint.metastore.hash.key.name=HashKey; set kinesis.checkpoint.metastore.range.key.name=RangeKey; set kinesis.checkpoint.logical.name=TestLogicalName; set kinesis.checkpoint.iteration.no=0; 369 Amazon EMR 開発者ガイド スクリプトによるクエリのスケジュール設定 --The following query will create OS-ERROR_COUNT result under dynamic partition for iteration no 0 INSERT OVERWRITE TABLE apachelog_s3 partition (iteration_no= ${hiveconf:kinesis.checkpoint.iteration.no}) SELECT OS, COUNT(*) AS COUNT FROM ( SELECT regexp_extract(agent,'.*(Windows|Linux).*',1) AS OS FROM apachelog WHERE STATUS=404 ) X WHERE OS IN ('Windows','Linux') GROUP BY OS; set kinesis.rerun.iteration.without.wait=true; set kinesis.checkpoint.iteration.no=1; --The following query will create OS-ERROR_COUNT result under dynamic partition for iteration no 1 INSERT OVERWRITE TABLE apachelog_s3 partition (iteration_no= ${hiveconf:kinesis.checkpoint.iteration.no}) SELECT OS, COUNT(*) AS COUNT FROM ( SELECT regexp_extract(agent,'.*(Windows|Linux).*',1) AS OS FROM apachelog WHERE STATUS=404 ) X WHERE OS IN ('Windows','Linux') GROUP BY OS; スクリプトによるクエリのスケジュール設定 マスターノードで Linux cron システムデーモンを使用して、Hadoop クラスターで実行するスクリプ トのスケジュールを設定できます。これは、Amazon Kinesis ストリームデータを定期的に処理すると きに特に便利です。 スケジュールどおりに実行するように cronjob をセットアップするには 1. SSH を使用して、クラスターのマスターノードに接続します。クラスターへの接続の詳細につい ては、SSH を使用してマスターノードに接続する (p. 459) 」を参照してください。 2. /home/hadoop/crontab という名前で、すべてのスケジューリング関連リソース用のディレク トリを作成します。 % mkdir crontab 3. コマンドを使用して、executor.sh、hive.config、create_table.q、および user_agents_count.q # /home/hadoop/crontabwget にダウンロードします。 wget http://emr-kinesis.s3.amazonaws.com/crontab/executor.sh http://emr-kinesis.s3.amazonaws.com/crontab/hive.config http:// emr-kinesis.s3.amazonaws.com/crontab/create_table.q http://emrkinesis.s3.amazonaws.com/crontab/user_agents_count.q 4. hive.config を編集して、SCRIPTS 変数の値をスクリプトのフルパスで置き換えます。ステッ プ 2 で作成したディレクトリが /home/hadoop/crontab の場合は、何もする必要はありませ ん。 370 Amazon EMR 開発者ガイド チュートリアル: Amazon EMR および Pig による Amazon Kinesis ストリームの分析 Note 複数のスクリプトがある場合は、スペースで区切ったパス名のリストを指定できます。 以下に例を示します。 SCRIPTS="/home/hadoop/crontab/hivescript1 /home/hadoop/crontab/ hivescript2" 5. create_table.q を編集します。スクリプトの最後で、LOCATION: LOCATION 's3://<s3_output_path>/hive'; を編集します。<s3_output_path> を Amazon S3 バケットで置き換えます。変更を保存し、エ ディタを終了します。 6. cronjobs によって生成されるログ出力を格納するために、一時ディレクトリ /tmp/cronlogs を 作成します。 mkdir /tmp/cronlogs 7. executor.sh を実行可能にします。 % chmod +x executor.sh 8. crontab -e を実行し、エディタで次の行を挿入して crontab を編集します。 */15 * * * * /home/hadoop/crontab/executor.sh /home/hadoop/crontab/ hive.config 1>>/tmp/cronlogs/hive.log 2>>/tmp/cronlogs/hive.log 変更を保存し、エディタを終了します。終了すると、crontab が更新されます。crontab -l を 実行して、crontab エントリを確認できます。 チュートリアル: Amazon EMR および Pig による Amazon Kinesis ストリームの分析 Note Amazon EMR の Amazon Kinesis 機能は、中国 (北京)を除くすべてのパブリックリージョン で利用できます。 このチュートリアルでは、Amazon EMR を使用して、Pig を使用して Amazon Kinesis ストリームか らの受信データに対するクエリと分析を実行する方法を示します。このチュートリアルの指示には、 以下の方法が含まれています。 • AWS アカウントにサインアップする • Amazon Kinesis ストリームを作成する • Amazon Kinesis Publisher サンプルアプリケーションを使用して、サンプルの Apache ウェブログ データをストリームに入力する • Pig で使用するインタラクティブ Amazon EMR クラスターを作成する • クラスターに接続し、Pig を使用して Amazon Kinesis ストリームデータの処理を行う 371 Amazon EMR 開発者ガイド サービスへのサインアップ トピック • サービスへのサインアップ (p. 372) • Amazon Kinesis ストリームを作成する (p. 372) • DynamoDB テーブルを作成する (p. 373) • Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイル、サ ンプルログファイルをダウンロードする (p. 373) • Amazon Kinesis Publisher サンプルアプリケーションを起動する (p. 374) • クラスターの起動 (p. 376) • Pig スクリプトを実行する (p. 381) • スクリプトによるクエリのスケジュール設定 (p. 384) サービスへのサインアップ AWS アカウントをお持ちでない場合は、次に説明する手順に従ってアカウントを作成してください。 AWS にサインアップするには 1. https://aws.amazon.com/ を開き、[AWS アカウントの作成] を選択します。 2. オンラインの手順に従います。 アカウントがアクティブになり、使用可能な状態になったら、AWS から Eメールで通知されま す。AWS アカウントからすべてのサービスにアクセスできますが、料金はリソースを利用した分のみ に課金されます。このチュートリアルでかかる費用は最小限で済みます。 Amazon Kinesis ストリームを作成する Streams ストリームを作成する前に、ストリームのサイズを決定する必要があります。ストリーム のサイズの決定に関する詳細については、「How Do I Size an Amazon Kinesis Stream?」(Amazon Kinesis Developer Guide)を参照してください。 Streams のエンドポイントについては、アマゾン ウェブ サービス全般のリファレンスの「リージョン とエンドポイント」を参照してください。 ストリームを作成するには 1. https://console.aws.amazon.com/kinesis/ にある Streams コンソールを開きます。 お客様がまだ Amazon Kinesis サービスにサインアップしていない場合、コンソールに移動する とサインアップするように促すメッセージが表示されます。 2. リージョンセレクターで [米国東部 (バージニア北部) リージョン] を選択します。 3. [Create Stream] を選択します。 4. [Create Stream] ページで、ストリームの名前を指定し(「AccessLogStream」など)、シャー ドの数として「2」を指定して、[Create] を選択します。 ストリームの作成中、[Stream List] ページのストリームの [Status] の値は、[CREATING] です。 ストリームを使用する準備ができると、[Status] の値は [ACTIVE] に変わります。 5. ストリームの名前を選択します。[Stream Details] ページには、ストリーム設定の概要とモニタリ ング情報が表示されます。 Amazon Kinesis ストリームをプログラムで作成する方法については、「Amazon Kinesis Developer Guide」 の 「Using the Amazon Kinesis Service API」 を参照してください。 372 Amazon EMR 開発者ガイド DynamoDB テーブルを作成する DynamoDB テーブルを作成する Amazon Kinesis の Amazon EMR connector は、DynamoDB のデータベースをバッキングデータベー スとして使用してチェックポイントを作成します。Amazon Kinesis ストリームのデータをチェックポ イントの間隔で Amazon EMR クラスターで使用する前に、DynamoDB のテーブルを作成する必要が あります。 Note 同じ DynamoDB テーブルを使用する他のチュートリアルを完了している場合、テーブルを再 作成する必要はありません。ただしテーブルのデータは、このチュートリアルのチェックポ イント作成のスクリプトで使用する前に、削除する必要があります。 Amazon Kinesis の Amazon EMR Connector で使用するために Amazon DynamoDB データ ベースを作成するには 1. Amazon EMR クラスターと同じリージョンで DynamoDB コンソールを使用 し、MyEMRKinesisTable という名前でテーブルを作成します。 2. [Primary Key Type] の [Hash and Range] を選択します。 3. [Hash Attribute Name] の [HashKey] を使用します。 4. [Range Attribute Name] の [RangeKey] を使用します。 5. [Continue] を選択します。 6. このチュートリアルでは、インデックスを追加する必要はありません。[Continue] を選択しま す。 7. [Read Capacity Units] および [Write Capacity Units] では、それぞれ 10 IOPS を使用します。 Amazon Kinesis サンプルアプリケーションの Log4J Appender、サンプル認証情報ファイル、サ ンプルログファイルをダウンロードする Amazon Kinesis Log4j Appender は、カスタムコードを必要とせずに Log4J 出力を直接ユーザー 指定の Amazon Kinesis ストリームにプッシュする Apache Log4J Appender インターフェイス を実装しています。この実装では Amazon Kinesis 向けの AWS SDK for Java API を使用してお り、log4j.properties ファイルを使用して設定できます。このサンプルの Amazon Kinesis Log4j Appender を単独で利用するには、こちらから jar ファイルをダウンロードできます。このチュートリ アルのステップを簡略化するため、以下で参照しているサンプルアプリケーションで、JAR ファイル を組み込んで appender のデフォルト設定を提供しています。Publisher のサンプルアプリケーション の全機能を試すユーザーは、log4j.properties を変更できます。設定可能なオプションは次のと おりです。 log4j.properties の設定オプション オプション Default 説明 log4j.appender.KINESIS.streamName AccessLogStream データが発行されたストリー ム名。 log4j.appender.KINESIS.encoding UTF-8 Amazon Kinesis に送信される 前にログメッセージの文字列 をバイトに変換するために使 用されるエンコーディング。 373 Amazon EMR 開発者ガイド Amazon Kinesis Publisher サン プルアプリケーションを起動する オプション Default 説明 log4j.appender.KINESIS.maxRetries 3 ログメッセージを発行するた めに Kinesis API を呼び出すと きの再試行の最大回数。 log4j.appender.KINESIS.backoffInterval 100ms 再試行が行われるまでのミリ 秒単位の期間。 log4j.appender.KINESIS.threadCount 20 設定した Kinesis ストリーム にログを発行するための並列 スレッドの数。 log4j.appender.KINESIS.bufferSize 2000 メモリに残すことができる未 処理のログメッセージの最大 数。 log4j.appender.KINESIS.shutdownTimeout 30 アプリケーション JVM が正 常に終了する前に、バッファ 内のメッセージを送信する秒 数。 Amazon Kinesis Publisher のサンプルアプリケーションは kinesis-log4j-appender-1.0.0.jar で、Java 1.7 以降が必要です。 Amazon Kinesis Log4j Appender ツールをダウンロードして設定するには 1. http://emr-kinesis.s3.amazonaws.com/publisher/kinesis-log4j-appender-1.0.0.jar から Amazon Kinesis Log4j Appender JAR をダウンロードします。 2. kinesis-log4j-appender-1.0.0.jar をダウンロードしたフォルダ に、AwsCredentials.properties というファイルを作成し、ご自分の認証情報を指定して編 集します: accessKey=<your_access_key> secretKey=<your_secret_key> <your_access_key> と <your_secret_key> をご自分の AWS アカウントの accessKey と secretKey に置き換えてください。アクセスキーの詳細については、「How Do I Get Security Credentials?」を参照してください(AWS General Reference)。 3. http://elasticmapreduce.s3.amazonaws.com/samples/pig-apache/input/access_log_1 からサンプ ルアクセスログファイル access_log_1 をダウンロードして、認証情報と JAR ファイルを保存 したディレクトリと同じディレクトリに保存します。 4. (オプション) 同じディレクトリに、http://emr-kinesis.s3.amazonaws.com/publisher/ log4j.properties から log4j.properties をダウンロードして、アプリケーションのニーズに応 じて設定を変更します。 Amazon Kinesis Publisher サンプルアプリケーショ ンを起動する 次のステップは、Amazon Kinesis 発行者ツールを起動することです。 374 Amazon EMR 開発者ガイド Amazon Kinesis Publisher サン プルアプリケーションを起動する 1 回限りの発行のため Amazon Kinesis Publisher を開始するには 1. JAR ファイル、認証情報、およびログファイルがあるディレクトリと同じパスで、以下のコマン ドをコマンドラインから実行します。 • Linux、UNIX、Mac OS X ユーザー: ${JAVA_HOME}/bin/java -cp .:kinesis-log4j-appender-1.0.0.jar com.amazonaws.services.kinesis.log4j.FilePublisher access_log_1 • Windows ユーザー: %JAVA_HOME%/bin/java -cp .;kinesis-log4j-appender-1.0.0.jar com.amazonaws.services.kinesis.log4j.FilePublisher access_log_1 2. Amazon Kinesis Publisher は残りの行がなくなるまでログファイルの各行を Amazon Kinesis に アップロードします。 [...] DEBUG [main] (FilePublisher.java:62) - 39100 records written DEBUG [main] (FilePublisher.java:62) - 39200 records written DEBUG [main] (FilePublisher.java:62) - 39300 records written INFO [main] (FilePublisher.java:66) - Finished publishing 39344 log events from access_log_1, took 229 secs to publish INFO [main] (FilePublisher.java:68) - DO NOT kill this process, publisher threads will keep on sending buffered logs to Amazon Kinesis Note Amazon Kinesis ストリームにレコードを発行した後、メッセージ "INFO [main] (FilePublisher.java:68) - DO NOT kill this process, publisher threads will keep on sending buffered logs to Kinesis" が表示されること があります。このチュートリアルの目的を達成するためには、このメッセージが表示さ れたらプロセスを終了しても差し支えありません。 Linux で継続して発行するために Amazon Kinesis Publisher を開始するには チェックポイント作成のスクリプトで使用するために Amazon Kinesis ストリームに連続して発行 するシミュレーションを行う場合は、Linux システムで以下のステップを実行して、400 秒ごとに Amazon Kinesis ストリームにサンプルログをロードするこのシェルスクリプトを実行します。 1. http://emr-kinesis.s3.amazonaws.com/publisher/publisher.sh からファイル publisher.sh をダウ ンロードします。 2. publisher.sh を実行可能にします。 % chmod +x publisher.sh 3. publisher.sh 出力のリダイレクト先のログディレクトリ /tmp/cronlogs を作成します。 % mkdir /tmp/cronlogs 4. 次の nohup コマンドで publisher.sh を実行します。 375 Amazon EMR 開発者ガイド クラスターの起動 % nohup ./publisher.sh publisher.log & 5. 1>>/tmp/cronlogs/publisher.log 2>>/tmp/cronlogs/ Important このスクリプトは永久に実行されます。チュートリアルの完了にこれ以上の料金が発生 しないように、スクリプトを終了します。 Windows で継続して発行するために Amazon Kinesis Publisher を開始するには チェックポイント作成のスクリプトで使用するために Amazon Kinesis ストリームに連続して発行す るシミュレーションを行う場合は、Windows システムで以下のステップを実行して、400 秒ごとに Amazon Kinesis ストリームにサンプルログをロードするこのバッチスクリプトを実行します。 1. http://emr-kinesis.s3.amazonaws.com/publisher/publisher.bat からファイル publisher.bat をダ ウンロードします。 2. コマンドプロンプトで publisher.bat と入力して Enter を押して、実行します。必要に応じ て、Windows エクスプローラーでファイルを開くことができます。 3. Important このスクリプトは永久に実行されます。チュートリアルの完了にこれ以上の料金が発生 しないように、スクリプトを終了します。 クラスターの起動 次のステップは、クラスターの起動です。このチュートリアルでは、Amazon EMR コンソールと Amazon EMR CLI の両方を使用して、クラスターを起動するステップについて説明します。ニー ズに最適な方法を選択します。クラスターを起動するとき、計算処理を実行するために Amazon EMR が EC2 インスタンス(仮想サーバー)をプロビジョニングします。これらの EC2 インスタ ンスは、Amazon EMR 用にカスタマイズされた Amazon マシンイメージ(AMI)でプリロードさ れ、Amazon EMR は Hadoop とその他のビッグデータアプリケーションをプリロードします。 コンソールを使用して Amazon Kinesis で使用するクラスターを起動するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Create Cluster] ページの [Cluster Configuration] セクションで、次の表に従ってフィールドを確 認します。 フィールド アクション クラスター名 クラスターの記述名を入力するか、デフォルト名 "My cluster" のまま にしておきます。 この名前はオプションです。また、一意である必要はありません。 終了保護 デフォルトのオプションを選択したまま([Yes])にします。 終了保護を有効にすると、事故やエラーが発生してもクラスターは シャットダウンしません。詳細については、『Amazon EMR 管理ガイ ド』の「クラスター終了の管理 (p. 481)。通常、アプリケーションの 作成中(クラスターを終了するようなエラーを除去するため)、また 長時間実行するクラスターやデータを保護するために、この値を [Yes] に設定します。 376 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション ログ記録 これにより、Amazon EMR が詳細なログデータを Amazon S3 にキャ プチャするかどうかが決まります。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 ログフォルダ S3 の場 所 前のフィールドでログ作成を有効にした場合は、デバッグログを保存 する Amazon S3 パスを入力または参照します。コンソールを使用し て、Amazon S3 を生成することもできます。ログフォルダーがない場 合、Amazon EMR コンソールによって作成されます。 Amazon S3 ログアーカイブを有効にすると、Amazon EMR により、 クラスターの EC2 インスタンスから Amazon S3 にログファイルがコ ピーされます。これにより、クラスターの終了時および クラスターを ホストしている EC2 が終了してもログファイルが失われるのを回避で きます。これらのログは、トラブルシューティングに役立ちます。 詳細については、『Amazon EMR 管理ガイド』の「ログファイルを表 示する (p. 426)。 4. [Software Configuration] セクションで、次の表に従ってフィールドを確認します。 フィールド アクション Hadoop ディストリ ビューショ ン [Amazon] を選択します。 AMI のバー ジョン リリースラベル これにより、クラスターで実行する Hadoop のディ ストリビューションが決定されます。Hadoop の Amazon ディストリビューション、または複数の MapR ディストリビューションのいずれかを実行する ように選択できます。 [emr-4.0.0] を選択しま す。 Amazon Kinesis の コネクタ は、この Amazon EMR AMI バージョ ン以降に 付属しま す。詳細に ついては、 「Amazon マシン イメージ (AMI) (p. 56)」 を参照して ください。 5. [Hardware Configuration] セクションで、次の表に従ってフィールドを確認します。 377 Amazon EMR 開発者ガイド クラスターの起動 Note AWS アカウントあたりのデフォルトの最大ノード数は 20 です。例えば、実行中のクラ スターが 2 つある場合、両方のクラスターに対して実行するノード数は合わせて 20 個 以下にする必要があります。この制限を超えるとクラスターエラーが発生します。20 個 を超えてノードが必要な場合は、Amazon EC2 インスタンス制限を増やすようにリクエ ストを送信する必要があります。リクエストされた制限の増加に、ニーズにおける一時 的な未計画の増加に対応するための十分な容量があることを確認します。詳細について は、「Amazon EC2 インスタンス上限緩和申請」を参照してください。 フィールド アクション ネットワーク [Launch into EC2-Classic] を選択します。 リストから VPC サブネット識別子を選択して、Amazon VPC でクラスター を起動します(オプション)。詳細については、「クラスターの Amazon VPC サブネットを選択する (p. 209) EC2 アベイラビ リティーゾーン [No preference] を選択します。 特定の Amazon EC2 アベイラビリティーゾーンでクラスターを起動できま す(オプション)。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』 の「リージョンとアベイラビリティゾーン」を参照してください。 マスター [m1.large] を選択します。 マスターノードは、Hadoop タスクをコアとタスクノードに割り当て、ス テータスをモニタリングします。各クラスターには必ず 1 つのマスター ノードがあります。 これにより、マスターノードとして使用する EC2 インスタンス タイプが指定されます。有効なタイプは、m1.large(デフォル ト)、m1.、c1.medium、c1.xlarge、m2.xlarge、m2.2xlarge、および m2.4xlarge、xlarge、cg1.4xlarge です。 このチュートリアルでは、すべてのノードで m1.large インスタンスを使用 します。 詳細については、「インスタンスグループ (p. 35) Request Spot Instances ボックスはオフのままにしておきます。 これにより、マスターノードをスポットインスタンス上で実行するかどう かが指定されます。詳細については、「(オプション)スポットインスタ ンスでコストを削減する (p. 43) 378 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション コア [m1.large] を選択します。 コアノードは、Hadoop の Map および Reduce タスクを実行し、Hadoop Distributed File System(HDFS)ファイルシステムを使用してデータを格納 する EC2 インスタンスです。コアノードは、マスターノードによって管理 されます。 これにより、コアノードとして使用する EC2 インスタンスタ イプが指定されます。有効なタイプは、m1.large(デフォル ト)、m1.、c1.medium、c1.xlarge、m2.xlarge、m2.2xlarge、および m2.4xlarge、xlarge、cg1.4xlarge です。 このチュートリアルでは、すべてのノードで m1.large インスタンスを使用 します。 詳細については、「インスタンスグループ (p. 35) カウント 2 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 タスク [m1.large] を選択します。 これにより、コアノードをスポットインスタンス上で実行するかどうかが 指定されます。詳細については、「(オプション)スポットインスタンス でコストを削減する (p. 43) タスクノードは Hadoop タスクを処理するのみで、データを保存しま せん。クラスターから追加および削除ができるので、容量を増やすこと でピークロードに対応し、後から減らすなど、クラスターで使用される EC2 インスタンス容量を管理するために使用できます。タスクノード は、TaskTracker Hadoop デーモンのみを実行します。 これにより、タスクノードとして使用する EC2 インスタンス タイプが指定されます。有効なタイプは、m1.large(デフォル ト)、m1.、c1.medium、c1.xlarge、m2.xlarge、m2.2xlarge、および m2.4xlarge、xlarge、cg1.4xlarge です。 詳細については、「インスタンスグループ (p. 35) カウント 0 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、タスクノードをスポットインスタンス上で実行するかどうか が指定されます。詳細については、「(オプション)スポットインスタン スでコストを削減する (p. 43) Note コストを節約するために、このチュートリアルでは m1.large インスタンスタイプの使用 をお勧めします。本稼働ワークロードの場合は、m1.xlarge インスタンスタイプ以上をお 勧めします。 6. [Security and Access] セクションで、次の表に従ってフィールドに入力します。 379 Amazon EMR 開発者ガイド クラスターの起動 フィールド アクション EC2 key pair リストから Amazon EC2 キーペアのプライベートキーを選択します。 オプションで、[Proceed without an EC2 key pair] を選択することもできま す。このフィールドに値を入力しない場合、SSH を使用してマスターノー ドに接続できません。SSH を使用してマスターノードに接続する方法につ いては、『Amazon EMR 管理ガイド』の「SSH を使用してマスターノード に接続する (p. 459)。 IAM ユーザーア クセス [All other IAM users] を選択すると、クラスターが AWS アカウントのすべ ての IAM ユーザーから表示およびアクセス可能になります。詳細について は、『Amazon EMR 管理ガイド』の「IAM ロールを使用したユーザーアク セス権限の設定 (p. 179) または、現在の IAM ユーザーへのアクセスを制限するには、[No other IAM users] を選択します。 ロールの構成 [Default] を選択して、デフォルトの Amazon EMR ロールと Amazon EC2 インスタンスプロファイルを生成します。既存のデフォルトのロールがあ る場合は、クラスターに使用されます。ない場合は作成されます(適切な アクセス権限があると仮定した場合)。[View policies for default roles] を選 択して、デフォルトのロールプロパティを表示することもできます。また は、カスタムロールがある場合は、[Custom] を選択してロールを選択でき ます。Amazon EMR ロールおよび Amazon EC2 インスタンスプロファイル は、コンソールを使用してクラスターを作成するときに必要になります。 ロールにより、Amazon EMR はユーザーに代わって他の AWS サービスに アクセスできるようになります。Amazon EC2 インスタンスプロファイル により、クラスター内の Amazon EC2 インスタンスへのアプリケーション アクセスが制御されます。 詳細については、『Amazon EMR 管理ガイド』の「IAM およびアプリケー ションの Amazon EMR ロールを設定する (p. 186) 7. [Bootstrap Actions] および [Steps] セクションでは、いずれの設定も変更する必要はありません。 8. 設定を確認し、設定に問題がなければ、[Create Cluster] を選択します。 9. クラスターを起動すると、コンソールに [Cluster Details] ページが表示されます。 AWS CLI を使用してクラスターを作成するには • クラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換え ます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "EmrKinesisTutorial" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "EmrKinesisTutorial" --ami-version 3.3 --applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 380 Amazon EMR 開発者ガイド Pig スクリプトを実行する --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 Pig スクリプトを実行する Grunt シェルの Amazon Kinesis ストリーム上で Pig スクリプトを実行するには 1. SSH を使用してクラスターのマスターノードに接続し、以下のステップで示されているコマンド を実行します。クライアントオペレーティングシステムによりクラスターに接続するためにどの ステップを使用するかが決定されます。詳細については、Amazon EMR 管理ガイドSSH を使用 してマスターノードに接続する (p. 459)の「」を参照してください。 2. SSH ウィンドウのホームディレクトリから、次のコマンドを実行して Grunt シェルを起動しま す。 ~/bin/pig 3. 以下のスクリプトを実行して Amazon Kinesis ストリーム AccessLogStream のデータを処理 し、オペレーティング システムによってエージェントの数を出力します。 REGISTER file:/home/hadoop/pig/lib/piggybank.jar; DEFINE EXTRACT org.apache.pig.piggybank.evaluation.string.EXTRACT(); DEFINE REGEX_EXTRACT org.apache.pig.piggybank.evaluation.string.RegexExtract(); raw_logs = load 'AccessLogStream' using com.amazon.emr.kinesis.pig.KinesisStreamLoader('kinesis.iteration.timeout=1') as (line:chararray); logs_base = -- for each weblog string convert the weblong string into a -- structure with named fields FOREACH raw_logs GENERATE FLATTEN ( EXTRACT( line, '^(\\S+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] "(.+?)" (\ \S+) (\\S+) "([^"]*)" "([^"]*)"' ) ) AS ( host: chararray, identity: chararray, user: chararray, time: chararray, request: chararray, status: int, size: chararray, referrer: chararray, agent: chararray ) ; 381 Amazon EMR 開発者ガイド Pig スクリプトを実行する by_agent_count_raw = -- group by the referrer URL and count the number of requests FOREACH (GROUP logs_base BY REGEX_EXTRACT(agent,'.*(Windows|Linux).*',1)) GENERATE FLATTEN($0), COUNT($1) AS agent_count ; by_agent_count = FILTER by_agent_count_raw by $0 IS NOT null OR ($0!=''); dump by_agent_count; エージェントのオペレーティング システムと、関連付けられたカウントの一覧が出力されます。 結果には次のような値が含まれています。 (Linux,707) (Windows,8328) 4. 次の表には、テーブル定義、およびグローバル変数で設定できるその他の設定プロパティについ ての情報が記載されています。 構成設定 デフォルト値 説明 kinesis.stream.name データのソースとしての Amazon Kinesis ストリーム 名。 kinesis.accessKey クラスターに設定された AWS アクセスキー。 Amazon S3 認証情報または Amazon S3 認証情報がない場 合は、IAM ベースのロール認 証情報. kinesis.secretKey クラスターに設定された AWS 秘密キー。 Amazon S3 認証情報または Amazon S3 認証情報がない場 合は、IAM ベースのロール認 証情報。 kinesis.nodata.timeout 5 この期間連続してデータが受 信されない場合にこの繰り 返しを終了するための分(整 数)単位のタイムアウト。 kinesis.iteration.timeout 15 この繰り返しを実行する分 (整数)単位の最大期間。ク ラスターにより最後にチェッ クポイントが作成されます。 kinesis.iteration.batchsize 1,000 1 回の GetRecords API 呼び 出しで Amazon Kinesis スト リームから取得するレコード の数。10,000 を超えることは できません(Amazon Kinesis API によって強制される制 限)。 382 Amazon EMR 開発者ガイド Pig スクリプトを実行する 構成設定 デフォルト値 説明 kinesis.endpoint.region us-east-1 Kinesis エンドポイントリー ジョン。Amazon EMR クラ スターリージョンに最も近い Amazon Kinesis リージョンを 選択することで、パフォーマ ンスが向上する可能性があり ます。 kinesis.retry.interval 500 Amazon Kinesis API 呼び出し 時の障害の場合のミリ秒(整 数)単位の再試行間隔。 kinesis.retry.maxattempts 5 失敗したときに再試行を止め るまでの最大再試行回数. set コマンド(set kinesis.nodata.timeout 5; など)を使用して、スクリプトでこれらの 値を設定できます。 チェックポイントによってクエリを実行するには 1. Note 同じ DynamoDB メタストアを使用するその他のチュートリアルを完了している場合は、 以下のコマンドを実行する前に、そのテーブルデータをクリアする必要があります。 実行中の Amazon Kinesis ストリームでデータを処理し、結果を Amazon S3 に保存することがで きます。Grunt シェルに示すように、スクリプトを実行します。 REGISTER file:/home/hadoop/pig/lib/piggybank.jar; DEFINE EXTRACT org.apache.pig.piggybank.evaluation.string.EXTRACT(); DEFINE REGEX_EXTRACT org.apache.pig.piggybank.evaluation.string.RegexExtract(); raw_logs = LOAD 'AccessLogStream' USING com.amazon.emr.kinesis.pig.KinesisStreamLoader() AS (line:chararray); logs_base = -- for each weblog string convert the weblong string into a -- structure with named fields FOREACH raw_logs GENERATE FLATTEN ( EXTRACT( line, '^(\\S+) (\\S+) (\\S+) \\[([\\w:/]+\\s[+\\-]\\d{4})\\] "(.+?)" (\ \S+) (\\S+) "([^"]*)" "([^"]*)"' ) ) AS ( host: chararray, IDENTITY: chararray, USER: chararray, TIME: chararray, request: chararray, STATUS: INT, SIZE: chararray, referrer: chararray, agent: chararray 383 Amazon EMR 開発者ガイド スクリプトによるクエリのスケジュール設定 ) ; by_agent_count_raw = -- group by the referrer URL and count the number of requests FOREACH (GROUP logs_base BY REGEX_EXTRACT(agent,'.*(Windows|Linux).*',1)) GENERATE FLATTEN($0), COUNT($1) AS agent_count ; by_agent_count = FILTER by_agent_count_raw BY $0 IS NOT null OR ($0 != ''); -- Set checkpointing related parameters set kinesis.checkpoint.enabled true; set kinesis.checkpoint.metastore.table.name MyEMRKinesisTable; set kinesis.checkpoint.metastore.hash.key.name HashKey; set kinesis.checkpoint.metastore.range.key.name RangeKey; set kinesis.checkpoint.logical.name TestLogicalName; set kinesis.checkpoint.iteration.no 0; STORE by_agent_count into 's3://my_s3_path/iteration_0'; 2. 最初のイテレーションが完了するまで待ち、次のコマンドを入力します。 set kinesis.rerun.iteration.without.wait true; set kinesis.checkpoint.iteration.no 1; STORE by_agent_count into 's3://my_s3_path/iteration_1'; 3. Amazon S3 のファイルを確認します。iteration0 内のファイルには、次のような値が含まれて います。 Linux 137 Windows 2194 iteration1 内のファイルには、次のような値が含まれています。 Linux 73 Windows 506 Important 追加料金の発生を防ぐため、必ずクラスターは終了してください。 スクリプトによるクエリのスケジュール設定 マスターノードで Linux cron システムデーモンを使用して、Hadoop クラスターで実行するスクリプ トのスケジュールを設定できます。これは、Amazon Kinesis ストリームデータを定期的に処理すると きに特に便利です。 スケジュールどおりに実行するように cronjob をセットアップするには 1. SSH を使用して、クラスターのマスターノードに接続します。クラスターへの接続の詳細につい ては、SSH を使用してマスターノードに接続する (p. 459) 」を参照してください。 384 Amazon EMR 開発者ガイド スクリプトによるクエリのスケジュール設定 2. /home/hadoop/crontab という名前で、すべてのスケジューリング関連リソース用のディレク トリを作成します。 % mkdir crontab 3. executor.sh、pig.config、user_agent_counts.pig を http://emr-kinesis.s3.amazonaws.com からダ ウンロードします。wget コマンドを使用して、/home/hadoop/crontab に次の内容を配置しま す。 wget http://emr-kinesis.s3.amazonaws.com/crontab/executor.sh http://emr-kinesis.s3.amazonaws.com/crontab/pig.config http://emrkinesis.s3.amazonaws.com/crontab/user_agents_count.pig 4. pig.config を編集して、SCRIPTS 変数の値をスクリプトのフルパスで置き換えます。ステップ 2 で作成したディレクトリが /home/hadoop/crontab の場合は、何もする必要はありません。 Note 複数のスクリプトがある場合は、スペースで区切ったパス名のリストを指定できます。 以下に例を示します。 SCRIPTS="/home/hadoop/crontab/pigscript1 /home/hadoop/crontab/ pigscript2" 5. user_agents_count.pig を編集します。スクリプトの最後に、STORE 演算子があります( STORE by_agent_count into 's3://<s3_output_path>/pig/iteration_ $iterationNumber'; )。<s3_output_path> を Amazon S3 バケットで置き換えます。変更を保存し、エディタを終 了します。 6. cronjobs によって生成されるログ出力を格納するために、一時ディレクトリ /tmp/cronlogs を 作成します。 mkdir /tmp/cronlogs 7. executor.sh を実行可能にします。 % chmod +x executor.sh 8. crontab -e を実行し、エディタで次の行を挿入して crontab を編集します。 */15 * * * * /home/hadoop/crontab/executor.sh /home/hadoop/crontab/ pig.config 1>>/tmp/cronlogs/pig.log 2>>/tmp/cronlogs/pig.log 変更を保存し、エディタを終了します。終了すると、crontab が更新されます。crontab -l を 実行して、crontab エントリを確認できます。 385 Amazon EMR 開発者ガイド S3DistCp Amazon EMR でデータを抽出、変 換、およびロード(ETL)する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR には、データを移動したり、1 つの形式から別の形式にデータを変換したりするために 使用できるツールが用意されています。S3DistCP は、Amazon S3 との連携に最適化された Apache DistCp のカスタム実装です。S3DistCp を使用すると、大量のデータを Amazon S3 からクラスターの HDFS データストアに効率的にコピーできます。Amazon EMR(バージョン 0.7.1.1 以降)で提供さ れる Hive の実装には、DynamoDB からデータをインポートしたり、Amazon S3 から DynamoDB に データを移動したりするために使用できるライブラリが含まれています。 トピック • S3DistCp (p. 386) • Amazon EMR による DynamoDB 内テーブルのエクスポート、インポート、クエリ、結 合 (p. 395) • Amazon EMR を使用して Avro データを Amazon S3 に保存する (p. 418) S3DistCp このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • DistCp のオプション (p. 387) • クラスターに S3DistCp をステップとして追加する (p. 392) • Amazon EMR でサポートされる S3DistCp バージョン (p. 395) 386 Amazon EMR 開発者ガイド DistCp のオプション Note Amazon EMR 4.x 以降のバージョンにおける S3DistCp のコマンド名は、s3-dist-cp で す。 Apache DistCp は、大量のデータをコピーするときに使用できるオープンソースツールです。DistCp は MapReduce を使用して、データを分散してコピーします。例えば、複数のサーバーにわたってコ ピーを共有したり、エラー処理、復旧を行ったり、タスクをレポートしたりします。Apache DistCp オープンソースプロジェクトの詳細については、http://hadoop.apache.org/docs/stable/hadoop-distcp/ DistCp.html を参照してください。 S3DistCp は DistCp を拡張したもので、AWS、特に Amazon S3 で作業するための最適化機能を 備えています。クラスターでステップとして、またはコマンドラインで S3DistCp を追加して使用 します。S3DistCp を使用すると、Amazon S3 の大量のデータを HDFS に効率的にコピーできま す。ここにコピーされたデータは、Amazon EMR クラスターの以降のステップが処理できます。ま た、S3DistCp を使用して、Amazon S3 バケット間で、または HDFS から Amazon S3 にデータをコ ピーすることもできます。S3DistCp は、複数のバケットおよび複数の AWS アカウントでたくさんの オブジェクトを並行コピーすると、よりスケーラブルで効率的です。 コピー操作中、S3DistCp は、クラスター上で HDFS での出力の一時コピーを段階的に処理します。 データを段階的に処理するには、HDFS に十分な空き容量が必要であり、十分な空き容量がない場 合はコピー操作が失敗します。また、S3DistCp が失敗した場合、一時 HDFS ディレクトリをクリー ニングしないため、手動で一時ファイルを消去する必要があります。例えば、500 GB のデータを HDFS から S3 にコピーする場合、S3DistCp では 500 GB 全体を HDFS にある一時ディレクトリにコ ピーした後で、一時ディレクトリからデータを Amazon S3 にアップロードします。コピーが完了す ると、S3DistCp は一時ディレクトリからファイルを削除します。コピーの前に HDFS に 250 GB し か空き容量が残っていない場合、コピー操作は失敗します。 指定したファイルの一部またはすべてを S3DistCp がコピーできない場合、クラスターステップは失 敗し、ゼロ以外のエラーコードを返します。この場合、S3DistCp では、コピーされたファイルの一部 がクリーンアップされません。 Important S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされません。 DistCp のオプション S3DistCp を呼び出すときに、S3DistCp によるデータのコピーおよび圧縮方法の変更オプションを指 定できます。次の表にこれらのオプションの説明を示します。オプションは、引数リストを使用して ステップに追加されます。S3DistCp の引数の例を次の表に示します。 オプション 説明 必須 --src=LOCATION コピーするデータのロケーション。HDFS または Amazon S3 ロケーションのいずれかを指定できま す。 はい 例: --src=s3://myawsbucket/logs/ j-3GYXXXXXX9IOJ/node Important S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされませ ん。 387 Amazon EMR 開発者ガイド DistCp のオプション オプション 説明 必須 --dest=LOCATION データのコピー先。HDFS または Amazon S3 ロケー はい ションのいずれかを指定できます。 例: --dest=hdfs:///output Important S3DistCp では、アンダースコア文字を含む Amazon S3 バケット名はサポートされませ ん。 --srcPattern=PATTERN --src のデータのサブセットに対してコピーオペ レーションをフィルタリングする正規表現。 -srcPattern と --groupBy がどちらも指定されて いない場合は、--src のすべてのデータが --dest にコピーされます。 いいえ 正規表現の引数にアスタリスク(*)などの特殊文 字が含まれる場合は、正規表現または --args 文字 列全体のいずれかを引用符(')で囲む必要がありま す。 例: --srcPattern=.*daemons.*-hadoop-.* --groupBy=PATTERN 複数のファイルを統合する正規表現。この表現に 一致するファイルが S3DistCp によって統合されま す。例えば、このオプションを使用すると、1 時間 で書き込まれたすべてのログファイルを 1 つのファ イルに統合できます。統合されたファイル名は、グ ループ化のためのこの正規表現と一致する値になり ます。 括弧は、ファイルをグループ化する方法を示してい ます。括弧で囲まれたステートメントと一致するす べての項目が 1 つの出力ファイルに統合されます。 正規表現に括弧で囲まれたステートメントが含まれ ない場合、クラスターは S3DistCp ステップで失敗 し、エラーを返します。 正規表現の引数にアスタリスク(*)などの特殊文 字が含まれる場合は、正規表現または --args 文字 列全体のいずれかを引用符(')で囲む必要がありま す。 --groupBy が指定されている場合は、指定された パターンと一致するファイルのみがコピーされま す。--groupBy と --srcPattern は同時に指定す る必要はありません。 例: --groupBy=.*subnetid.*([0-9]+-[0-9]+[0-9]+-[0-9]+).* 388 いいえ Amazon EMR 開発者ガイド DistCp のオプション オプション 説明 必須 --targetSize=SIZE --groupBy オプションに基づいて作成するファイル のサイズ(メビバイト(Mib)単位)。整数の値であ る必要があります。--targetSize が設定されてい る場合、S3DistCp はファイルのサイズをこの値に合 わせようとしますが、コピーされたファイルの実際 のサイズは、この値より大きかったり小さかったり する場合があります。ジョブはデータファイルのサ イズに基づいて集計されるため、ターゲットファイ ルサイズがソースデータファイルのサイズに一致す る場合があります。 いいえ --groupBy によって統合されたファイルが -targetSize の値よりも大きい場合、そのファ イルはパートファイルに分割され、それぞれ のファイル名の末尾に数値が順番に付けられま す。例えば、myfile.gz に統合されたファイル は、myfile0.gz、myfile1.gz などにパートに分 割されます。 例: --targetSize=2 --appendToLastFile Amazon S3 から HDFS へ既存するファイルをコ ピーする際の S3DistCp の動作を指定します。既存 のファイルに新しいファイルのデータが追加されま す。--groupBy を指定して --appendToLastFile を使用すると、新しいデータは同じグループの ファイルに追加されます。このオプションは、-targetSize を --groupBy. を指定して使用した動 作にも順守しています。 いいえ --outputCodec=CODEC コピーされたファイルで使用する圧縮 コーデックを指定します。値としては gzip、gz、lzo、snappy、または none をとるこ とができます。このオプションを使用すると、例え ば、Gzip で圧縮された入力ファイルを LZO 圧縮の 出力ファイルに変換したり、コピーオペレーション の一環としてファイルを解凍したりできます。出力 コーデックを選択した場合、ファイル名には適切な 拡張子(gz や gzip など。拡張子は .gz)が付加さ れます。--outputCodec の値を指定しない場合、 圧縮に変更が加えられずにファイルがコピーされま す。 いいえ 例: --outputCodec=lzo --s3ServerSideEncryption ターゲットデータが SSL を使って転送され、AWS いいえ サービス側キーを使用して Amazon S3 で自動的に 暗号化されるようにします。S3DistCp を使用して データを取得するとき、オブジェクトは自動的に暗 号化解除されます。暗号化されていないオブジェク トを、暗号化が必要な Amazon S3 バケットにコピー しようとすると、操作は失敗します。詳細につい ては、「Using Data Encryption」を参照してくださ い。 例: --s3ServerSideEncryption 389 Amazon EMR 開発者ガイド DistCp のオプション オプション 説明 必須 --deleteOnSuccess コピーオペレーションが成功すると、このオプショ ンにより、S3DistCp がコピーされたファイルをコ ピー元の場所削除します。このオプションは、スケ ジュールされたタスクとして、ログファイルなどの 出力ファイルを、あるロケーションから他のロケー ションにコピーするときに役立ちます。これによ り、同じファイルを 2 回コピーせずに済むようにな ります。 いいえ 例: --deleteOnSuccess --disableMultipartUpload マルチパートアップロードの使用を無効にします。 いいえ 例: --disableMultipartUpload -マルチパートアップロードのパートのサイズ(Mib multipartUploadChunkSize=SIZE 単位)。デフォルトでは、Amazon S3 に書き込む ときにマルチパートアップロードを使用します。デ フォルトのチャンクサイズは 16 Mib です。 いいえ 例: --multipartUploadChunkSize=32 --numberFiles 出力ファイル名の先頭に通し番号を付けます。-startingIndex で別の値を指定しない限り、番号 は 0 で開始されます。 いいえ 例: --numberFiles --startingIndex=INDEX --numberFiles とともに使用され、通し番号の開 始値を指定します。 いいえ 例: --startingIndex=1 --outputManifest=FILENAME Gzip で圧縮されたテキストファイルを作成します。 このテキストファイルには、S3DistCp によってコ ピーされたすべてのファイルのリストが含まれま す。 いいえ 例: --outputManifest=manifest-1.gz --previousManifest=PATH --outputManifest フラグを使用して S3DistCp へ の以前の呼び出し中に作成されたマニフェストファ イルを読み込みます。この --previousManifest フラグが設定されている場合、このマニフェス トにリストされているファイルは S3DistCp の コピーオペレーションから除外されます。-previousManifest と共に --outputManifest が 指定されている場合、新しいマニフェストファイル には、以前のマニフェストにリストされているファ イルも表示されます。ただし、そのファイルはコ ピーされません。 例: --previousManifest=/usr/bin/ manifest-1.gz 390 いいえ Amazon EMR 開発者ガイド DistCp のオプション オプション 説明 必須 --requirePreviousManifest 以前の S3DistCp の呼び出し中に作成したマニフェ いいえ ストファイルが必要です。これが false に設定されて いる場合、以前のマニフェストが指定されていない ときにエラーが生成されません。デフォルトは true です。 --copyFromManifest --previousManifest の逆を行い、S3DistCp にお いて、指定したマニフェストファイルを、コピーか ら除外するファイルのリストではなく、コピーする ファイルのリストとして使用します。 いいえ 例: --copyFromManifest -previousManifest=/usr/bin/manifest-1.gz --s3Endpoint=ENDPOINT ファイルをアップロードするときに使用する Amazon S3 エンドポイントを指定します。こ のオプションは、アップロード元とアップロー ド先の両方のエンドポイントを設定します。設 定しない場合は、デフォルトのエンドポイント s3.amazonaws.com が使用されます。Amazon S3 エンドポイントのリストについては、「Regions and Endpoints」を参照してください。 いいえ 例: --s3Endpoint=s3-euwest-1.amazonaws.com --storageClass=CLASS 送信先が Amazon S3 のときに使用するスト レージクラス。有効な値は、STANDARD と REDUCED_REDUNDANCY です。このオプション を指定しない場合、S3DistCp はストレージクラスを 維持しようとします。 いいえ 例: --storageClass=STANDARD --srcPrefixesFile=PATH src プレフィックスのリスト(1 行ごとにプ レフィックスが 1 つずつ)を含む Amazon S3(s3://)、HDFS(hdfs:///)、またはローカル ファイルシステム(file:/)内のテキストファイル。 いいえ srcPrefixesFile が提供されている場 合、S3DistCp は src パスをリストしません。代 わりに、このファイルで指定されたすべてのプレ フィックスをリストした結果を組み合わせたソー スリストを生成します。これらのプレフィックス の代わりに、src パスに対する相対パスを使用して 宛先パスが生成されます。srcPattern も指定さ れた場合、入力をさらにフィルタリングするため、 ソースプレフィックスを組み合わせたリスト結果 に適用されます。copyFromManifest が使用され た場合、マニフェストのオブジェクトがコピーさ れ、srcPrefixesFile が無視されます。 例: --srcPrefixesFile=PATH 上記のオプション以外にも、S3DistCp はツールインターフェイスを実装しているので、一般的なオプ ションもサポートしています。 391 Amazon EMR 開発者ガイド クラスターに S3DistCp をステップとして追加する クラスターに S3DistCp をステップとして追加する S3DistCp を呼び出すには、これをステップとしてクラスターに追加します。ステップは、起動時にク ラスターに追加することも、コンソール、CLI、または API を使用して実行中のクラスターに追加す ることもできます。以下の例では、実行中のクラスターへの S3DistCp ステップの追加を示します。 クラスターへのステップの追加の詳細については、「クラスターへの作業の送信 (p. 504) 」を参照 してください。 AWS CLI を使用して実行中のクラスターに S3DistCp ステップを追加するには AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 • S3DistCp を呼び出すステップをクラスターに追加するには、S3DistCp によるコピーオペレー ションの実行方法を指定するパラメーターを引数として渡します。 次の例では、デーモンログを Amazon S3 から hdfs:///output にコピーします。次のコマンド について説明します。 • --cluster-id でクラスターを指定します。 • Jar は、S3DistCp JAR ファイルのロケーションです。 • Args は、S3DistCp に渡すオプション名/値ペアのカンマ区切りのリストです。使用可能なオプ ションの完全なリストについては、「DistCp のオプション (p. 387)」を参照してください。 実行中のクラスターに S3DistCp コピーステップを追加するには、次のコマンドを入力 し、j-3GYXXXXXX9IOK をクラスター ID に置き換えて、mybucket を Amazon S3 バケット名に 置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emrs3distcp-1.0.jar,\ Args=["--s3Endpoint,s3-eu-west-1.amazonaws.com","--src,s3://mybucket/ logs/j-3GYXXXXXX9IOJ/node/","--dest,hdfs:///output","--srcPattern,.*[azA-Z,]+"] • Windows ユーザー: aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emrs3distcp-1.0.jar,Args=["--s3Endpoint,s3-eu-west-1.amazonaws.com","-src,s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","--dest,hdfs:/// output","--srcPattern,.*[a-zA-Z,]+"] [ { "Name":"S3DistCp step", "Args":["s3-dist-cp","--s3Endpoint=s3.amazonaws.com","--src=s3:// mybucket/logs/j-3GYXXXXXX9IOJ/node/","--dest=hdfs:///output","-srcPattern=.*[a-zA-Z,]+"], "ActionOnFailure":"CONTINUE", "Type":"CUSTOM_JAR", "Jar":"command-runner.jar" } 392 Amazon EMR 開発者ガイド クラスターに S3DistCp をステップとして追加する ] Example Amazon S3 からのログファイルを HDFS へコピーする この例では、実行中のクラスターにステップを追加して、Amazon S3 バケットに格納されたログファ イルを HDFS にコピーする方法も示します。この例では、--srcPattern オプションを使用して、 デーモンログにコピーされたデータを制限しています。 --srcPattern オプションを使用してログファイルを Amazon S3 から HDFS にコピーするには、次 のコマンドを入力し、j-3GYXXXXXX9IOK をクラスター ID に置き換えて、mybucket を Amazon S3 バケット名に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emrs3distcp-1.0.jar,\ Args=["--src,s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","--dest,hdfs:/// output","--srcPattern,.*daemons.*-hadoop-.*"] • Windows ユーザー: aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emrs3distcp-1.0.jar,Args=["--src,s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/","-dest,hdfs:///output","--srcPattern,.*daemons.*-hadoop-.*"] 393 Amazon EMR 開発者ガイド クラスターに S3DistCp をステップとして追加する Example Amazon CloudFront ログを HDFS に読み込む この例では、実行中のクラスターにステップを追加して、Amazon CloudFront ログを HDFS に読み込 みます。このプロセスでは、圧縮フォーマットを Gzip(CloudFront のデフォルト)から LZO に変更 します。LZO を使用して圧縮されたデータは解凍時に複数のマップに分割できるので便利です。Gzip のように、圧縮が完了するのを待つ必要はありません。これにより、Amazon EMR を使用してデータ を分析するときのパフォーマンスが改善します。また、この例では、--groupBy オプションで指定 されている正規表現を使用して、指定された時間のすべてのログを 1 つのファイルにまとめることに よっても、パフォーマンスが向上しています。Amazon EMR クラスターは、小さな Gzip 圧縮ファイ ルを多数処理するよりも、大きな数個の LZO 圧縮ファイルを処理する方が効率的に動作します。LZO ファイルを分割するには、それらのインデックスを作成して、hadoop-lzo サードパーティ製のライブ ラリを使用する必要があります。詳細については、「圧縮ファイルの処理方法 (p. 172)」を参照して ください。 Amazon CloudFront ログを HDFS に読み込むには、次のコマンドを入力し、j-3GYXXXXXX9IOK をク ラスター ID に置き換え、mybucket を Amazon S3 バケット名に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emrs3distcp-1.0.jar,\ Args=["--src,s3://mybucket/cf","--dest,hdfs:///local","-groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*","-targetSize,128","--outputCodec,lzo","--deleteOnSuccess"] • Windows ユーザー: aws emr add-steps --cluster-id j-3GYXXXXXX9IOK --steps Type=CUSTOM_JAR,Name="S3DistCp step",Jar=/home/hadoop/lib/emrs3distcp-1.0.jar,Args=["--src,s3://mybucket/cf","--dest,hdfs:/// local","--groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*","-targetSize,128","--outputCodec,lzo","--deleteOnSuccess"] 前述の例が、次の CloudFront ログファイルで実行された場合を考えてみてください。 s3://myawsbucket/cf/XABCD12345678.2012-02-23-01.HLUS3JKx.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-01.I9CNAZrg.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-02.YRRwERSA.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-02.dshVLXFE.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-02.LpLfuShd.gz S3DistCp は、ファイルを、次の 2 つのファイルにコピー、統合、および圧縮します。ファイル名は、 正規表現で一致した内容によって決まります。 hdfs:///local/2012-02-23-01.lzo hdfs:///local/2012-02-23-02.lzo 394 Amazon EMR 開発者ガイド Amazon EMR でサポートされる S3DistCp バージョン Amazon EMR でサポートされる S3DistCp バージョ ン Amazon EMR は、S3DistCp の以下のバージョンをサポートします。 バージョン 説明 リリース日 1.0.8 --appendToLastFile、-requirePreviousManifest、および --storageClass オプションを追加します。 2014 年 1 月 3 日 1.0.7 --s3ServerSideEncryption オプションの追加。 2013 年 5 月 2 日 1.0.6 --s3Endpoint オプションの追加。 2012 年 8 月 6 日 1.0.5 実行する S3DistCp バージョンを指定する機能の強化。 2012 年 6 月 27 日 1.0.4 --deleteOnSuccess オプションの強化。 2012 年 6 月 19 日 1.0.3 --numberFiles および --startingIndex オプションの 追加。 2012 年 6 月 12 日 1.0.2 グループ使用時のファイル名前付け機能の強化。 2012 年 6 月 6 日 1.0.1 S3DistCp の初回リリース。 2012 年 1 月 19 日 Note S3DistCp 1.0.7 以降のバージョンは、直接クラスターで見つかります。最新の機能を使用す るには /home/hadoop/lib の JAR を使用する必要があります。 Amazon EMR による DynamoDB 内テーブルのエ クスポート、インポート、クエリ、結合 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • Amazon EMR と DynamoDB の統合の前提条件 (p. 397) • ステップ 1: キーペアを作成する (p. 397) • クラスター の作成 (p. 398) • ステップ 3: マスターノードへの SSH (p. 402) • Hive コマンドを実行するように Hive テーブルをセットアップする (p. 404) • DynamoDB データのエクスポート、インポート、クエリを行う Hive コマンドの使用例 (p. 408) • DynamoDB での Amazon EMR オペレーションのパフォーマンスの最適化 (p. 415) 395 Amazon EMR 開発者ガイド DynamoDB 内テーブルのエクス ポート、インポート、クエリ、結合 以下のセクションでは、 DynamoDB への接続性を含むカスタマイズされた Hive バージョンを持つ Amazon EMR(Amazon EMR)を使用して、DynamoDB に格納されたデータに次のような操作を実 行する方法について学びます。 • DynamoDB データを Hadoop Distributed File System(HDFS)にロードし、そのデータを Amazon EMR クラスターへの入力として使用する。 • SQL のようなステートメント(HiveQL)を使用してライブ DynamoDB データにクエリを実行する • DynamoDB に格納されたデータを結合し、そのデータをエクスポートするか、結合されたデータに 対してクエリを実行する。 • DynamoDB に格納されたデータを Amazon S3 にエクスポートする。 • Amazon S3 に格納されたデータを DynamoDB にインポートする。 上記の各タスクを実行するには、Amazon EMR クラスターを起動し、DynamoDB のデータの場所を 指定して、DynamoDB のデータを操作するための Hive コマンドを発行します。 DynamoDB は、完全に管理された NoSQL データベースサービスで、高速かつ予測可能なパフォー マンスとシームレスな拡張性を提供します。開発者がデータベーステーブルを作成し、そのリク エストトラフィックやストレージを無制限に拡張できます。DynamoDB は、高速処理を維持しな がら、テーブルのデータとトラフィックを十分な数のサーバーに自動的に分散し、顧客が指定した リクエスト容量と、格納されているデータ量を処理します。Amazon EMR および Hive を使用する と、DynamoDB に格納されているデータなど、大量のデータを迅速かつ効率的に処理できます。詳細 については、Amazon DynamoDB 開発者ガイドを参照してください。 Apache Hive は、HiveQL と呼ばれる簡素化された SQL のようなクエリ言語を使用して、マップ リデュースクラスターにクエリを実行する際に使用できるソフトウェア層で、Hadoop アーキテク チャーの上で実行されます。Hive および HiveQL の詳細については、HiveQL 言語マニュアルを参照 してください。 Amazon EMR クラスターを起動する方法は複数あります。たとえば、Amazon EMR コンソールやコ マンドラインインターフェイス(CLI)を使用したり、AWS SDK または API を使用してクラスターを プログラムしたりできます。また、Hive クラスターをインタラクティブに実行するか、スクリプトか ら実行するかを選択することもできます。このセクションでは、インタラクティブな Hive クラスター を Amazon EMR コンソールと CLI から起動する方法について説明します。 Hive をインタラクティブに使用する方法は、クエリパフォーマンスをテストし、アプリケーションを 調整するには最適です。定期的に実行する一連の Hive コマンドを確立したら、Amazon EMR が実行 できる Hive スクリプトを作成することを検討します。スクリプトから Hive を実行する方法の詳細に ついては、「Hive の作業を送信する (p. 266)」を参照してください。 Warning DynamoDB テーブルに対する Amazon EMR 読み取りまたは書き込みオペレーションは、 確立されたプロビジョニング済みスループットに対して不利に働き、プロビジョニングさ れたスループットの例外が発生する頻度が高くなる可能性があります。リクエストが多い場 合、Amazon EMR はエクスポネンシャルバックオフによってリトライを実装し、DynamoDB テーブルに対するリクエストロードを管理します。Amazon EMR ジョブを他のトラフィック と同時に実行すると、割り当てられたプロビジョニング済みスループットレベルを超えるこ とがあります。これをモニタリングするには、Amazon CloudWatch で [ThrottleRequests] メ トリクスを確認します。リクエストロードが高すぎる場合は、クラスターを再作成して、読 み込みパーセントの設定 (p. 416) または 書き込みパーセントの設定 (p. 416) をより低い値 に設定し、Amazon EMR オペレーションを調整できます。DynamoDB スループットの設定に ついては、Amazon DynamoDB 開発者ガイドの「プロビジョニングされたスループット」を 参照してください。 396 Amazon EMR 開発者ガイド Amazon EMR の統合の前提条件 Amazon EMR と DynamoDB の統合の前提条件 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR(Amazon EMR)と Hive を使用して DynamoDB のデータを操作するには、次のものが 必要になります。 • AWS アカウント。アカウントがない場合は、https://aws.amazon.com/ にアクセスし、[Create an AWS Account] をクリックして取得できます。 • Amazon EMR で使用するのと同じアカウントにデータが含まれる DynamoDB テーブル。 • DynamoDB への接続を含むカスタマイズされたバージョンの Hive。Amazon EMR で提供される最 新バージョンの Hive は、AWS マネジメントコンソールから Amazon EMR クラスター を起動する ときにデフォルトで利用できます。Amazon EMR AMI および Hive のバージョン設定の詳細につい ては、「Amazon EMR Developer Guide」の「Specifying the Amazon EMR AMI Version」および 「Configuring Hive」を参照してください。 • DynamoDB 接続のサポート。これは、Amazon EMR AMI バージョン 2.0.2 以降に含まれていま す。 • (オプション)Amazon S3 バケット。バケットの作成方法については、Amazon Simple Storage Service 入門ガイドを参照してください。このバケットは、DynamoDB データを Amazon S3 にエ クスポートする際のエクスポート先として、または Hive スクリプトの格納場所として使用されま す。 • (オプション)Amazon EMR クラスターのマスターノードに接続し、DynamoDB データに対 して HiveQL クエリを実行するセキュアシェル(SSH)クライアントアプリケーション。SSH は、Hive のインタラクティブな実行に使用されます。また、Hive コマンドをテキストファイルに保 存し、Amazon EMR にスクリプトから Hive コマンドを実行させることもできます。この場合、デ バッグを行うのに SSH クライアントは必要ありません。ただし、SSH によってマスターノードに 接続する機能は、非インタラクティブクラスターでも有用です。 デフォルトでは、SSH クライアントはほとんどの Linux、Unix、および Mac OS X インストールで 使用できます。Windows ユーザーは、SSH サポートがある PuTTY クライアントをインストールし て使用できます。 • (オプション)Amazon EC2 キーペア。これは、インタラクティブクラスターでのみ必要となり ます。キーペアは、SSH クライアントがマスターノードへの接続に使用する認証情報を指定しま す。Amazon S3 バケット内のスクリプトから Hive コマンドを実行する場合、EC2 キーペアはオプ ションとなります。 ステップ 1: キーペアを作成する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hive をインタラクティブに実行して DynamoDB のデータを管理するには、Amazon EMR(Amazon EMR)によって起動された Amazon EC2 インスタンスに接続するためにキーペアが必要です。こ のキーペアを使用して Amazon EMR ジョブフローのマスターノードに接続し、HiveQL スクリプト (SQL に似た言語)を実行します。 キーペアを生成するには 1. 2. AWS マネジメントコンソールにサインインをしたあと、https://console.aws.amazon.com/ec2/ に ある Amazon EC2 コンソールを開きます。 コンソールの右上で、[Region] ドロップダウンメニューからリージョンを選択します。これは DynamoDB データベースが存在するのと同じリージョンです。 397 Amazon EMR 開発者ガイド クラスター の作成 3. Navigation ペインで Key Pairs をクリックします。 4. 5. アカウントに関連付けられているキーペアの一覧がコンソールに表示されます。 [Create Key Pair] をクリックします。 キーペア名を入力します。例えば、[Key Pair Name] フィールドに新しいキーペアとして mykeypair と入力し、[Create] をクリックします。 6. プライベートキーファイルをダウンロードします。ファイル名は .pem で終わります (mykeypair.pem など)。このプライベートキーファイルを安全な場所に保存します。この キーファイルは、このキーペアで起動するインスタンスにアクセスするときに必要です。 Important このキーペアが消失すると、Amazon EC2 インスタンスに接続できなくなります。 キーペアの詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「Amazon Elastic Compute Cloud のキーペア」を参照してください。 クラスター の作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hive を Amazon EMR で実行するには、Hive が有効なクラスターを作成する必要があります。これに より、Hive が DynamoDB に接続するために必要なアプリケーションとインフラストラクチャが揃い ます。以下の手順では、インタラクティブな Hive クラスターを AWS マネジメントコンソール と CLI から作成する方法について説明します。 トピック • AWS マネジメントコンソール を使用してクラスターを作成するには (p. 398) AWS マネジメントコンソール を使用してクラスターを作成す るには 1. 2. 3. AWS マネジメントコンソールにサインインした後、Amazon EMR コンソール(https:// console.aws.amazon.com/elasticmapreduce/)を開きます。 [Create Cluster ] をクリックします。 [Create Cluster] ページの [Cluster Configuration] セクションで、次の表に従ってフィールドを確 認します。 フィールド アクション クラスター名 クラスターの記述名を入力します。 この名前はオプションです。また、一意である必要はありません。 終了保護 [Yes] を選択します。 終了保護を有効にすると、事故やエラーが発生してもクラスターはシャッ トダウンしません。詳細については、「Amazon EMR Developer Guide」 の「Protect a Cluster from Termination」を参照してください。通常、アプ リケーションの作成中(クラスターを終了するようなエラーを除去するた 398 Amazon EMR 開発者ガイド クラスター の作成 フィールド アクション め)、また長時間実行するクラスターやデータを含むクラスターを保護す る場合にのみ、この値を [Yes] に設定します。 ログ記録 [Enabled] を選択します。 これにより、Amazon EMR が詳細なログデータを Amazon S3 にキャプ チャするかどうかが決まります。 詳細については、「Amazon EMR Developer Guide」の「View Log Files」 を参照してください。 ログフォルダ S3 の場所 前のフィールドでログ作成を有効にした場合は、デバッグログを保存する Amazon S3 パスを入力します。 この値が設定されると、Amazon EMR はクラスターの EC2 インスタンス からのログファイルを Amazon S3 にコピーします。これにより、クラス ターの終了時および クラスターをホストしている EC2 が終了してもログ ファイルが失われるのを回避できます。これらのログは、トラブルシュー ティングに役立ちます。 詳細については、「Amazon EMR Developer Guide」の「View Log Files」 を参照してください。 デバッグ [Enabled] を選択します。 このオプションでは、Amazon EMR コンソールで詳細なデバッグを有効に するため、デバッグログインデックスを Amazon SimpleDB に作成します (追加料金が適用されます)。これを設定できるのは、クラスターを作成 するときのみです。詳細については、Amazon SimpleDB の製品説明ペー ジを参照してください。 4. [Software Configuration] セクションで、次の表に従ってフィールドを確認します。 フィールド アクション Hadoop ディスト [Amazon] を選択します。 リビューション これにより、クラスターで実行する Hadoop のディストリビューションが 決定されます。Hadoop の Amazon ディストリビューション、または複数 の MapR ディストリビューションのいずれかを実行するように選択でき ます。詳細については、「Amazon EMR Developer Guide」の「Using the MapR Distribution for Hadoop」を参照してください。 AMI のバージョ ン リストで最新の AMI バージョンを選択します。 インストール するアプリケー ション – Hive デフォルトの Hive のバージョンが既に選択され、リストに表示されている 必要があります。表示されない場合は、[Additional applications] リストから 選択します。 これにより、クラスターで実行する Hadoop および Hive または Pig などそ の他のアプリケーションのバージョンが決定されます。詳細については、 「Amazon EMR Developer Guide」の「Choose a Machine Image」を参照 してください。 詳細については、「Amazon EMR Developer Guide」の「Analyze Data with Hive」を参照してください。 399 Amazon EMR 開発者ガイド クラスター の作成 フィールド アクション インストール するアプリケー ション – Pig デフォルトの Pig のバージョンが既に選択され、リストに表示されている必 要があります。表示されない場合は、[Additional applications] リストから選 択します。 詳細については、「Amazon EMR Developer Guide」の「Process Data with Pig」を参照してください。 5. [Hardware Configuration] セクションで、次の表に従ってフィールドを確認します。 Note AWS アカウントあたりのデフォルトの最大ノード数は 20 です。例えば、実行中のクラ スターが 2 つある場合、両方のクラスターに対して実行するノード数は合わせて 20 個 以下にする必要があります。この制限を超えるとクラスターエラーが発生します。20 個 を超えてノードが必要な場合は、Amazon EC2 インスタンス制限を増やすようにリクエ ストを送信する必要があります。リクエストされた制限の増加に、ニーズにおける一時 的な未計画の増加に対応するための十分な容量があることを確認します。詳細について は、「Amazon EC2 インスタンス上限緩和申請」を参照してください。 フィールド アクション ネットワーク [Launch into EC2-Classic] を選択します。 リストから VPC サブネット識別子を選択して、Amazon VPC でクラス ターを起動します(オプション)。詳細については、「Amazon EMR Developer Guide」の「Select a Amazon VPC Subnet for the Cluster (Optional)」を参照してください。 EC2 アベイラビ リティーゾーン [No preference] を選択します。 または、特定の EC2 アベイラビリティーゾーンでクラスターを起動できま す。 詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』 の「リージョンとアベイラビリティゾーン」を参照してください。 マスター Amazon EC2 イ ンスタンスタイ プ このチュートリアルでは、このフィールドに示すデフォルトの EC2 インス タンスタイプを使用します。 これにより、マスターノードとして使用する EC2 インスタンスタイプが指 定されます。マスターノードは、Hadoop タスクをコアとタスクノードに割 り当て、ステータスをモニタリングします。各クラスターには必ず 1 つの マスターノードがあります。 詳細については、「Amazon EMR Developer Guide」の「Instance Groups」を参照してください。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、マスターノードをスポットインスタンス上で実行するかどう かが指定されます。詳細については、「Amazon EMR Developer Guide」の 「Lower Costs with Spot Instances (Optional)」を参照してください。 400 Amazon EMR 開発者ガイド クラスター の作成 フィールド アクション コア - Amazon EC2 インスタン スタイプ このチュートリアルでは、このフィールドに示すデフォルトの EC2 インス タンスタイプを使用します。 これにより、コアノードとして使用する EC2 インスタンスタイプが指定 されます。コアノードは、Hadoop の Map および Reduce タスクを実行 し、Hadoop Distributed File System(HDFS)ファイルシステムを使用して データを格納する EC2 インスタンスです。コアノードは、マスターノード によって管理されます。 詳細については、「Amazon EMR Developer Guide」の「Instance Groups」を参照してください。 カウント 2 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 タスク - Amazon EC2 インスタン スタイプ このチュートリアルでは、このフィールドに示すデフォルトの EC2 インス タンスタイプを使用します。 これにより、コアノードをスポットインスタンス上で実行するかどうか が指定されます。詳細については、「Amazon EMR Developer Guide」の 「Lower Costs with Spot Instances (Optional)」を参照してください。 これにより、タスクノードとして使用する EC2 インスタンスタイプが指 定されます。タスクノードは Hadoop タスクを処理するのみで、データを 保存しません。クラスターから追加および削除ができるので、容量を増や すことでピークロードに対応し、後から減らすなど、クラスターで使用さ れる EC2 インスタンス容量を管理するために使用できます。タスクノード は、TaskTracker Hadoop デーモンのみを実行します。 詳細については、「Amazon EMR Developer Guide」の「Instance Groups」を参照してください。 6. カウント 0 を選択します。 Request Spot Instances ボックスはオフのままにしておきます。 これにより、タスクノードをスポットインスタンス上で実行するかどうか が指定されます。詳細については、「Amazon EMR Developer Guide」の 「Lower Costs with Spot Instances (Optional)」を参照してください。 [Security and Access] セクションで、次の表に従ってフィールドに入力します。 フィールド アクション EC2 key pair 「ステップ 1: キーペアを作成する (p. 397)」で作成したキーペアを選択し ます。 詳細については、「Amazon EMR Developer Guide」の「Create SSH Credentials for the Master Node」を参照してください。 このフィールドに値を入力しない場合、SSH を使用してマスターノードに 接続することはできません。詳細については、「Amazon EMR Developer Guide」の「Connect to the Cluster」を参照してください。 IAM ユーザーア クセス [No other IAM users] を選択します。 オプションで、[All other IAM users] を選択して、クラスターが表示され るようにし、AWS アカウントのすべての IAM ユーザーがアクセスできる 401 Amazon EMR 開発者ガイド ステップ 3: マスターノードへの SSH フィールド アクション ようにします。詳細については、「Amazon EMR Developer Guide」の 「Configure IAM User Permissions」を参照してください。 IAM ロール [Proceed without roles] を選択します。 これにより、クラスターの EC2 インスタンスへのアプリケーションのアク セスを制御します。 詳細については、「Amazon EMR Developer Guide」の「Configure IAM Roles for Amazon EMR」を参照してください。 7. [Bootstrap Actions] セクションを確認します。ただし、変更を加える必要はありません。このサ ンプル設定に必要なブートストラップアクションはありません。 オプションで、ブートストラップアクションを使用できます。これは、Hadoop が起動する前に クラスターで追加のソフトウェアをインストールし、アプリケーションの設定を変更できるスク リプトです。詳細については、「Amazon EMR Developer Guide」の「Create Bootstrap Actions to Install Additional Software (Optional)」を参照してください。 8. 設定を確認し、設定に問題がなければ、[Create Cluster] をクリックします。 9. クラスターが開始すると、[Summary] ペインが表示されます。 ステップ 3: マスターノードへの SSH このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターのステータスが WAITING の場合、マスターノードに接続する準備が整っています。マス ターノードに対するアクティブな SSH セッションがある場合、コマンドライン操作を実行できます。 マスターノードのパブリック DNS 名を確認するには • Amazon EMR コンソールで、WAITING 状態の実行中のクラスターのリストからクラスターを選 択します。 インスタンスへの接続に使用した DNS 名は、[Master Public DNS Name] と表示されます。 Mac OS X/Linux/UNIX を使用して、マスターノードに接続するには 1. システムでコマンドプロンプトに移動します。(Mac OS X では、/Applications/ Utilities/Terminal の [Terminal プログラムを使用します)。 2. キー所有者のみがキーへのアクセス権限を持つように、Amazon EC2 キーペアの .pem ファイル に対する権限を設定しておく必要があります。例えば、ファイルに mykeypair.pem という名前 を付けてユーザーのホームディレクトリに保存した場合、コマンドは次のようになります: chmod og-rwx ~/mykeypair.pem この手順を実行しないと、SSH によりプライベートキーが保護されていないというエラーメッ セージが返されて、キーが拒否されます。このステップを実行する必要があるのは、プライベー トキーを使用して最初に接続するときだけです。 402 Amazon EMR 開発者ガイド ステップ 3: マスターノードへの SSH 3. マスターノードへの接続を確立するには、次のコマンドラインを入力します。このコマンド は、.pem ファイルがユーザーのホームディレクトリにあることを前提としています。masterpublic-dns-name はクラスターのマスターパブリック DNS 名に、~/mykeypair.pem は ファ イルの場所とファイル名に置き換えてください。.pem ssh hadoop@master-public-dns-name -i ~/mykeypair.pem 警告は、接続先ホストの正当性を検証できないことを示しています。 4. yes を入力して、操作を続けます。 Note ログインするように求められたら、hadoop を入力します。 PuTTY を Windows にインストールして設定するには 1. PuTTYgen.exe と PuTTY.exe を http://www.chiark.greenend.org.uk/~sgtatham/putty/ download.html からお客様のコンピュータにダウンロードします。 2. PuTTYgen を起動します。 3. [Load] をクリックします。 4. 先に作成した PEM ファイルを選択します。検索パラメーターを、"PuTTY プライベートキーファ イル(*.ppk)" から "すべてのファイル(*.*)”に変更する必要がある場合があります。 5. [Open] をクリックします。 6. キーのインポートが適切に行われたことを示す PuTTYgen 通知で [OK] をクリックします。 7. [Save private key] をクリックして、キーを PPK フォーマットで保存します。 8. パスフレーズなしでキーを保存するよう求めるメッセージが表示されたら、[Yes] をクリックしま す。 9. PuTTY プライベートキーの名前を入力します(mykeypair.ppk など)。 10. [Save] をクリックします。 11. PuTTYgen を閉じます。 Windows で PuTTY を使用して、マスターノードに接続するには 1. PuTTY を開始します。 2. [Category] リストの [Session] を選択します。[Host Name] フィールドに hadoop@DNS と入力し ます。入力は [email protected] のようになりま す。 3. [Category] リストで、[Connection]、[SSH] の順に展開し、[Auth] を選択します。[Options controlling the SSH authentication] ペインが表示されます。 4. [Private key file for authentication] を取得する目的で [Browse] をクリックし、生成してお いたプライベートキーファイルを選択します。本ガイドに従っていれば、ファイル名は mykeypair.ppk となっているはずです。 5. [Open] をクリックします。 [PuTTY Security Alert] がポップアップ表示されます。 6. PuTTY セキュリティ警告を表示するには、[Yes] をクリックします。 403 Amazon EMR 開発者ガイド Hive コマンドを実行するように Hive テーブルをセットアップする Note ログインするように求められたら、hadoop を入力します。 SSH または PuTTY を使用してマスターノードに接続すると、Hadoop のコマンドプロンプトが表示 され、Hive インタラクティブセッションを開始できます。 Hive コマンドを実行するように Hive テーブルを セットアップする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Apache Hive は、SQL のような言語を使用して、Amazon EMR クラスターに含まれるデータに対し てクエリを実行する際に使用できるデータウェアハウスアプリケーションです。Hive の詳細について は、http://hive.apache.org/ を参照してください。 次の手順は、既にクラスターを作成し、Amazon EC2 キーペアを指定したことを前提にしています。 クラスターの作成を始める方法については、ステップ 3: Amazon EMR クラスターの起動 (p. 16)を参 照してください。 Hive コマンドをインタラクティブに実行するには 1. マスターノードに接続します。詳細については、Amazon EMR 管理ガイド の SSH を使用してマ スターノードに接続する (p. 459)を参照してください。 2. 現在のマスターノードの コマンドプロンプトで、hive と入力します。 hive> という Hive プロンプトが表示されます。 3. Hive アプリケーションのテーブルを DynamoDB のデータにマップする Hive コマンドを入力しま す。このテーブルは、Amazon DynamoDB; に格納されているデータの参照として機能します。 データは Hive のローカルに保存されておらず、このテーブルを使用するクエリは、DynamoDB 内のライブデータに対して実行されます。また、コマンドを実行するたびに、テーブルの読み取 り容量と書き込み容量が消費されます。同じデータセットに対して複数の Hive コマンドを実行す る予定がある場合は、まずエクスポートすることをお勧めします。 次に、Hive テーブルを DynamoDB テーブルにマッピングする構文を示します。 CREATE EXTERNAL TABLE hive_tablename (hive_column1_name column1_datatype, hive_column2_name column2_datatype...) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodb_tablename", "dynamodb.column.mapping" = "hive_column1_name:dynamodb_attribute1_name,hive_column2_name:dynamodb_attribute2_name. DynamoDB から Hive にテーブルを作成する場合、EXTERNAL というキーワードを使用して外部 テーブルとして作成する必要があります。外部テーブルと内部テーブルの違いは、内部テーブル の drop が実行されると内部テーブルのデータが削除される点です。Amazon DynamoDB に接続 する場合、この動作は望ましくないため、外部テーブルのみがサポートされます。 たとえば、次の Hive コマンドでは、dynamodbtable1 という DynamoDB テーブルを参照する hivetable1 というテーブルが Hive に作成されます。DynamoDB テーブル dynamodbtable1 に 404 Amazon EMR 開発者ガイド Hive コマンドを実行するように Hive テーブルをセットアップする は、ハッシュおよび範囲プライマリキースキーマがあります。ハッシュキー要素は name(文字列 型)、範囲キー要素は year(数値型)です。各項目には、holidays(文字列セット型)の属性 値があります。 CREATE EXTERNAL TABLE hivetable1 (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); 行 1 では、HiveQL CREATE EXTERNAL TABLE ステートメントを使用しています。hivetable1 の 場合、DynamoDB テーブルの属性名と値の各ペアについて、列を設定し、データ型を指定する必 要があります。これらの値は大文字と小文字が区別されません。列には、(予約語を除き)任意 の名前を付けることができます。 行 2 では、STORED BY ステートメントを使用しています。STORED BY の値は、Hive と DynamoDB 間の接続を処理するクラス名で す。'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' のように設定する 必要があります。 行 3 では、TBLPROPERTIES ステートメントを使用して、"hivetable1" を DynamoDB 内の正しい テーブルとスキーマに関連付けています。TBLPROPERTIES に、dynamodb.table.name パラ メーターと dynamodb.column.mapping パラメーターの値を指定します。これらの値は、大文 字と小文字が区別されます。 Note テーブルのすべての DynamoDB 属性に、Hive テーブル内の対応する列が必要です。ない 場合、Hive テーブルに DynamoDB から名前と値のペアが追加されません。DynamoDB プライマリキー属性をマップしない場合、Hive からエラーが生成されます。プライマリ キー以外の属性をマップしない場合、エラーは生成されませんが、Hive テーブルのデー タは表示されません。データ型が一致しない場合、値は null です。 次に、hivetable1 で Hive 操作の実行を開始できます。hivetable1 に対して実行されるクエリ は、DynamoDB アカウントの DynamoDB テーブル dynamodbtable1 に対して内部的に実行され、実 行するたびに、読み込みユニットおよび書き込みユニットが消費されます。 DynamoDB テーブルに対して Hive クエリを実行する際には、十分な量の読み込みキャパシティーユ ニットをプロビジョニングしておく必要があります。 例えば、DynamoDB テーブルに対して 100 ユニットの読み込みキャパシティーをプロビジョニングし ているとします。この場合、1 秒間に 100 の読み込み(409,600 バイト)を実行できます。そのテー ブルに 20 GB(21,474,836,480 バイト)のデータが含まれており、Hive クエリがフルテーブルスキャ ンを実行する場合、クエリの実行にかかる時間は次のように見積もられます。 21,474,836,480 / 409,600 = 52,429 秒 = 14.56 時間 必要な時間を短縮するには、ソース DynamoDB テーブルで読み込みキャパシティーユニットを調整 する以外に方法はありません。Amazon EMR ノードを追加しても、役に立ちません。 Hive 出力では、1 つ以上のマッパープロセスが終了すると、完了のパーセンテージが更新されます。 プロビジョニングされた読み込みキャパシティーが小さく設定された大きな DynamoDB テーブルで は、完了のパーセンテージ出力が長時間更新されない場合があります。上記のような場合、ジョブ は数時間にわたって 0% 完了として表示されます。ジョブの進行状況の詳細なステータスについて は、Amazon EMR コンソールに移動してください。ここで、個別のマッパータスクのステータスおよ びデータ読み込みの統計を表示できます。また、マスターノードの Hadoop インターフェイスにログ 405 Amazon EMR 開発者ガイド Hive コマンドを実行するように Hive テーブルをセットアップする オンし、Hadoop 統計を表示することもできます。ここには、個別のマップタスクのステータスおよ びいくつかのデータ読み込み統計が表示されます。詳細については、次のトピックを参照してくださ い。 • マスターノード上にホストされるウェブインターフェイス • Hadoop のウェブインターフェイスを表示する DynamoDB へのデータのエクスポートまたはインポート、テーブルの結合などのタスクを実行する サンプル HiveQL ステートメントの詳細については、「Amazon EMR 開発者ガイド」の「Amazon DynamoDB データのエクスポート、インポート、クエリを行う Hive コマンドの使用例」を参照して ください。 Hive リクエストをキャンセルするには Hive クエリを実行すると、サーバーから返される最初の応答には、リクエストをキャンセルするコマ ンドが含まれます。プロセスの任意の時点でリクエストをキャンセルするには、サーバーの応答に含 まれる Kill Command を使用します。 1. Ctrl+C を入力して、コマンドラインクライアントを終了します。 2. シェルプロンプトで、リクエストに対するサーバーからの最初の応答に含まれていた Kill Command を入力します。 または、マスターノードのコマンドラインから次のコマンドを実行して、Hadoop ジョブをキル します。この job-id は、Hadoop ジョブの識別子であり、Hadoop ユーザーインターフェイスか ら取得できます。Hadoop ユーザーインターフェイスの詳細については、「Amazon EMR 開発者 ガイド」の「How to Use the Hadoop User Interface」を参照してください。 hadoop job -kill job-id Hive と DynamoDB のデータ型 次の表は、使用できる Hive のデータ型と、対応する DynamoDB のデータ型へのマップを示していま す。 Hive の型 DynamoDB の型 文字列 文字列(S) bigint または double 数値(N) バイナリ バイナリ(B) array 数値セット(NS)、文字列セット(SS)、またはバイナリセッ ト(BS) 精度の点で、Hive の bigint 型は Java の long 型と同じであり、Hive の double 型は Java の double 型 と同じです。つまり、エクスポートインポート、または参照する Hive を使用して、Hive のデータ型 で使用できる精度よりも高い精度の数値データが DynamoDB に格納される場合、DynamoDB データ の精度が低下したり、Hive クエリが失敗したりする可能性があります。 DynamoDB から Amazon Simple Storage Service(Amazon S3)または HDFS にバイナリ型をエクス ポートすると、Base64 のエンコード文字列として格納されます。Amazon S3 または HDFS のデータ を DynamoDB のバイナリ型にインポートする場合、Base64 文字列としてエンコードされます。 406 Amazon EMR 開発者ガイド Hive コマンドを実行するように Hive テーブルをセットアップする Hive のオプション 次の Hive オプションを設定して、Amazon DynamoDB のデータの転送を管理できます。これらの オプションは、現在の Hive セッションの間のみ、有効です。Hive コマンドプロンプトを終了した後 で、クラスターでこのプロンプトを再び開いた場合、この設定はデフォルト値に戻ります。 Hive のオプション 説明 dynamodb.throughput.read.percent DynamoDB のプロビジョニングされたスループットレー トが、表の割り当てられた範囲内に収まるように、読み 取り操作のレートを設定します。値は 0.1~1.5 以内に します。 0.5 の値がデフォルトの読み取りレートです。つま り、Hive は、表に記載されている読み取りのプロビジョ ニングされた全体のリソースの半分を消費しようと試み ます。値を 0.5 から増やすと、読み取りリクエストレー トも増えます。0.5 未満に減らすと、読み取りリクエス トレートも減ります。この読み取りレートは概算です。 実際の読み取りレートは、DynamoDB に統一ディストリ ビューションのキーがあるかどうかなどの要因によって 変わります。 Hive 操作によって、プロビジョニングされたスループッ トを頻繁に超える場合、またはライブの読み取りトラ フィックがスロットリングされる回数が多い場合、この 値を 0.5 未満に減らします。十分な容量があり、Hive 操作を高速にする場合は、この値を 0.5 より増やしま す。また、使用できる未使用の入力/出力操作があると考 えられる場合、最大 1.5 に設定してオーバーサブスクラ イブを実行することもできます。 dynamodb.throughput.write.percentDynamoDB のプロビジョニングされたスループットレー トが、表の割り当てられた範囲内に収まるように、書き 込み操作のレートを設定します。値は 0.1~1.5 以内に します。 0.5 の値がデフォルトの書き込みレートです。つま り、Hive は、表に記載されている書き込みのプロビジョ ニングされた全体のリソースの半分を消費しようと試み ます。値を 0.5 から増やすと、書き込みリクエストレー トも増えます。0.5 未満に減らすと、書き込みリクエス トレートも減ります。この書き込みレートは概算です。 実際の書き込みレートは、DynamoDB に統一ディストリ ビューションのキーがあるかどうかなどの要因によって 変わります。 Hive 操作によって、プロビジョニングされたスループッ トを頻繁に超える場合、またはライブの書き込みトラ フィックがスロットリングされる回数が多い場合、この 値を 0.5 未満に減らします。十分な容量があり、Hive 操作を高速にする場合は、この値を 0.5 より増やしま す。また、使用できる未使用の入力/出力操作があると考 えられる場合、または、テーブルに対する最初のデータ アップロードであり、ライブトラフィックがまだない場 合は、最大 1.5 に設定してオーバーサブスクライブを実 行することもできます。 407 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 Hive のオプション 説明 dynamodb.endpoint 別のリージョンにテーブルがある場合は、エンドポイン トを指定します。使用できる DynamoDB エンドポイン トの詳細については、「リージョンとエンドポイント」 を参照してください。 dynamodb.max.map.tasks DynamoDB からデータを読み取るときは、マップタスク の最大数を指定します。この値は、1 以上にする必要が あります。 dynamodb.retry.duration Hive コマンドの再試行のタイムアウト期間として使用す る分数を指定します。この値は、0 以上の整数にする必 要があります。デフォルトのタイムアウト期間は 2 分で す。 これらのオプションは、次の例に示すように、SET コマンドを使用して設定されます。 SET dynamodb.throughput.read.percent=1.0; INSERT OVERWRITE TABLE s3_export SELECT * FROM hiveTableName; AWS SDK for Java を使用している場合、次の例の最終行のように、Hive の -e オプションを使用して コマンドで直接渡します。 steps.add(new StepConfig() .withName("Run Hive Script") .withHadoopJarStep(new HadoopJarStepConfig() .withJar("s3://us-west-2.elasticmapreduce/libs/script-runner/scriptrunner.jar") .withArgs("s3://us-west-2.elasticmapreduce/libs/hive/hive-script", "--base-path","s3://us-west-2.elasticmapreduce/libs/hive/","--run-hivescript", "--args","-e","SET dynamodb.throughput.read.percent=1.0;"))); DynamoDB データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 以下の例では、Hive コマンドを使用して、データを Amazon S3 や HDFS にエクスポートする、デー タを DynamoDB にインポートする、テーブルを結合する、テーブルにクエリを行うなどの操作を行 います。 Hive テーブルに対する操作では、DynamoDB に格納されているデータを参照します。Hive コマンド は、DynamoDB テーブルに設定されたスループット設定の制約を受けます。また、取得されるデータ には、Hive 操作リクエストが DynamoDB で処理された時点で DynamoDB テーブルに書き込まれて 408 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 いるデータが含まれます。データ取得プロセスに時間がかかる場合、Hive コマンドによって返された データには、Hive コマンドの開始後に DynamoDB で更新されたものが含まれる可能性があります。 Hive コマンドの DROP TABLE と CREATE TABLE は、Hive のローカルテーブルにのみ作用 し、DynamoDB のテーブルの作成または削除は行いません。Hive クエリが DynamoDB のテーブルを 参照する場合、そのテーブルは、クエリを実行する前に存在している必要があります。DynamoDB で のテーブルの作成および削除の詳細については、Amazon DynamoDB 開発者ガイドの「DynamoDB でのテーブルの操作」を参照してください。 Note Hive テーブルを Amazon S3 内の場所にマッピングする場合、バケットのルートパス(s3:// mybucket)にはマッピングしないでください。これを行うと、Hive がデータを Amazon S3 に書き込むときにエラーが発生することがあります。代わりに、テーブルをバケットのサブ パス(s3://mybucket/mypath)にマッピングします。 DynamoDB のデータのエクスポート Hive を使用して DynamoDB のデータをエクスポートすることができます。 DynamoDB テーブルを Amazon S3 バケットにエクスポートするには • DynamoDB に格納されたデータを参照する Hive テーブルを作成します。次に、INSERT OVERWRITE コマンドを呼び出して、データを外部ディレクトリに書き込みます。次の例で は、s3://bucketname/path/subpath/ は Amazon S3 内の有効なパスです。CREATE コ マンドで列とデータ型が DynamoDB 内の値と一致するように調整します。これを使用して DynamoDB データのアーカイブを Amazon S3 に作成できます。 CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); INSERT OVERWRITE DIRECTORY 's3://bucketname/path/subpath/' SELECT * FROM hiveTableName; 書式設定を使用して DynamoDB テーブルを Amazon S3 バケットにエクスポートするには • Amazon S3 内の場所を参照する外部テーブルを作成します。これは次の例では s3_export で す。CREATE の呼び出しで、テーブルの行の書式を指定します。次に、INSERT OVERWRITE を 使用して DynamoDB のデータを s3_export にエクスポートすると、データは指定の書式で書き込 まれます。次の例では、データはカンマ区切り値(CSV)形式で書き込まれます。 CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); 409 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 CREATE EXTERNAL TABLE s3_export(a_col string, b_col bigint, c_col array<string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE s3_export SELECT * FROM hiveTableName; 列のマッピングを指定せずに DynamoDB テーブルを Amazon S3 バケットにエクスポートす るには • DynamoDB に格納されたデータを参照する Hive テーブルを作成します。これは、カラムマッピ ングを指定しないこと以外、前の例とほぼ同じです。このテーブルには map<string, string> 型の列が 1 つだけ含まれている必要があります。次に、Amazon S3 に EXTERNAL テーブルを作 成したら、INSERT OVERWRITE コマンドを呼び出して DynamoDB のデータを Amazon S3 に書 き込みます。これを使用して DynamoDB データのアーカイブを Amazon S3 に作成できます。カ ラムマッピングがないので、この方法でエクスポートされたテーブルをクエリすることはできま せん。カラムマッピングを指定しないデータのエクスポートは、Amazon EMR AMI 2.2.x 以降で サポートされる Hive 0.8.1.5 以降で利用できます。 CREATE EXTERNAL TABLE hiveTableName (item map<string,string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1"); CREATE EXTERNAL TABLE s3TableName (item map<string, string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE s3TableName SELECT * FROM hiveTableName; データ圧縮を使用して DynamoDB テーブルを Amazon S3 バケットにエクスポートするには • Hive では、Hive セッション中に設定できる圧縮コーデックが複数あります。これを行うこと で、エクスポートデータは、指定した形式で圧縮されます。次の例では、LZO(Lempel-ZivOberhumer)アルゴリズムを使用して、エクスポートされたファイルを圧縮します。 SET hive.exec.compress.output=true; SET io.seqfile.compression.type=BLOCK; SET mapred.output.compression.codec = com.hadoop.compression.lzo.LzopCodec; CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); CREATE EXTERNAL TABLE lzo_compression_table (line STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 410 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE lzo_compression_table SELECT * FROM hiveTableName; 以下の圧縮コーデックを利用できます。 • org.apache.hadoop.io.compress.GzipCodec • org.apache.hadoop.io.compress.DefaultCodec • com.hadoop.compression.lzo.LzoCodec • com.hadoop.compression.lzo.LzopCodec • org.apache.hadoop.io.compress.BZip2Codec • org.apache.hadoop.io.compress.SnappyCodec DynamoDB テーブルを HDFS にエクスポートするには • 次の Hive コマンドを使用します。hdfs:///directoryName は有効な HDFS パスであ り、hiveTableName は Hive のテーブルで、DynamoDB を参照しています。Hive 0.7.1.1 はデー タを Amazon S3 にエクスポートする際に HDFS を中間ステップとして使用するので、このエク スポート操作は、DynamoDB テーブルを Amazon S3 にエクスポートするよりも高速です。ま た、次の例は、dynamodb.throughput.read.percent を 1.0 に設定して読み取りリクエスト レートを上げる方法を示しています。 CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); SET dynamodb.throughput.read.percent=1.0; INSERT OVERWRITE DIRECTORY 'hdfs:///directoryName' SELECT * FROM hiveTableName; Amazon S3 へのエクスポートで説明したように、書式設定や圧縮を使用して HDFS にデータを エクスポートすることもできます。これを行うには、上記の例の Amazon S3 ディレクトリを HDFS ディレクトリに置き換えるだけです。 印刷不可の UTF-8 文字データを Hive で読み取るには • テーブル作成時に STORED AS SEQUENCEFILE 句を使用すると、印刷不可の UTF-8 文字データ を Hive で読み取ることができます。SequenceFile は Hadoop バイナリファイル形式です。この ファイルを読み取るには Hadoop を使用する必要があります。次の例は、DynamoDB のデータを Amazon S3 にエクスポートする方法を示しています。この機能を使用して印刷不可の UTF-8 で エンコードされた文字を処理できます。 CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", 411 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); CREATE EXTERNAL TABLE s3_export(a_col string, b_col bigint, c_col array<string>) STORED AS SEQUENCEFILE LOCATION 's3://bucketname/path/subpath/'; INSERT OVERWRITE TABLE s3_export SELECT * FROM hiveTableName; データの DynamoDB へのインポート Hive を使用してデータを DynamoDB に書き込む場合は、書き込みキャパシティーユニットの数をク ラスター内のマッパーの数より大きくする必要があります。例えば、m1.xlarge EC2 インスタンスで 実行されるクラスターは、インスタンスごとに 8 個のマッパーを作成します。10 個のインスタンスが あるクラスターの場合は、合計 80 個のマッパーがあることになります。書き込みキャパシティーユ ニットがクラスター内のマッパーの数以下である場合、Hive の書き込み操作は書き込みスループット を消費しきるか、プロビジョニングされた以上のスループットを消費しようとします。 各 EC2 イン スタンスタイプによって生成されるマッパーの数の詳細については、 Hadoop 設定のリファレンス . そこには、サポートされる設定ごとに "タスクの設定" セクションがあります。 Hadoop 内のマッパーの数は入力分割数によって決まります。分割数が少なすぎる場合、書き込みコ マンドは書き込みスループットを消費しきれない可能性があります。 同じキーを持つ項目がターゲット DynamoDB テーブルに存在する場合、項目は上書きされます。 キーを持つ項目がターゲット DynamoDB テーブルに存在しない場合、その項目は挿入されます。 Amazon S3 のテーブルを DynamoDB にインポートするには • Amazon EMR(Amazon EMR)と Hive を使用して Amazon S3 のデータを DynamoDB に書き込 むことができます。 CREATE EXTERNAL TABLE s3_import(a_col string, b_col bigint, c_col array<string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/'; CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); INSERT OVERWRITE TABLE hiveTableName SELECT * FROM s3_import; カラムマッピングを指定せずに Amazon S3 バケットのテーブルを DynamoDB にインポート するには • 以前 DynamoDB からエクスポートされ Amazon S3 に格納されたデータを参照する EXTERNAL テーブルを作成します。インポートする前に、テーブルが DynamoDB に存在することと、そ のキースキーマが、以前エクスポートされた DynamoDB テーブルと同じであることを確認しま す。また、テーブルには map<string, string> 方の列が 1 つだけ含まれる必要があります。 412 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 次に、DynamoDB にリンクされている Hive テーブルを作成したら、INSERT OVERWRITE コマン ドを呼び出して Amazon S3 のデータを DynamoDB に書き込みます。カラムマッピングがないの で、この方法でインポートされたテーブルにクエリを行うことはできません。カラムマッピング を指定しないデータのインポートは、Amazon EMR AMI 2.2.3 以降でサポートされる Hive 0.8.1.5 以降で利用できます。 CREATE EXTERNAL TABLE s3TableName (item map<string, string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://bucketname/path/subpath/'; CREATE EXTERNAL TABLE hiveTableName (item map<string,string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1"); INSERT OVERWRITE TABLE hiveTableName SELECT * FROM s3TableName; HDFS のテーブルを DynamoDB にインポートするには • Amazon EMR と Hive を使用して HDFS のデータを DynamoDB にインポートすることができま す。 CREATE EXTERNAL TABLE hdfs_import(a_col string, b_col bigint, c_col array<string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 'hdfs:///directoryName'; CREATE EXTERNAL TABLE hiveTableName (col1 string, col2 bigint, col3 array<string>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "dynamodbtable1", "dynamodb.column.mapping" = "col1:name,col2:year,col3:holidays"); INSERT OVERWRITE TABLE hiveTableName SELECT * FROM hdfs_import; DynamoDB でのデータのクエリ 次の例は、Amazon EMR を使用して DynamoDB のデータにクエリを行うさまざまな方法を示しま す。 マッピングされたカラムで最大値を検索するには(max) • 次のような Hive コマンドを使用します。最初のコマンドの CREATE ステートメント で、DynamoDB に格納されたデータを参照する Hive テーブルを作成します。次に、SELECT ス テートメントで、そのテーブルを使用して、DynamoDB に格納されたデータのクエリを行いま す。次の例では、指定された顧客による最大の注文を検索します。 CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 413 Amazon EMR 開発者ガイド データのエクスポート、インポート、 クエリを行う Hive コマンドの使用例 TBLPROPERTIES ("dynamodb.table.name" = "Purchases", "dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); SELECT max(total_cost) from hive_purchases where customerId = 717; GROUP BY 句を使用してデータを集計するには • GROUP BY 句を使用して、複数のレコードのデータを収集できます。多くの場合、これは sum、count、min、または max のような集計関数とともに使用されます。次の例は、4 件以上注 文した顧客の注文のうち最大の注文のリストを返します。 CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Purchases", "dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); SELECT customerId, max(total_cost) from hive_purchases GROUP BY customerId HAVING count(*) > 3; 2 つの DynamoDB テーブルを結合するには • 次の例では、2 つの Hive テーブルを DynamoDB に格納されているデータにマッピングします。 その後、2 つのテーブルに対して join を呼び出します。join がクラスターで計算されて返されま す。join は DynamoDB では発生しません。この例は、3 件以上注文した顧客について、顧客とそ の購入品のリストを返します。 CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Purchases", "dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); CREATE EXTERNAL TABLE hive_customers(customerId bigint, customerName string, customerAddress array<String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Customers", "dynamodb.column.mapping" = "customerId:CustomerId,customerName:Name,customerAddress:Address"); Select c.customerId, c.customerName, count(*) as count from hive_customers c JOIN hive_purchases p ON c.customerId=p.customerId GROUP BY c.customerId, c.customerName HAVING count > 2; 414 Amazon EMR 開発者ガイド パフォーマンスの最適化 異なるソースの 2 つのテーブルを結合するには • 次の例の Customer_S3 は、Amazon S3 に格納された CSV ファイルを読み込む Hive テーブルで あり、hive_purchases は、DynamoDB のデータを参照するテーブルです。次の例では、Amazon S3 に CSV ファイルとして格納されている顧客データと、DynamoDB に格納されている注文デー タを結合し、名前に「Miller」が含まれる顧客による注文を表すデータのセットを返します。 CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "Purchases", "dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); CREATE EXTERNAL TABLE Customer_S3(customerId bigint, customerName string, customerAddress array<String>) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/'; Select c.customerId, c.customerName, c.customerAddress from Customer_S3 c JOIN hive_purchases p ON c.customerid=p.customerid where c.customerName like '%Miller%'; Note 前の各例には、明確かつ完全にするために CREATE TABLE 句が含まれていました。指定さ れた Hive テーブルに対して複数のクエリやエクスポート操作を実行する場合は、Hive セッ ションの開始時にテーブルを一度作成するだけで済みます。 DynamoDB での Amazon EMR オペレーションのパ フォーマンスの最適化 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 DynamoDB テーブルでの Amazon EMR オペレーションは読み込みオペレーションとしてカウントさ れ、テーブルのプロビジョニングされたスループット設定が適用されます。Amazon EMR は独自のロ ジックを実装して、DynamoDB テーブルで負荷のバランスをとり、プロビジョニング済みスループッ トを超過する可能性を最小限に抑えようとします。Amazon EMR はそれぞれの Hive クエリの最後 に、プロビジョニング済みスループットを超過した回数など、クエリの処理に使用されたクラスター に関する情報を返します。この情報とともに、DynamoDB スループットに関する CloudWatch メトリ クスを使用すると、以降のリクエストで DynamoDB テーブルの負荷をより適切に管理することがで きます。 DynamoDB テーブルを操作する際に Hive クエリのパフォーマンスに影響を与える要因を次に示しま す。 415 Amazon EMR 開発者ガイド パフォーマンスの最適化 プロビジョニングされた読み込みキャパシティーユニット DynamoDB テーブルに対して Hive クエリを実行する際には、十分な量の読み込みキャパシティーユ ニットをプロビジョニングしておく必要があります。 例えば、DynamoDB テーブルに対して 100 ユニットの読み込みキャパシティーをプロビジョニングし ているとします。この場合、1 秒間に 100 の読み込み(409,600 バイト)を実行できます。そのテー ブルに 20 GB(21,474,836,480 バイト)のデータが含まれており、Hive クエリがフルテーブルスキャ ンを実行する場合、クエリの実行にかかる時間は次のように見積もられます。 21,474,836,480 / 409,600 = 52,429 秒 = 14.56 時間 必要な時間を短縮するには、ソース DynamoDB テーブルで読み込みキャパシティーユニットを調整 する以外に方法はありません。Amazon EMR クラスターにノードをさらに追加しても、時間は短縮さ れません。 Hive 出力では、1 つ以上のマッパープロセスが終了すると、完了のパーセンテージが更新されます。 プロビジョニングされた読み込みキャパシティーが小さく設定された大きな DynamoDB テーブルで は、完了のパーセンテージ出力が長時間更新されない場合があります。上記のような場合、ジョブ は数時間にわたって 0% 完了として表示されます。ジョブの進行状況の詳細なステータスについて は、Amazon EMR コンソールに移動してください。ここで、個別のマッパータスクのステータスおよ びデータ読み込みの統計を表示できます。 また、マスターノードの Hadoop インターフェイスにログオンし、Hadoop 統計を表示することもで きます。ここには、個別のマップタスクのステータスおよびいくつかのデータ読み込み統計が表示さ れます。詳細については、次のトピックを参照してください。 • マスターノード上にホストされるウェブインターフェイス • Hadoop のウェブインターフェイスを表示するHadoop のウェブインターフェイスを表示する 読み込みパーセントの設定 デフォルトでは、Amazon EMR は現在のプロビジョニング済みスループットに基づいて、DynamoDB テーブルに対するリクエスト負荷を管理します。ただし、プロビジョニング済みスループットを超 過した応答を多数含むジョブに関する情報を Amazon EMR が返す場合は、テーブルを設定する際 に、dynamodb.throughput.read.percent パラメーターを使用してデフォルトの読み込みレート を調整することができます。読み取り率パラメーターの設定の詳細については、『Amazon EMR 開発 者ガイド』の「Hive のオプション」を参照してください。 書き込みパーセントの設定 デフォルトでは、Amazon EMR は現在のプロビジョニング済みスループットに基づいて、DynamoDB テーブルに対するリクエスト負荷を管理します。ただし、プロビジョニング済みスループットを超 過した応答を多数含むジョブに関する情報を Amazon EMR が返す場合は、テーブルを設定する際 に、dynamodb.throughput.write.percent パラメーターを使用してデフォルトの書き込みレート を調整することができます。書き込み率パラメーターの設定の詳細については、『Amazon EMR 開発 者ガイド』の「Hive のオプション」を参照してください。 再試行間隔の設定 デフォルトでは、Hive クエリが 2 分以内(デフォルトの再試行間隔)に結果を返さない 場合、Amazon EMR はこのクエリを再実行します。この間隔は、Hive クエリの実行時に dynamodb.retry.duration パラメーターを設定することによって調整できます。書き込み率パラ メーターの設定の詳細については、『Amazon EMR 開発者ガイド』の「Hive のオプション」を参照 してください。 416 Amazon EMR 開発者ガイド パフォーマンスの最適化 マップタスクの数 DynamoDB に格納されているデータのエクスポートおよびクエリ実行のリクエストを処理するために Hadoop が起動するマッパーデーモンは、最大読み込みレート(毎秒 1 MiB)を上限値として、使用 される読み込みキャパシティーを制限します。DynamoDB で追加のプロビジョニング済みスループッ トを使用できる場合は、マッパーデーモンの数を増やせば、Hive エクスポートおよびクエリオペレー ションのパフォーマンスを向上させることができます。そのためには、クラスター内の EC2 インスタ ンスの数を増やすか、または各 EC2 インスタンスで実行されているマッパーデーモンの数を増やしま す。 クラスター内の EC2 インスタンスの数を増やすには、現在のクラスターを停止し、より多くの EC2 インスタンスとともに再起動します。Amazon EMR コンソールからクラスターを起動する場合は [Configure EC2 Instances] ダイアログボックスで、CLI からクラスターを起動する場合は --numinstances オプションを使用して、EC2 インスタンスの数を指定します。 インスタンスで実行されるマップタスクの数は、EC2 インスタンスタイプによって異なります。サ ポートされる EC2 インスタンスタイプ、および各タイプで提供されるマッパーの数の詳細について は、 Hadoop 設定のリファレンス . そこには、サポートされる設定ごとに "タスクの設定" セクション があります。 マッパーデーモンの数を増やすもう 1 つの方法としては、Hadoop の mapred.tasktracker.map.tasks.maximum 設定パラメーターをより大きい値に変更しま す。この場合は、EC2 インスタンスの数またはサイズを大きくせずにマッパーの数を増やす ことができるので、コストを削減できるという利点があります。欠点としては、この値を大 きく設定しすぎると、クラスター内の EC2 インスタンスがメモリ不足になる可能性がありま す。mapred.tasktracker.map.tasks.maximum を設定するには、クラスターを起動し、 [Configure Hadoop] ブートストラップアクションを指定して、ブートストラップアクションの引数の 1 つとして mapred.tasktracker.map.tasks.maximum の値を渡します。これを次の例で示しま す。 --bootstrap-action s3n://elasticmapreduce/bootstrap-actions/configure-hadoop \ --args -m,mapred.tasktracker.map.tasks.maximum=10 マッパーデーモンの数を増やすもう 1 つの方法としては、Hadoop の mapreduce.tasktracker.map.tasks.maximum 設定パラメーターをより大きい値に変更 します。この場合は、EC2 インスタンスの数またはサイズを大きくせずにマッパーの数を増 やすことができるので、コストを削減できるという利点があります。欠点としては、この値を 大きく設定しすぎると、クラスター内の EC2 インスタンスがメモリ不足になる可能性があり ます。mapreduce.tasktracker.map.tasks.maximum を設定するには、クラスターを起動 し、Hadoop の設定を指定して、mapreduce.tasktracker.map.tasks.maximum の値を引数の 1 つとして渡します。これを次の例で示します。 並列データリクエスト 複数のユーザーまたは複数のアプリケーションから単一のテーブルに複数のデータリクエストが行わ れると、プロビジョニング済み読み込みスループットが減少し、パフォーマンス速度が低下します。 処理間隔 DynamoDB のデータ整合性は、各ノードでの読み書きオペレーションの順序に依存します。Hive ク エリの進行中に、別のアプリケーションが DynamoDB テーブルに新しいデータをロードしたり、既 存のデータの変更や削除を行ったりする場合があります。この場合、クエリの実行中にデータに対し て行われた変更は Hive クエリの結果に反映されないことがあります。 417 Amazon EMR 開発者ガイド Amazon EMR を使用して Avro データを Amazon S3 に保存する スループットの超過の回避 DynamoDB に対して Hive クエリを実行する際には、プロビジョニング済みスループットを超過しな いように注意してください。超過すると、アプリケーションによる DynamoDB::Get の呼び出しに必 要な容量が不足してしまいます。この状態が発生しないようにするには、Amazon CloudWatch でロ グの確認およびメトリクスのモニタリングを行うことで、アプリケーションによる DynamoDB::Get の呼び出し時に読み込み量とスロットリングを定期的にモニタリングする必要があります。 リクエスト時間 DynamoDB テーブルの需要が低いときに DynamoDB テーブルにアクセスする Hive クエリをスケ ジュールすると、パフォーマンスが向上します。例えば、アプリケーションのほとんどのユーザーが サンフランシスコに住んでいる場合、大部分のユーザーが睡眠中で DynamoDB データベースを更新 していない毎朝 4 時(PST)にデータをエクスポートするように選択することができます。 時間ベースのテーブル データが一連の時間ベースの DynamoDB テーブル(例えば、1 日あたり 1 つのテーブル)として構成 されている場合は、テーブルが非アクティブになったときにデータをエクスポートできます。この手 法を使用すると、データを Amazon S3 に継続的にバックアップできます。 アーカイブされたデータ DynamoDB に格納されているデータに対して多数の Hive クエリを実行する予定であり、アーカイブ されたデータがアプリケーションで許容される場合は、データを HDFS または Amazon S3 にエクス ポートし、DynamoDB の代わりにデータのコピーに対して Hive クエリを実行することができます。 これにより、読み込みオペレーションおよびプロビジョニング済みスループットを過度に使用せずに 済みます。 Amazon EMR を使用して Avro データを Amazon S3 に保存する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Avro は、JSON 形式で保存されるスキーマを利用してデータを保存およびロードするデータシリア ル化システムです。次の手順は、フラットファイルからデータを取り出し、そのデータを Amazon S3 を使用して保存する方法を示しています。この手順では、インストールされた Pig で既にクラス ターを起動していること前提にしていまします。インストールされた Pig でクラスターを起動する方 法の詳細については、「Pig の作業の送信 (p. 313)」を参照してください。Avro の詳細については、 「https://cwiki.apache.org/confluence/display/PIG/AvroStorage」を参照してください Avro を使用してデータを保存およびロードするには 1. テキストファイル top_nhl_scorers.txt を作成します(この情報は、Wikipedia の記事 「http://en.wikipedia.org/wiki/List_of_NHL_players_with_1000_points#1000-point_scorers」から取 得)。 Gordie Howe Detroit Red Wings 1767 1850 Jean Beliveau Montreal Canadiens 1125 1219 Alex Delvecchio Detroit Red Wings 1969 1281 Bobby Hull Chicago Black Hawks 1063 1170 418 Amazon EMR 開発者ガイド Amazon EMR を使用して Avro データを Amazon S3 に保存する Norm Ullman Toronto Maple Leafs 1410 1229 Stan Mikita Chicago Black Hawks 1394 1467 Johnny Bucyk Boston Bruins 556 1369 Frank Mahovlich Montreal Canadiens 1973 1103 Henri Richard Montreal Canadiens 1256 1046 Phil Esposito Boston Bruins 717 1590 このファイルを Amazon S3 内のバケットにアップロードします。 2. 以下の構造の Avro スキーマ ファイル、top_nhl_scorers.avro を作成します。 {"namespace": "top_nhl_scorers.avro", "type": "record", "name": "Names", "fields": [ {"name": "name", "type": "string"}, {"name": "team", "type": "string"}, {"name": "games_played", "type": "int"}, {"name": "points", "type": "int"} ] } このファイルを Amazon S3 内の同じバケットにアップロードします。 3. クラスターのマスターノードに接続します。詳細については、「SSH を使用してマスターノード に接続する (p. 459)」を参照してください。 4. grunt シェルを起動します。 $ pig 2014-03-21 16:50:29,565 [main] INFO org.apache.pig.Main - Apache Pig version 0.11.1.1-amzn (rexported) compiled Aug 03 2013, 22:52:20 2014-03-21 16:50:29,565 [main] INFO org.apache.pig.Main - Logging error messages to: /home/hadoop/pig_1395420629558.log 2014-03-21 16:50:29,662 [main] INFO org.apache.pig.impl.util.Utils Default bootup file /home/hadoop/.pigbootup not found 2014-03-21 16:50:29,933 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine Connecting to hadoop file system at: hdfs://172.31.17.132:9000 2014-03-21 16:50:30,696 [main] INFO org.apache.pig.backend.hadoop.executionengine.HExecutionEngine Connecting to map-reduce job tracker at: 172.31.17.132:9001 grunt> 5. 必要なストレージハンドラを起動するために必要な JAR を登録します。 REGISTER REGISTER REGISTER REGISTER REGISTER 6. /home/hadoop/lib/avro-1.7.4.jar; /home/hadoop/lib/pig/piggybank.jar; /home/hadoop/lib/jackson-mapper-asl-1.9.9.jar; /home/hadoop/lib/jackson-core-asl-1.9.9.jar; /home/hadoop/lib/json-simple-1.1.1.jar; 前にバケットに保存したソースデータをロードします。 data = LOAD 's3://your-bucket/hockey_stats/input/*.txt' USING PigStorage('\t') AS (name:chararray,team:chararray,games_played:int,points:int); 7. AvroStorage ハンドラを使用して、バケットにデータを保存します。 419 Amazon EMR 開発者ガイド Amazon EMR を使用して Avro データを Amazon S3 に保存する STORE data INTO 's3://your-bucket/avro/output/' USING org.apache.pig.piggybank.storage.avro.AvroStorage('schema_file','s3:// your-bucket/hockey_stats/schemas/top_nhl_scorers.avro'); 8. Avro データを読み取るには、同じ AvroStorage ハンドラーを使用します。 avro_data = LOAD 's3://your-bucket/avro/output/' USING org.apache.pig.piggybank.storage.avro.AvroStorage(); 420 Amazon EMR 開発者ガイド クラスターを表示し、モニタリングする クラスターを管理する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このドキュメントは、Amazon EMR の バージョン 4.x および 5.x を対象としています。Amazon EMR AMI バージョン 2.x および 3.x については、Amazon EMR 開発者ガイド (PDF) を参照してく ださい。 クラスターを起動した後は、クラスターをモニタリングおよび管理できます。Amazon EMR には、ク ラスターに接続し、管理するために使用できるいくつかのツールが用意されています。 トピック • クラスターを表示し、モニタリングする (p. 421) • クラスターに接続する (p. 458) • クラスターの終了を制御する (p. 478) • クラスターリソースのスケーリング (p. 484) • コンソールを使用してクラスターを複製する (p. 503) • クラスターへの作業の送信 (p. 504) • AWS Data Pipeline でクラスターを自動的に繰り返す (p. 509) クラスターを表示し、モニタリングする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR には、クラスターに関する情報を収集するために使用できるいくつかのツールが用意さ れています。クラスターに関する情報には、コンソールや CLI から、またはプログラムでアクセスで きます。マスターノードで、標準の Hadoop ウェブインターフェイスおよびログファイルを利用でき ます。CloudWatch などのモニタリングサービスを使ってクラスターのパフォーマンスを追跡するこ ともできます。 トピック • クラスターの詳細情報を表示する (p. 422) 421 Amazon EMR 開発者ガイド クラスターの詳細情報を表示する • ログファイルを表示する (p. 426) • • • • Amazon EC2 でクラスターインスタンスを表示する (p. 430) イベントとメトリックスを使用して、クラスターをモニタリングする (p. 431) AWS CloudTrail での Amazon EMR API 呼び出しのログ作成 (p. 450) Ganglia でパフォーマンスをモニタリングする (p. 452) クラスターの詳細情報を表示する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターを開始したら、そのステータスをモニタリングし、実行に関する詳細情報を取得できま す。このセクションでは、Amazon EMR クラスターの詳細を表示する方法について説明します。どの 状態のクラスターでも表示できます。 この手順では、Amazon EMR コンソールを使用してクラスターの詳細を表示する方法について説明し ます。 コンソールを使用してクラスターの詳細を表示するには 1. 2. 3. AWS マネジメントコンソールにサインインした後、Amazon EMR コンソール(https:// console.aws.amazon.com/elasticmapreduce/)を開きます。 [Cluster List] ページに詳細を表示することもできます。各クラスターの横の矢印アイコンを選択 することで、行のビューが展開され、選択したクラスターの詳細情報とアクションが表示されま す。 詳細については、クラスターのリンクを選択して、[Cluster Details] ページを開いてください。 [Summary] セクションには、選択したクラスターについての詳細情報が表示されます。 422 Amazon EMR 開発者ガイド クラスターの詳細情報を表示する 以下の例では、AWS CLI と Amazon EMR CLI を使用してクラスターの詳細を取得する方法を示しま す。 AWS CLI を使用してクラスターの詳細を表示するには ステータス、ハードウェアやソフトウェアの設定、VPC 設定、ブートストラップアクション、インス タンスグループなど、クラスターレベルの詳細を表示するには、describe-cluster コマンドを使 用します。 • describe-cluster コマンドを使用するには、クラスター ID が必要です。クラスター ID は、list-clusters コマンドを使用して取得できます。クラスターの詳細を表示するには、次 のコマンドを入力し、j-1K48XXXXXXHCB をクラスター ID に置き換えます。 aws emr describe-cluster --cluster-id j-1K48XXXXXXHCB 出力は次の例のようになります。 { "Cluster": { "Status": { "Timeline": { "ReadyDateTime": 1413102659.072, "EndDateTime": 1413103872.89, "CreationDateTime": 1413102441.707 }, "State": "TERMINATED", "StateChangeReason": { "Message": "Terminated by user request", "Code": "USER_REQUEST" } }, 423 Amazon EMR 開発者ガイド クラスターの詳細情報を表示する "Ec2InstanceAttributes": { "Ec2AvailabilityZone": "us-west-2a" }, "Name": "Development Cluster", "Tags": [], "TerminationProtected": false, "RunningAmiVersion": "3.1.0", "NormalizedInstanceHours": 24, "InstanceGroups": [ { "RequestedInstanceCount": 2, "Status": { "Timeline": { "ReadyDateTime": 1413102659.09, "EndDateTime": 1413103872.779, "CreationDateTime": 1413102441.708 }, "State": "TERMINATED", "StateChangeReason": { "Message": "Job flow terminated", "Code": "CLUSTER_TERMINATED" } }, "Name": "CORE", "InstanceGroupType": "CORE", "InstanceType": "m3.xlarge", "Id": "ig-115XXXXXX52SX", "Market": "ON_DEMAND", "RunningInstanceCount": 0 }, { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413102655.968, "EndDateTime": 1413103872.779, "CreationDateTime": 1413102441.708 }, "State": "TERMINATED", "StateChangeReason": { "Message": "Job flow terminated", "Code": "CLUSTER_TERMINATED" } }, "Name": "MASTER", "InstanceGroupType": "MASTER", "InstanceType": "m3.xlarge", "Id": "ig-26LXXXXXXFCXQ", "Market": "ON_DEMAND", "RunningInstanceCount": 0 } ], "Applications": [ { "Version": "2.4.0", "Name": "hadoop" } ], 424 Amazon EMR 開発者ガイド クラスターの詳細情報を表示する "MasterPublicDnsName": "ec2-XX-XX-XXX-XX.uswest-2.compute.amazonaws.com", "VisibleToAllUsers": true, "BootstrapActions": [ { "Args": [], "Name": "Install Ganglia", "ScriptPath": "s3://us-west-2.elasticmapreduce/bootstrapactions /install-ganglia" } ], "RequestedAmiVersion": "3.1.0", "AutoTerminate": false, "Id": "j-Z2OXXXXXXI45" } } AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 AWS CLI を使用して作成日に基づいてクラスターを一覧表示するには 作成日に基づいてクラスターを一覧表示するには、list-clusters コマンドを入力し、-created-after および --created-before パラメーターを指定します。 • 2014 年 10 月 9 日から 2014 年 10 月 12 日までの間に作成されたクラスターを一覧表示するに は、以下のコマンドを入力します。 aws emr list-clusters --created-after 2014-10-09T00:12:00 --createdbefore 2014-10-12T00:12:00 出力は、指定されたタイムスタンプの期間に作成されたすべてのクラスターの一覧です。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Note Amazon EMR では、完了したクラスターに関するメタデータ情報を参照用に 2 か月間無料で 保管します。完了したクラスターをコンソールから削除することはできません。クラスター は 2 か月経つと自動的に削除されます。 AWS CLI を使用して状態に基づいてクラスターの一覧を表示するには 状態に基づいてクラスターの一覧を表示するには、list-clusters コマンドを入 力し、--cluster-states パラメーターを指定します。クラスターの有効な状態 は、STARTING、BOOTSTRAPPING、RUNNING、WAITING、TERMINATING、TERMINATED、お よび TERMINATED_WITH_ERRORS です。 クラスターを表示するために、いくつかのショートカットパラメーターも使用できます。-active パラメーターは、状態が STARTING、BOOTSTRAPPING、RUNNING、WAITING、または TERMINATING であるクラスターだけをフィルタリングします。--terminated パラメーターは、状 態が TERMINATED であるクラスターだけをフィルタリングします。--failed パラメーターは、状 態が TERMINATED_WITH_ERRORS であるクラスターだけをフィルタリングします。 425 Amazon EMR 開発者ガイド ログファイルを表示する • すべての TERMINATED クラスターを一覧表示するには、次のコマンドを入力します。 aws emr list-clusters --cluster-states TERMINATED または: aws emr list-clusters --terminated 出力は、指定した状態であるすべてのクラスターの一覧です。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 DescribeJobFlows に固有の入力パラメーターの詳細については、「DescribeJobFlows」を参照し てください。 ログファイルを表示する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR と Hadoop はいずれも、クラスターの状態を報告するログファイルを生成します。デ フォルトで、ログファイルは /mnt/var/log/ ディレクトリのマスターノードに出力されます。クラス ターの起動時に設定した方法に応じて、ログファイルは Amazon S3 にアーカイブされる場合や、グ ラフィカルなデバッグツールを使用して表示できる場合があります。 さまざまなログの種類がマスターノードに出力されます。Amazon EMR は、ステップ、ブートスト ラップアクション、およびインスタンス状態のログを出力します。Apache Hadoop は、ジョブ、タ スク、およびタスク試行の処理を報告するログを出力します。また、Hadoop は、デーモンのログも 記録します。Hadoop から出力される情報の詳細については、http://hadoop.apache.org/docs/stable/ hadoop-project-dist/hadoop-common/ClusterSetup.html を参照してください。 トピック • マスターノードでログファイルを表示するには (p. 426) • Amazon S3 にアーカイブされたログファイルを表示する (p. 428) • デバッグツールでログファイルを表示する (p. 429) マスターノードでログファイルを表示するには 次の表は、マスターノードに保存されるログファイルの一部を示しています。 場所 説明 /mnt/var/log/bootstrap-actions ブートストラップアクションの処理中に出力さ れるログ。 /mnt/var/log/hadoop-state-pusher Hadoop の状態プッシャープロセスで出力される ログ。 /mnt/var/log/instance-controller インスタンスコントローラログ。 426 Amazon EMR 開発者ガイド ログファイルを表示する 場所 説明 /mnt/var/log/instance-state インスタンス状態ログ。ノードの CPU、メモリ の状態、およびガベージコレクタースレッドに 関する情報が含まれます。 mnt/var/log/service-nanny サービスナニープロセスで出力されるログ mnt/var/log/hadoop jobtracker や namenode のプロセスで出力され るログなどの Hadoop ログ mnt/var/log/hadoop/steps/N ステップの処理に関する情報が含まれステップ ログ。N の値は、Amazon EMR によって割り 当てられた stepId を示します。たとえば、クラ スターに 2 つのステップ、s-1234ABCDEFGH と s-5678IJKLMNOP があるとします。最初の ステップは /mnt/var/log/hadoop/steps/ s-1234ABCDEFGH/ に配置され、2 番目のス テップは /mnt/var/log/hadoop/steps/ s-5678IJKLMNOP/ に配置されます。 Amazon EMR によって書き込まれるステップロ グは以下の通りです。 • controller – ステップの処理に関する情報。 読み込みステップに問題が生じる場合、この ログでスタックトレースを探すことができま す。 • syslog – ステップの Hadoop ジョブの実行に ついて説明します。 • stderr – Hadoop がステップを実行中の標準の エラーチャネル。 • stdout – Hadoop がステップを実行中の標準の 出力チャネル。 マスターノードでログファイルを表示するには 1. 「SSH を使用してマスターノードに接続する (p. 459)」の説明に従って、SSH を使用してマス ターノードに接続します。 2. 表示するログファイル情報が保存されているディレクトリに移動します。前述の表は、使用でき るログファイルの種類とその保存場所の一覧です。次の例は、ID が s-1234ABCDEFGH のステッ プログに移動するコマンドを示しています。 cd /mnt/var/log/hadoop/steps/s-1234ABCDEFGH/ 3. マスターノードにインストールされているテキストエディターを使用して、ログファイルの内容 を表示します。vi、nano、emacs などのテキストエディターを利用できます。次の例は、nano テキストエディターを使用してコントローラステップログを開く方法を示しています。 nano controller 427 Amazon EMR 開発者ガイド ログファイルを表示する Amazon S3 にアーカイブされたログファイルを表示する デフォルトでは、コンソールを使用して起動した Amazon EMR クラスターは自動的に Amazon S3 に ログファイルをアーカイブします。独自のログのパスを指定したり、コンソールが自動的にログのパ スを生成することを許可したりできます。CLI または API を使用して起動されるクラスターについて は、Amazon S3 ログのアーカイブを手動で設定する必要があります。 ログファイルを Amazon S3 にアーカイブするように Amazon EMR を設定している場合、指定した S3 の場所にファイルが保存されます。この例では、/JobFlowId/ フォルダーです(JobFlowId はク ラスター識別子です)。 次の表は、Amazon S3 に保存されるログファイルの一部を示しています。 場所 説明 /JobFlowId/daemons/ datanode や tasktracker など、Hadoop デーモン から出力されるログ。各ノードのログは、その ノードの EC2 インスタンス識別子が名前に付い たフォルダーに保存されます。 /JobFlowId/jobs/ 各 Hadoop ジョブのジョブログと設定 XML ファ イル。 /JobFlowId/node/ ブートストラップアクション、インスタンスの 状態、ノードのアプリケーションログを含む ノードログ。各ノードのログは、そのノードの EC2 インスタンス識別子が名前に付いたフォル ダーに保存されます。 /JobFlowId/steps/N/ ステップの処理に関する情報が含まれステップ ログ。N の値は、Amazon EMR によって割り 当てられた stepId を示します。たとえば、クラ スターに 2 つのステップ、s-1234ABCDEFGH と s-5678IJKLMNOP があるとします。最初の ステップは /mnt/var/log/hadoop/steps/ s-1234ABCDEFGH/ に配置され、2 番目のス テップは /mnt/var/log/hadoop/steps/ s-5678IJKLMNOP/ に配置されます。 Amazon EMR によって書き込まれるステップロ グは以下の通りです。 • controller – ステップの処理に関する情報。 読み込みステップに問題が生じる場合、この ログでスタックトレースを探すことができま す。 • syslog – ステップの Hadoop ジョブの実行に ついて説明します。 • stderr – Hadoop がステップを実行中の標準の エラーチャネル。 • stdout – Hadoop がステップを実行中の標準の 出力チャネル。 /JobFlowId/task-attempts/ タスク試行ログ。各タスク試行のログは、対応 するジョブ識別子が名前に付いたフォルダーに 保存されます。 428 Amazon EMR 開発者ガイド ログファイルを表示する コンソールを使用して Amazon S3 にアーカイブされたログファイルを表示するには 1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 2. Amazon S3 にログファイルをアーカイブするようにクラスターを設定したときに指定した S3 バ ケットを開きます。 3. 表示する情報を含むログファイルに移動します。前述の表は、使用できるログファイルの種類と その保存場所の一覧です。 4. ブラウザで表示するログファイルをダブルクリックします。 Amazon S3 コンソールでログファイルを表示しない場合は、Firefox ウェブブラウザ用 Amazon S3 Organizer プラグインなどのツールを使用するか、Amazon S3 からオブジェクトを取得するアプリ ケーションを作成して、Amazon S3 からローカルマシンにファイルをダウンロードします。詳細につ いては、Amazon Simple Storage Service 開発者ガイド の·Getting Objects を参照してください。 デバッグツールでログファイルを表示する Amazon EMR では、デバッグツールは自動的に有効になりません。クラスターの起動時にこれを設定 する必要があります。 コンソールを使用してクラスターログを表示するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] ページで、表示したいクラスターの横にある詳細アイコンを選択します。 [Cluster Details] ページが表示されます。[Steps] セクションで、各ステップの右側のリンクは、 そのステップで使用できる様々なタイプのログを表示します。これらのログは、Amazon EMR に よって生成されます。 3. 特定のステップに関連付けられている Hadoop ジョブのリストを表示するには、そのステップの 右にある [View Jobs] リンクを選択します。 4. 特定のジョブに関連付けられてきる Hadoop タスクのリストを表示するには、そのジョブの右に ある [View Tasks] リンクを選択します。 5. 特定のタスクが実行した試行のリストを表示するには、そのタスクの右にある [View Attempts] リ ンクを選択します。 429 Amazon EMR 開発者ガイド Amazon EC2 でクラスターインスタンスを表示する 6. タスク試行によって生成されたログを表示するには、タスク試行の右にある [stderr]、[stdout]、 および [syslog] のリンクを選択します。 Amazon EMR がログファイルを Amazon S3 のバケットにアップロードすると、デバッグツールに は、そのログファイルへのリンクが表示されます。ログファイルは 5 分ごとに Amazon S3 にアップ ロードされるため、ステップが完了してからログファイルのアップロードが完了するまでには、数分 間かかることがあります。 Amazon EMR は、デバッグツールに表示される Hadoop のジョブ、タスク、およびタスク試行の状態 を定期的に更新します。デバッグペインの [Refresh List] をクリックすると、これらの項目の最新のス テータスを入手できます。 Amazon EC2 でクラスターインスタンスを表示する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 リソース管理を補助するために、Amazon EC2 ではタグ形式でメタデータをリソースに割り当てるこ とができます。Amazon EC2 の各タグは、キーと値から構成されます。タグを使用すると、Amazon EC2 リソースを目的、所有者、環境などさまざまな方法で分類することができます。 430 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする タグに基づいてリソースを検索およびフィルタリングできます。AWS アカウントを使用して割り当て たタグは、お客様だけが使用できます。リソースを共有している他のアカウントから、お客様のタグ を見ることはできません。 Amazon EMR では、キー/値ペアを使用して起動される各 EC2 インスタンスに自動的にタグが付けら れます。このキー/値ペアによって、クラスターと、そのインスタンスが属するインスタンスグループ が識別されます。これにより、EC2 インスタンスのフィルタリングが行いやすくなります。例えば、 特定のクラスターに属するインスタンスのみを表示したり、タスクインスタンスグループで現在実行 中のすべてのインスタンスを表示したりできます。これは、複数のクラスターを同時に実行している 場合、またはたくさんの EC2 インスタンスを管理している場合に非常に便利です。 Amazon EMR によって割り当てられる事前に定義されたキー/値ペアを次に示します。 キー 値 aws:elasticmapreduce:job-flow-id <job-flow-identifier> aws:elasticmapreduce:instance-group-role <group-role> 値はさらに次のように定義されます。 • <job-flow-identifier> は、インスタンスのプロビジョニング対象であるクラスターの ID です。jXXXXXXXXXXXXX というフォーマットで表示されます。 • <group-role> は、マスター、コア、またはタスクのいずれかの値です。これらの値は、マスターイ ンスタンスグループ、コアインスタンスグループ、およびタスクインスタンスグループに対応しま す。 Amazon EMR が追加するタグに基づいて表示およびフィルタリングできます。詳細について は、「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「Using Tags」を参照してくださ い。Amazon EMR が設定するタグはシステムタグなので編集も削除もできません。したがって、タグ の表示とフィルタリングに関するセクションは非常に重要です。 Note EC2 インスタンスのタグは、そのステータスが実行中に更新されるときに追加されま す。EC2 インスタンスがプロビジョニングされてから、ステータスが実行中に設定されるま での間にレイテンシーがある場合、Amazon EMR によって設定されたタグは、インスタンス が開始されるまで表示されません。タグが表示されない場合は、数分待ってからビューを更 新します。 イベントとメトリックスを使用して、クラスターを モニタリングする イベントとメトリックスを使用して Amazon EMR クラスターのアクティビティおよび状態を追跡で きます。Amazon EMR コンソールでイベントとメトリックスをすぐに表示し、イベントが指定したパ ターンに一致する場合、または、メトリックスが定義した範囲の外にある場合、CloudWatch を使用 して、実行するアクションを定義できます。イベントは、クラスター内の特定の発生 (例: クラスター が状態を開始から実行に変更する場合) をモニタリングするのに役立ちます。メトリックスは、特定の 値 (例: HDFS がクラスター内で使用する使用可能なディスク容量の割合) をモニタリングするのに役 立ちます。 このセクションでは、Amazon EMR での状態の変化に関連付けられるイベントおよびメトリックス 固有の情報を提供します。CloudWatch イベント の詳細については、『Amazon CloudWatch Events ユーザーガイド』を参照してください。CloudWatch メトリックスの詳細については『Amazon CloudWatch ユーザーガイド』の「Amazon CloudWatch メトリックスの使用」および「Amazon CloudWatch アラームの作成」を参照してください。 431 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする トピック • イベントのモニタリング (p. 432) • CloudWatch でメトリクスをモニタリングする (p. 436) イベントのモニタリング Amazon EMR はイベントを追跡し、最大 7 日間、そのイベントに関する情報を保持します。クラス ター、インスタンスグループ、自動スケーリングのポリシーおよび手順の状態変化によりイベントが 記録されます。各イベントには、イベントが発生した日付と時刻などの情報が、影響を受けたクラス ターまたはインスタンスグループなどのイベントについての詳細情報と共にあります。 次の表は Amazon EMR のイベント、イベントが示す状態や状態の変化、イベントの重大度、およ びイベントメッセージを表示します。各イベントは、イベントのストリームに自動的に送信される JSON オブジェクトとして表されます。JSON オブジェクトにはイベントについての詳細が含まれま す。JSON オブジェクトは、CloudWatch を使用したイベント処理のルールを設定する場合、特に重 要です。ルールが JSON オブジェクトでパターンと一致しようとするからです。Amazon EMR パラ メーターの詳細については、『Amazon CloudWatch Events ユーザーガイド』の「イベントとイベン トパターン」および「Amazon EMR イベント」を参照してください。 クラスターイベント 状態または状態変更 重要度 メッセージ STARTING INFO Amazon EMR クラスター %s (%s) は [time] にリクエスト され、作成中です。 RUNNING INFO Amazon EMR クラスター %s (%s) は [time] にステップの 実行を開始します。 WAITING INFO Amazon EMR クラスター %s (%s) は [time] に作成され使 用する準備が整いました。 —または— Amazon EMR クラスター %s (%s) は、[time] に保留中のす べてのステップの処理を完了し ました。 Note WAITING 状態のクラス ターでも、ジョブを処 理している可能性があ ります。 TERMINATED 重大度は次に示す状態変更の理 由によって異なります。 Amazon EMR クラスター %s (%s) は、[time] に、[StateChangeReason:Code] の理由で終了しました。 • CRITICAL クラスターが次に 示す状態変更の理由のいず れかによって終了した場合: INTERNAL_ERROR、VALIDATION_ERROR、INSTANCE_FALURE、BOOTSTRAP_FAI 432 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする 状態または状態変更 重要度 メッセージ • INFO クラスターが次に示 す状態変更の理由のいず れかによって終了した場 合: USER_REQUEST または ALL_STEPS_COMPLETED。 TERMINATED_WITH_ERRORS CRITICAL Amazon EMR クラスター %s (%s) は、[time] に [StateChangeReason:Code] の理由でエラーが発生し、終了 しました。 インスタンスグループのイベント 状態または状態変更 重要度 メッセージ RESIZING から RUNNING へ INFO Amazon EMR クラスター %s (%s) のインスタンスグループ のサイズ変更オペレーション %s は完了しました。これで %d の インスタンス数があります。サ イズ変更は %s に開始され、完 了するまでに %d 分、かかりま した。 RUNNING から RESIZING へ INFO Amazon EMR クラスター %s (%s) のインスタンスグループ %s のサイズ変更は %s に開始し ました。インスタンス数 %d か ら %d へサイズ変更をしていま す。 自動スケーリングポリシーのイベント 状態または状態変更 重要度 メッセージ PENDING INFO An Auto Scaling ポリシーは Amazon EMR クラスター %s (%s) のインスタンスグループ %s に [time] に追加されまし た。ポリシーはアタッチメント を保留しています。 —または— Amazon EMR クラスター %s (%s) のインスタンスグループ %s の Auto Scaling ポリシーは [time] に更新されました。ポ リシーはアタッチメントを保留 しています。 ATTACHED Amazon EMR クラスター %s (%s) のインスタンスグループ %s の Auto Scaling ポリシーは INFO 433 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする 状態または状態変更 重要度 メッセージ [time] にアタッチされまし た。 DETACHED INFO Amazon EMR クラスター %s (%s) のインスタンスグループ %s の Auto Scaling ポリシーは [time] にデタッチされまし た。 FAILED ERROR Amazon EMR クラスター %s (%s) のインスタンスグループ %s の Auto Scaling ポリシーは アタッチできず、[time] に、 失敗しました。 —または— Amazon EMR クラスター %s (%s) のインスタンスグルー プ %s の Auto Scaling ポリシー は、デタッチできず [time] に 失敗しました。 ステップイベント 状態または状態変更 重要度 メッセージ PENDING INFO ステップ [stepId] (#####) は Amazon EMR クラスター %s (%s) に [time] に追加され、 保留実行中です。 CANCEL_PENDING WARN Amazon EMR クラスター %s (%s) のステップ [stepId] (# ####) は [time] にキャンセ ルされ、キャンセルの保留中で す。 RUNNING INFO Amazon EMR クラスター %s (%s) のステップ [stepId] (# ####) は [time] に実行を開始 しました。 COMPLETED INFO Amazon EMR クラスター %s (%s) のステップ [stepId] (# ####) は [time] に実行を完了 しました。ステップは %s に実 行を開始し、完了するまでに %d 分かかりました。 CANCELLED WARN Amazon EMR クラスター %s (%s) のクラスターステップ [stepId] (#####) は [time] にキャンセルのリクエストが成 功し、ステップはキャンセルさ れました。 434 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする 状態または状態変更 重要度 メッセージ FAILED ERROR Amazon EMR クラスター %s (%s) のステップ [stepId] (# ####) は [time] に失敗しまし た。 Amazon EMR コンソールを使ったイベントの表示 イベントの簡単なリストには、イベントが発生の降順に表示されているクラスター詳細ペインを使用 して表示できます。 Amazon EMR コンソールでイベントを表示するには 1. https://console.aws.amazon.com/emr/ で Amazon EMR コンソールを開きます。 2. [Cluster List] を選択し、クラスターを選択してから、[View details] を選択します。 3. クラスター詳細ペインで、[Events] を選択します。 CloudWatch を使用して Amazon EMR イベントのルールを作成 Amazon EMR は自動的にイベントを CloudWatch イベントストリームに送信します。指定パターンに 応じてイベントに一致するルールを作成し、メールで通知を送信するなどのアクションを取るようイ ベントをターゲットにルーティングします。パターンはイベント JSON オブジェクトに対してマッチ ングされます。Amazon EMR イベントの詳細については、『Amazon CloudWatch Events ユーザーガ イド』の「Amazon EMR イベント」を参照してください。 Amazon EMR イベントのルールを CloudWatch コンソールを使用して作成するには 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインで、[Rules]、[Create rule] の順に選択します。 3. [Event source] で、Amazon EMR を選択します。 4. イベントの処理の要件に準拠して、イベントの状態やその他の詳細を選択します。「イベントと イベントパターン」のガイドラインに従って JSON を変更することによりルールを作成するに は、詳細オプションの表示、編集を選択します。 5. ターゲットを選択し、イベント処理の要件に応じて追加ターゲットを追加します。 435 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする 6. [Configure details] を選択し、ルールの定義の詳細を指定してから [Create rule] を選択します。 CloudWatch でメトリクスをモニタリングする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 メトリクスは 5 分ごとに更新されます。この間隔は設定できません。2 週間分のメトリクスがアーカ イブされ、その期間が経過したデータは破棄されます。 これらのメトリクスは、すべての Amazon EMR クラスターについて自動収集され、CloudWatch に プッシュされます。CloudWatch でレポートされた Amazon EMR メトリクスについては料金は発生し ません。これらのメトリクスは、Amazon EMR サービスの一環として提供されます。 Note CloudWatch での Amazon EMR メトリクスの表示は、AMI 2.0.3 以降で起動され、Hadoop 0.20.205 以降を実行しているクラスターに対してのみサポートされています。クラス ターに対する AMI バージョンの選択の詳細については、「Amazon マシンイメージ (AMI) (p. 56)」を参照してください。 Amazon EMR メトリクスの使用方法 Amazon EMR によってレポートされるメトリクスが提供する情報は、さまざまな方法で分析できま す。以下の表は、メトリクスの一般的な利用方法をいくつか示しています。ここで紹介するのは開始 するための提案事項です。すべてを網羅しているわけではありません。Amazon EMR によってレポー トされるメトリクスの完全なリストについては、「CloudWatch における Amazon EMR によるメトリ クスのレポート (p. 440)」を参照してください。 どうすればよいか? 関連するメトリクス クラスターの進行を追跡する RunningMapTasks、RemainingMapTasks、RunningReduceTask および RemainingReduceTasks メトリクスを 確認します。 アイドル状態のクラスターを検出する IsIdle メトリクスは、クラスターが現在実行さ れていないライブのタスクかどうかを追跡しま す。クラスターのアイドル状態の時間が指定し た長さ(例えば、30 分)に達した場合に通知さ れるようアラームを設定できます。 ノードのストレージがいつ使い果たされるかを 検出する HDFSUtilization メトリクスは、現在使用さ れているディスク容量の割合です。これがアプ リケーションの許容レベル(使用容量の 80% など)を超えると、クラスターのサイズを変更 し、コアノードを追加しなければならない場合 があります。 CloudWatch メトリクスにアクセスする Amazon EMR が CloudWatch にプッシュするメトリクスにアクセスする方法は複数あります。このメ トリクスを表示するには、Amazon EMR コンソールまたは CloudWatch コンソールを使用します。ま た、抽出するには、CloudWatch CLI または CloudWatch API を使用します。次の手順は、さまざまな ツールを使用してメトリクスにアクセスする方法を示しています。 436 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Amazon EMR コンソールでメトリクスを表示するには 1. https://console.aws.amazon.com/emr/ で Amazon EMR コンソールを開きます。 2. クラスターのメトリックスを表示するには、クラスターを選択して、[Summary] ペインを表示し ます。 3. [Monitoring] を選択して、クラスターに関する情報を表示します。[Cluster Status]、[Map/ Reduce]、[Node Status]、[IO]、または [HBase] というタブのいずれかを選択し、クラスターの進 行状況と状態に関するレポートをロードします。 4. 表示するメトリクスを選択したら、グラフサイズを選択できます。[Start] および [End] フィール ドを編集して、特定の時間枠にメトリクスを絞り込みます。 CloudWatch コンソールでメトリクスを表示するには 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. ナビゲーションペインで EMR を選択します。 3. グラフ化するメトリクスまでスクロールダウンします。モニタリングするクラスターのクラス ター識別子を検索できます。 437 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする 4. グラフを表示するメトリックスを開きます。 438 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする CloudWatch CLI からメトリクスにアクセスするには • mon-get-stats を呼び出します。詳細については、「Amazon CloudWatch ユーザーガイド」を 参照してください。 . CloudWatch API からメトリクスにアクセスするには • GetMetricStatistics を呼び出します。詳細については、「Amazon CloudWatch API リファ レンス」を参照してください。 439 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする メトリクスでアラームを設定する Amazon EMR ではメトリクスを CloudWatch にプッシュします。つまり、CloudWatch を使用し て、Amazon EMR メトリクスに基づいてアラームを設定できます。例えば、HDFS の使用率が 80% を超えた場合にいつでもメールが届くように CloudWatch でアラームを設定できます。 以下のトピックでは、CloudWatch を使用してアラームを設定する方法の概要について説明します。 手順の詳細については、「Amazon CloudWatch ユーザーガイド」の「Using CloudWatch」を参照し てください。 CloudWatch コンソールを使用してアラームを設定する 1. https://console.aws.amazon.com/cloudwatch/にある CloudWatch コンソールを開きます。 2. [Create Alarm] を選択します。これにより、[Create Alarm Wizard] が起動します。 3. [EMR Metrics] を選択し、Amazon EMR メトリックスをスクロールして、アラームを設定するメ トリックスを見つけます。このダイアログボックスに Amazon EMR メトリクスだけを表示する には、クラスターのクラスター識別子で検索すると簡単に表示できます。アラームを作成する [] ] メトリックスを選択し、[Next] をクリックします。 4. [Name]、[Description]、[Threshold]、[Time] のそれぞれにメトリクスの値を入力します。 5. CloudWatch が必要な場合、アラーム状態に達したときメールを送信するために、[Whenever this alarm:] フィールドで、[State is ALARM] を選択します。[Send notification to:] で、既存の SNS ト ピックを選択します。[Create topic] を選択すると、新しいメールサブスクリプションリスト用の 名前とメールアドレスを設定できます。このリストは保存され、今後のアラーム用のフィールド に表示されます。 Note [Create Topic] を使用して新しい Amazon SNS トピックを作成する場合、メールアド レスを検証しなければ、そのアドレスで通知を受け取ることができません。メールは、 アラームがアラーム状態になったときにのみ送信されます。アラーム状態になったとき に、メールアドレスの検証がまだ完了していない場合は、そのアドレスで通知を受け取 ることはできません。 6. この時点で、[Define Alarm] 画面で、作成するアラームを確認できます。[Create Alarm] を選択し ます。 Note CloudWatch コンソールを使用してアラームを設定する方法の詳細については、「Amazon CloudWatch ユーザーガイド」の「Create an Alarm that Sends Email」を参照してください。 CloudWatch API を使用してアラームを設定するには • mon-put-metric-alarm を呼び出します。詳細については、「Amazon CloudWatch ユーザー ガイド」を参照してください。 CloudWatch API を使用してアラームを設定するには • PutMetricAlarm を呼び出します。詳細については、「Amazon CloudWatch API リファレン ス」を参照してください。 CloudWatch における Amazon EMR によるメトリクスのレポート 以下の表は、Amazon EMR がコンソールでレポートし、CloudWatch にプッシュするすべてのメト リックスを示しています。 440 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Amazon EMR メトリクス Amazon EMR は、複数のメトリクスのデータを CloudWatch に送信します。すべての Amazon EMR クラスターが、5 分ごとにメトリクスを自動送信します。2 週間分のメトリクスがアーカイブされ、 その期間が経過したデータは破棄されます。 The AWS/ElasticMapReduce namespace includes the following metrics. Note Amazon EMR pulls metrics from a クラスター. If a クラスター becomes unreachable, no metrics are reported until the クラスター becomes available again. The following are Hadoop 1 metrics: Metric Description Cluster Status IsIdle Indicates that a クラスター is no longer performing work, but is still alive and accruing charges. It is set to 1 if no tasks are running and no jobs are running, and set to 0 otherwise. This value is checked at five-minute intervals and a value of 1 indicates only that the クラスター was idle when checked, not that it was idle for the entire five minutes. To avoid false positives, you should raise an alarm when this value has been 1 for more than one consecutive 5-minute check. For example, you might raise an alarm on this value if it has been 1 for thirty minutes or longer. Use case: Monitor クラスター performance Units: Boolean JobsRunning The number of jobs in the cluster that are currently running. Use case: Monitor クラスター health Units: Count JobsFailed The number of jobs in the cluster that have failed. Use case: Monitor クラスター health Units: Count Map/Reduce MapTasksRunning The number of running map tasks for each job. If you have a scheduler installed and multiple jobs running, multiple graphs are generated. Use case: Monitor クラスター progress Units: Count MapTasksRemaining The number of remaining map tasks for each job. If you have a scheduler installed and multiple jobs running, multiple graphs are generated. A remaining map task is one that is not in any of the following states: Running, Killed, or Completed. 441 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description Use case: Monitor クラスター progress Units: Count MapSlotsOpen The unused map task capacity. This is calculated as the maximum number of map tasks for a given cluster, less the total number of map tasks currently running in that cluster. Use case: Analyze クラスター performance Units: Count RemainingMapTasksPerSlot The ratio of the total map tasks remaining to the total map slots available in the cluster. Use case: Analyze クラスター performance Units: Ratio ReduceTasksRunning The number of running reduce tasks for each job. If you have a scheduler installed and multiple jobs running, multiple graphs are generated. Use case: Monitor クラスター progress Units: Count ReduceTasksRemaining The number of remaining reduce tasks for each job. If you have a scheduler installed and multiple jobs running, multiple graphs are generated. Use case: Monitor クラスター progress Units: Count ReduceSlotsOpen Unused reduce task capacity. This is calculated as the maximum reduce task capacity for a given cluster, less the number of reduce tasks currently running in that cluster. Use case: Analyze クラスター performance Units: Count Node Status CoreNodesRunning The number of core nodes working. Data points for this metric are reported only when a corresponding instance group exists. Use case: Monitor クラスター health Units: Count CoreNodesPending The number of core nodes waiting to be assigned. All of the core nodes requested may not be immediately available; this metric reports the pending requests. Data points for this metric are reported only when a corresponding instance group exists. Use case: Monitor クラスター health Units: Count 442 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description LiveDataNodes The percentage of data nodes that are receiving work from Hadoop. Use case: Monitor クラスター health Units: Percent TaskNodesRunning The number of task nodes working. Data points for this metric are reported only when a corresponding instance group exists. Use case: Monitor クラスター health Units: Count TaskNodesPending The number of core nodes waiting to be assigned. All of the task nodes requested may not be immediately available; this metric reports the pending requests. Data points for this metric are reported only when a corresponding instance group exists. Use case: Monitor クラスター health Units: Count LiveTaskTrackers The percentage of task trackers that are functional. Use case: Monitor クラスター health Units: Percent IO S3BytesWritten The number of bytes written to Amazon S3. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes S3BytesRead The number of bytes read from Amazon S3. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes HDFSUtilization The percentage of HDFS storage currently used. Use case: Analyze クラスター performance Units: Percent HDFSBytesRead The number of bytes read from HDFS. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes 443 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description HDFSBytesWritten The number of bytes written to HDFS. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes MissingBlocks The number of blocks in which HDFS has no replicas. These might be corrupt blocks. Use case: Monitor クラスター health Units: Count TotalLoad The total number of concurrent data transfers. Use case: Monitor クラスター health Units: Count HBase BackupFailed Whether the last backup failed. This is set to 0 by default and updated to 1 if the previous backup attempt failed. This metric is only reported for HBase クラスターs. Use case: Monitor HBase backups Units: Count MostRecentBackupDuration The amount of time it took the previous backup to complete. This metric is set regardless of whether the last completed backup succeeded or failed. While the backup is ongoing, this metric returns the number of minutes after the backup started. This metric is only reported for HBase クラスターs. Use case: Monitor HBase Backups Units: Minutes TimeSinceLastSuccessfulBackup The number of elapsed minutes after the last successful HBase backup started on your cluster. This metric is only reported for HBase クラスターs. Use case: Monitor HBase backups Units: Minutes The following metrics are available for Hadoop 2 AMIs: Metric Description Cluster Status 444 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description IsIdle Indicates that a クラスター is no longer performing work, but is still alive and accruing charges. It is set to 1 if no tasks are running and no jobs are running, and set to 0 otherwise. This value is checked at five-minute intervals and a value of 1 indicates only that the クラスター was idle when checked, not that it was idle for the entire five minutes. To avoid false positives, you should raise an alarm when this value has been 1 for more than one consecutive 5-minute check. For example, you might raise an alarm on this value if it has been 1 for thirty minutes or longer. Use case: Monitor クラスター performance Units: Boolean ContainerAllocated The number of resource containers allocated by the ResourceManager. Use case: Monitor クラスター progress Units: Count ContainerReserved The number of containers reserved. Use case: Monitor クラスター progress Units: Count ContainerPending The number of containers in the queue that have not yet been allocated. Use case: Monitor クラスター progress Units: Count AppsCompleted The number of applications submitted to YARN that have completed. Use case: Monitor クラスター progress Units: Count AppsFailed The number of applications submitted to YARN that have failed to complete. Use case: Monitor クラスター progress, Monitor クラスター health Units: Count AppsKilled The number of applications submitted to YARN that have been killed. Use case: Monitor クラスター progress, Monitor クラスター health Units: Count 445 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description AppsPending The number of applications submitted to YARN that are in a pending state. Use case: Monitor クラスター progress Units: Count AppsRunning The number of applications submitted to YARN that are running. Use case: Monitor クラスター progress Units: Count AppsSubmitted The number of applications submitted to YARN. Use case: Monitor クラスター progress Units: Count Node Status CoreNodesRunning The number of core nodes working. Data points for this metric are reported only when a corresponding instance group exists. Use case: Monitor クラスター health Units: Count CoreNodesPending The number of core nodes waiting to be assigned. All of the core nodes requested may not be immediately available; this metric reports the pending requests. Data points for this metric are reported only when a corresponding instance group exists. Use case: Monitor クラスター health Units: Count LiveDataNodes The percentage of data nodes that are receiving work from Hadoop. Use case: Monitor クラスター health Units: Percent MRTotalNodes The number of nodes presently available to MapReduce jobs. Use ase: Monitor クラスター progress Units: Count MRActiveNodes The number of nodes presently running MapReduce tasks or jobs. Use case: Monitor クラスター progress Units: Count 446 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description MRLostNodes The number of nodes allocated to MapReduce that have been marked in a LOST state. Use case: Monitor クラスター health, Monitor クラスター progress Units: Count MRUnhealthyNodes The number of nodes available to MapReduce jobs marked in an UNHEALTHY state. Use case: Monitor クラスター progress Units: Count MRDecommissionedNodes The number of nodes allocated to MapReduce applications that have been marked in a DECOMMISSIONED state. Use ase: Monitor クラスター health, Monitor クラスター progress Units: Count MRRebootedNodes The number of nodes available to MapReduce that have been rebooted and marked in a REBOOTED state. Use case: Monitor クラスター health, Monitor クラスター progress Units: Count IO S3BytesWritten The number of bytes written to Amazon S3. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes S3BytesRead The number of bytes read from Amazon S3. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes HDFSUtilization The percentage of HDFS storage currently used. Use case: Analyze クラスター performance Units: Percent HDFSBytesRead The number of bytes read from HDFS. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes 447 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description HDFSBytesWritten The number of bytes written to HDFS. Use case: Analyze クラスター performance, Monitor クラス ター progress Units: Bytes MissingBlocks The number of blocks in which HDFS has no replicas. These might be corrupt blocks. Use case: Monitor クラスター health Units: Count CorruptBlocks The number of blocks that HDFS reports as corrupted. Use case: Monitor クラスター health Units: Count TotalLoad The total number of concurrent data transfers. Use case: Monitor クラスター health Units: Count MemoryTotalMB The total amount of memory in the cluster. Use case: Monitor クラスター progress Units: Bytes MemoryReservedMB The amount of memory reserved. Use case: Monitor クラスター progress Units: Bytes MemoryAvailableMB The amount of memory available to be allocated. Use case: Monitor クラスター progress Units: Bytes MemoryAllocatedMB The amount of memory allocated to the cluster. Use case: Monitor クラスター progress Units: Bytes PendingDeletionBlocks The number of blocks marked for deletion. Use case: Monitor クラスター progress, Monitor クラスター health Units: Count 448 Amazon EMR 開発者ガイド イベントとメトリックスを使用し て、クラスターをモニタリングする Metric Description UnderReplicatedBlocks The number of blocks that need to be replicated one or more times. Use case: Monitor クラスター progress, Monitor クラスター health Units: Count DfsPendingReplicationBlocks The status of block replication: blocks being replicated, age of replication requests, and unsuccessful replication requests. Use case: Monitor クラスター progress, Monitor クラスター health Units: Count CapacityRemainingGB The amount of remaining HDFS disk capacity. Use case: Monitor クラスター progress, Monitor クラスター health Units: Bytes HBase HbaseBackupFailed Whether the last backup failed. This is set to 0 by default and updated to 1 if the previous backup attempt failed. This metric is only reported for HBase クラスターs. Use case: Monitor HBase backups Units: Count MostRecentBackupDuration The amount of time it took the previous backup to complete. This metric is set regardless of whether the last completed backup succeeded or failed. While the backup is ongoing, this metric returns the number of minutes after the backup started. This metric is only reported for HBase クラスターs. Use case: Monitor HBase Backups Units: Minutes TimeSinceLastSuccessfulBackup The number of elapsed minutes after the last successful HBase backup started on your cluster. This metric is only reported for HBase クラスターs. Use case: Monitor HBase backups Units: Minutes Amazon EMR メトリクスのディメンション Amazon EMR データは、次の表のいずれかのディメンションを使用してフィルタリングできます。 449 Amazon EMR 開発者ガイド AWS CloudTrail での Amazon EMR API 呼び出しのログ作成 Dimension Description ClusterId/JobFlowId The identifier for a クラスター. You can find this value by clicking on the クラスター in the Amazon EMR console. It takes the form j-XXXXXXXXXXXXX. JobId The identifier of a job within a クラスター. You can use this to filter the metrics returned from a クラスター down to those that apply to a single job within the クラスター. JobId takes the form job_XXXXXXXXXXXX_XXXX. AWS CloudTrail での Amazon EMR API 呼び出しの ログ作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は AWS CloudTrail と統合されています。AWS CloudTrail は、お客様の AWS アカウ ントまたはその代理によって行われた API 呼び出しをキャプチャするサービスです。この情報が集 められ、指定した Amazon S3 バケットに保存されるログファイルに書き込まれます。API 呼び出し は、Amazon EMR API、Amazon EMR コンソール、バックエンドコンソール、AWS CLI の使用時に 記録されます。CloudTrail によって収集された情報を使用して、Amazon EMR に対してどのようなリ クエストが行われたかを判断することができます。リクエストの作成元のソース IP アドレス、リクエ ストの実行者、リクエストの実行日時などです。 CloudTrail を設定して有効にする方法など、CloudTrail の詳細については、AWS CloudTrail User Guide を参照してください。 トピック • CloudTrail 内の Amazon EMR 情報 (p. 450) • Amazon EMR ログファイルエントリの概要 (p. 451) CloudTrail 内の Amazon EMR 情報 CloudTrail ログ作成をオンにすると、すべての Amazon EMR アクションに対して行われた呼び出し が、ログファイルにキャプチャされます。Amazon EMR アクションはすべて、『Amazon EMR API Reference』に記載されています。たとえば、ListClusters、DescribeCluster、および RunJobFlow ア クションへの呼び出しによって、CloudTrail ログファイルにエントリが生成されます。 各ログエントリには、誰がリクエストを生成したかに関する情報が含まれます。たとえば、新しい ジョブフロー(RunJobFlow)を作成および実行するリクエストが行われた場合、CloudTrail はリク エストをした人またはサービスのユーザー ID をログに記録します。ユーザー ID 情報は、リクエスト が、ルートまたは IAM ユーザーの認証情報を使用して送信されたか、ロールまたはフェデレーション ユーザーの一時的な認証情報を使用して送信されたか、あるいは別の AWS サービスによって送信さ れたかを確認するのに役立ちます。CloudTrail フィールドの詳細については、『AWS CloudTrail User Guide』の「CloudTrail イベントリファレンス」を参照してください。 必要な場合はログファイルを自身のバケットに保管できますが、ログファイルを自動的にアーカイブ または削除するにように Amazon S3 ライフサイクルルールを定義することもできます。デフォルト では Amazon S3 のサーバー側の暗号化 (SSE) を使用して、ログファイルが暗号化されます。 450 Amazon EMR 開発者ガイド AWS CloudTrail での Amazon EMR API 呼び出しのログ作成 Amazon EMR ログファイルエントリの概要 CloudTrail ログファイルには、複数の JSON フォーマットされたイベントから成る、1 つ以上のログ エントリを含めることができます。ログエントリは任意の送信元からの単一のリクエストを表し、リ クエストされたアクション、入力パラメーター、アクションの日時などに関する情報が含まれます。 ログエントリは、特定の順序で表示されません。つまり、パブリック API 呼び出しの順序付けたス タック トレースを表しません。 次のログファイルレコードは、IAM ユーザーが SDK を使用して RunJobFlow アクションを呼び出し たことを示しています。 { "Records": [ { "eventVersion":"1.01", "userIdentity":{ "type":"IAMUser", "principalId":"EX_PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/temporary-user-xx-7M", "accountId":"123456789012", "accessKeyId":"EXAMPLE_KEY_ID", "userName":"temporary-user-xx-7M" }, "eventTime":"2014-03-31T17:59:21Z", "eventSource":"elasticmapreduce.amazonaws.com", "eventName":"RunJobFlow", "awsRegion":"us-east-1", "sourceIPAddress":"127.0.0.1", "userAgent":"aws-sdk-java/unknown-version Linux/xx Java_HotSpot(TM)_64-Bit_Server_VM/xx", "requestParameters":{ "tags":[ { "value":"prod", "key":"domain" }, { "value":"us-east-1", "key":"realm" }, { "value":"VERIFICATION", "key":"executionType" } ], "instances":{ "slaveInstanceType":"m1.large", "ec2KeyName":"emr-integtest", "instanceCount":1, "masterInstanceType":"m1.large", "keepJobFlowAliveWhenNoSteps":true, "terminationProtected":false }, "visibleToAllUsers":false, "name":"Integ 1xm1large", "amiVersion":"3.0.4" }, 451 Amazon EMR 開発者ガイド Ganglia でパフォーマンスをモニタリングする "responseElements":{ "jobFlowId":"j-2WDJCGEG4E6AJ" }, "requestID":"2f482daf-b8fe-11e3-89e7-75a3d0e071c5", "eventID":"b348a38d-f744-4097-8b2a-e68c9b424698" }, ...additional entries ] } Ganglia でパフォーマンスをモニタリングする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Ganglia オープンソースプロジェクトは拡張可能な分散システムで、パフォーマンスへの影響を最小 限に抑えながら、クラスターやグリッドをモニタリングできるように設計されています。クラスター で Ganglia を有効にすると、レポートを生成し、クラスター全体のパフォーマンスを表示するだけで なく、個別のノードインスタンスのパフォーマンスを調べることができます。Ganglia オープンソー スプロジェクトの詳細については、http://ganglia.info/ を参照してください。 トピック • クラスターに Ganglia を追加する (p. 452) • Ganglia メトリクスを表示する (p. 453) • Ganglia レポート (p. 453) • Ganglia での Hadoop と Spark のメトリクス (p. 458) クラスターに Ganglia を追加する コンソールを使用してクラスターに Ganglia を追加するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Additional Applications ] リストで、[Ganglia] を選択し、[Configure and add] を選択します。 4. 適切な設定でクラスターの作成を進めます。 AWS CLI を使用してクラスターに Ganglia を追加するには AWS CLI で、create-cluster サブコマンドを --applications パラメーターと共に使用し て、Ganglia をクラスターに追加できます。これにより、--bootstrap-action パラメーターを不要 にするブートストラップアクションを使用して Ganglia がインストールされます。--applications パラメーターを使用して Ganglia のみを指定する場合、Ganglia が、インストールされる唯一のアプ リケーションです。 • クラスターを作成するときに、次のコマンドを入力して Ganglia を追加し、myKey を EC2 キー ペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 -applications Name=Hue Name=Ganglia Name=Hive Name=Pig \ 452 Amazon EMR 開発者ガイド Ganglia でパフォーマンスをモニタリングする --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 -applications Name=Hue Name=Ganglia Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-type m3.xlarge -instance-count 3 --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Ganglia メトリクスを表示する Ganglia には、ウェブベースのユーザーインターフェイスが用意されており、Ganglia が収集するメ トリクスは、このインターフェイスを使用して表示できます。Amazon EMR で Ganglia を実行すると き、ウェブインターフェイスはマスターノードで実行され、ポート転送を使用して表示できます。こ れは、SSH トンネルの作成とも呼ばれます。Amazon EMR のウェブインターフェイスの表示の詳細 については、『Amazon EMR 管理ガイド』の「。 Ganglia のウェブインターフェイスを表示するには 1. SSH を使用してマスターノードにトンネル接続し、安全な接続を確立します。マスターノード への SSH トンネルの作成方法の詳細については、『Amazon EMR 管理ガイド』の「オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマスターノードへの SSH トンネル をセットアップする (p. 469)。 2. プロキシツールを備えたウェブブラウザ(FoxyProxy プラグインがある Firefox など)をインス トールし、タイプ *ec2*.amazonaws.com* のドメイン向け SOCKS プロキシを作成します。詳細 については、『Amazon EMR 管理ガイド』の「オプション 2、パート 2: マスターノードでホス トされるウェブサイトを表示するようにプロキシを設定する (p. 472)。 3. プロキシセットと SSH 接続が開いている場合、Ganglia UI を表示するには、ブラウザウィン ドウで http://master-public-dns-name/ganglia/ を開きます。master-public-dns-name は、EMR クラスター内にあるマスターサーバーのパブリック DNS アドレスです。 Ganglia レポート ブラウザで Ganglia ウェブレポートを開くと、クラスターのパフォーマンスの概要が表示されます。 これらのレポートには、クラスターのロード、メモリの使用状況、CPU 使用率、ネットワークトラ フィックなどがグラフで詳しく示されています。クラスターの統計情報の下には、クラスター内の個 別のサーバーごとにグラフがあります。前述のクラスターの作成例では、3 つのインスタンスを起動 したので、次のレポートには 3 つのインスタンスグラフがあり、クラスターデータを示しています。 453 Amazon EMR 開発者ガイド Ganglia でパフォーマンスをモニタリングする 454 Amazon EMR 開発者ガイド Ganglia でパフォーマンスをモニタリングする ノードインスタンスのデフォルトのグラフは Load ですが、[Metric] リストを使用すると、ノードイン スタンスグラフで表示される統計を変更できます。 455 Amazon EMR 開発者ガイド Ganglia でパフォーマンスをモニタリングする 指定したインスタンスの統計の完全セットにドリルダウンするには、リストからノードを選択する か、対応するノードインスタンスグラフを選択します。 456 Amazon EMR 開発者ガイド Ganglia でパフォーマンスをモニタリングする これにより、ノードの [Host Overview] ページが開きます。 457 Amazon EMR 開発者ガイド クラスターに接続する 下にスクロールすると、インスタンスで収集された統計の全範囲のグラフを確認できます。 Ganglia での Hadoop と Spark のメトリクス Ganglia は、各インスタンスに対して Hadoop メトリクスをレポートします。さまざまなタイプのメ トリクスの先頭には、カテゴリごとにプレフィックスが付いています。例えば、分散ファイルシステ ムの場合は dfs.*、Java 仮想マシンの場合は jvm.*、MapReduce の場合は mapred.*、そしてリモート プロシージャコールの場合は rpc.* です。 通常、Spark の Ganglia メトリクスには YARN アプリケーション ID および Spark DAGScheduler 用 のプレフィックスがあります。したがって、プレフィックスは次の形式になります。 • DAGScheduler.* • application_xxxxxxxxxx_xxxx.driver.* • application_xxxxxxxxxx_xxxx.executor.* これらのメトリクスの一覧を表示するには、[Host Overview] ページで [Gmetrics] リンクを選択しま す。 クラスターに接続する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR クラスターを実行する場合、通常、必要な作業は、データを分析するアプリケーション を実行し、Amazon S3 バケットからの出力を収集することだけです。また、クラスターの実行中にマ スターノードを操作することもできます。たとえば、マスターノードに接続することによって、イン タラクティブクエリの実行、ログファイルの確認、クラスターの問題のデバッグ、などを実行できま す。以降のセクションでは、マスターノードに接続する手法について説明します。 EMR クラスターでは、マスターノードは、タスクノードおよびコアノードとして実行される EC2 イ ンスタンスを調整する Amazon EC2 インスタンスです。マスターノードは、自身への接続に使用でき るパブリック DNS 名を公開しています。デフォルトでは、ノードへのアクセス方法を決定する、マ スターノードとスレーブノードのセキュリティグループのルールは、Amazon EMR で作成されます。 458 Amazon EMR 開発者ガイド SSH を使用してマスターノードに接続する たとえば、マスターノードのセキュリティグループには、TCP ポート 22 で SSH クライアントを使用 してマスターノードに接続することを許可するルールが含まれています。 Note マスターノードには、クラスターの実行中にしか接続できません。クラスターが終了する と、マスターノードとして動作している EC2 インスタンスも終了し、使用できなくなりま す。マスターノードに接続するには、クラスターを起動するときに Amazon EC2 キーペア のプライベートキーを指定する必要があります。キーペアのプライベートキーは、マスター ノードへの SSH 接続のための認証情報を提供します。コンソールからクラスターを起動する 場合、Amazon EC2 キーペアのプライベートキーは、[Create Cluster] ページの [Security and Access] セクションで指定されます。 デフォルトでは、ElasticMapReduce-master セキュリティグループは、CIDR 範囲 0.0.0.0/0 からのイ ンバウンド SSH アクセスを許可します。これにより、適切な認証情報を使用して、任意の IP アドレ スから TCP ポート 22 で SSH 接続を行うことができます。ご使用の環境に合わせて、特定の IP ア ドレスまたはアドレス範囲を指定することにより、このルールを制限できます。セキュリティグルー プのルールの変更の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「セ キュリティグループへのルールの追加」を参照してください。 Important ElasticMapReduce-master セキュリティグループの他のルールは変更しないでください。こ れらのルールを変更すると、クラスターのオペレーションに悪影響を及ぼす可能性がありま す。 トピック • SSH を使用してマスターノードに接続する (p. 459) • Amazon EMR クラスターでホストされているウェブサイトの表示 (p. 464) SSH を使用してマスターノードに接続する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 セキュアシェル(SSH)とは、リモートコンピュータとの安全な接続を確立するために使用でき るネットワークプロトコルです。 接続後、ローカルコンピュータ上のターミナルは、リモートコ ンピュータで実行されているかのように動作します。ローカルで発行したコマンドがリモートコン ピュータで実行され、リモートコンピュータからのコマンドの出力はターミナルウィンドウに表示さ れます。 AWS で SSH を使用する場合は、クラウドで実行される仮想サーバーである EC2 インスタンスに接 続します。SSH を Amazon EMR で使用する場合の最も一般的な使い方は、クラスターのマスター ノードとして動作する EC2 インスタンスに接続するというものです。 SSH を使用してマスターノードに接続すると、クラスターを監視し、操作できます。マスターノード で Linux コマンドを発行し、 Hive と Pig などのアプリケーションのインタラクティブな実行、ディ レクトリの参照、ログファイルの読み取りなどを行うことができます。SSH 接続にトンネルを作成し て、マスターノードでホストされるウェブインターフェイスを表示することもできます。詳細につい ては、「Amazon EMR クラスターでホストされているウェブサイトの表示 (p. 464)」を参照してく ださい。 SSH を使用してマスターノードに接続するには、マスターノードのパブリック DNS 名と Amazon EC2 キーペアのプライベートキーが必要です。Amazon EC2 キーペアのプライベートキーは、クラス ターを起動するときに指定されます。コンソールからクラスターを起動する場合、Amazon EC2 キー 459 Amazon EMR 開発者ガイド SSH を使用してマスターノードに接続する ペアのプライベートキーは、[Create Cluster] ページの [Security and Access] セクションで指定され ます。キーペアへのアクセスの詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイ ド』の「Amazon EC2 キーペア」を参照してください。 マスターノードのパブリック DNS 名の取得 マスターパブリック DNS 名は、Amazon EMR コンソールと AWS CLI を使用して取得できます。 Amazon EMR コンソールを使用して、マスターノードのパブリック DNS 名を取得するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. 3. [Cluster List] ページで、クラスターのリンクを選択します。 [Cluster Details] ページの上部に表示される [Master public DNS] の値を書き留めます。 Note マスターパブリック DNS 名の横にある [SSH] リンクを選択して、マスターノードへの SSH 接続を作成する手順を表示することもできます。 AWS CLI を使用して、マスターノードのパブリック DNS 名を取得するには 1. クラスター識別子を取得するには、次のコマンドを入力します。 aws emr list-clusters 出力には、クラスター ID を含むクラスターのリストが表示されます。接続しているクラスターの クラスター ID を書き留めます。 "Status": { 460 Amazon EMR 開発者ガイド SSH を使用してマスターノードに接続する "Timeline": { "ReadyDateTime": 1408040782.374, "CreationDateTime": 1408040501.213 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "NormalizedInstanceHours": 4, "Id": "j-2AL4XXXXXX5T9", "Name": "My cluster" 2. クラスターのマスターパブリック DNS 名を含むクラスターインスタンスのリストを表示するに は、次のいずれかのコマンドを入力します。j-2AL4XXXXXX5T9 の部分を、前のコマンドで返さ れたクラスター ID に置き換えてください。 aws emr list-instances --cluster-id j-2AL4XXXXXX5T9 または: aws emr describe-cluster --cluster-id j-2AL4XXXXXX5T9 出力には、DNS 名と IP アドレスを含むクラスターインスタンスのリストが表示されま す。PublicDnsName の値を書き留めます。 "Status": { "Timeline": { "ReadyDateTime": 1408040779.263, "CreationDateTime": 1408040515.535 }, "State": "RUNNING", "StateChangeReason": {} }, "Ec2InstanceId": "i-e89b45e7", "PublicDnsName": "ec2-###-##-##-###.us-west-2.compute.amazonaws.com" "PrivateDnsName": "ip-###-##-##-###.us-west-2.compute.internal", "PublicIpAddress": "##.###.###.##", "Id": "ci-12XXXXXXXXFMH", "PrivateIpAddress": "###.##.#.###" 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 Linux、Unix、Mac OS X で SSH を使用してマスターノードに 接続する ほとんどの場合、Linux コンピュータにはデフォルトで SSH クライアントがあります。たとえば、ほ とんどの Linux、Unix、および Mac OS X オペレーティングシステムには OpenSSH がインストール されています。SSH クライアントがあるかどうかを確認するには、コマンドラインで ssh と入力し ます。ご使用のコンピュータでこのコマンドが認識されない場合、マスターノードに接続するために SSH クライアントをインストールする必要があります。OpenSSH プロジェクトが、SSH ツールの完 全なスイートの無料実装を提供しています。詳細については、OpenSSH のウェブサイトを参照して ください。 461 Amazon EMR 開発者ガイド SSH を使用してマスターノードに接続する 以下の手順では、Linux、Unix、および Mac OS X で、Amazon EMR マスターノードへの SSH 接続を 開く方法を示します。 キーペアのプライベートキーのファイルアクセス許可を設定するには Amazon EC2 キーペアのプライベートキーを使用して SSH 接続を作成する前に、キー所有者のみが ファイルへのアクセス権限を持つように、.pem ファイルに対するアクセス許可を設定しておく必要が あります。これは、ターミナルまたは AWS CLI を使用して SSH 接続を作成するために必要です。 1. .pem ファイルを見つけます。この手順では、ファイル名が mykeypair.pem であり、現在の ユーザーのホームディレクトリに保存されていることを想定しています。 2. 次のコマンドを入力してアクセス許可を設定します。~/mykeypair.pem の部分を、キーペアの プライベートキーファイルの場所とファイル名に置き換えてください。 chmod 400 ~/mykeypair.pem .pem ファイルに対するアクセス許可を設定していない場合、キーファイルが保護されておらず、 キーが拒否されることを示すエラーが表示されます。接続するためにキーペアのプライベート キーファイルに対するアクセス許可を設定する必要があるのは、このファイルを最初に使用する ときだけです。 ターミナルを使用してマスターノードに接続するには 1. ターミナルウィンドウを開きます。Mac OS X で、[Applications] > [Utilities] > [Terminal] を 選択します。他の Linux ディストリビューションでは、ターミナルは通常、[Applications] > [Accessories] > [Terminal] にあります。 2. マスターノードへの接続を確立するには、次のコマンドを入力します。ec2-###-##-#####.compute-1.amazonaws.com はクラスターのマスターパブリック DNS 名に、~/ mykeypair.pem は .pem ファイルの場所とファイル名に置き換えてください。 ssh hadoop@ec2-###-##-##-###.compute-1.amazonaws.com -i ~/mykeypair.pem Important Amazon EMR master node; に接続するときには、ログイン名 hadoop を使用する必要が あります。このログイン名を使用しない場合、「Server refused our key」などのエ ラーが表示されることがあります。 3. 警告は、接続先ホストの正当性を検証できないことを示しています。 yes を入力して、操作を続 けます。 4. マスターノードに対する操作が終了したら、次のコマンドを入力して SSH 接続を閉じます。 exit AWS CLI を使用したマスターノードへの接続 Windows でも、Linux、Unix、および Mac OS X でも、AWS CLI を使用してマスターノードへの SSH 接続を作成できます。プラットフォームに関係なく、マスターノードのパブリック DNS 名 と、Amazon EC2 キーペアのプライベートキーが必要です。Linux、Unix、Mac OS X などで AWS CLI を使用している場合は、「キーペアのプライベートキーのファイルアクセス許可を設定するに は (p. 462)」に示されているように、プライベートキー(.pem または .ppk)ファイルに対するア クセス権限も設定する必要があります。 462 Amazon EMR 開発者ガイド SSH を使用してマスターノードに接続する AWS CLI を使用してマスターノードに接続するには 1. クラスター識別子を取得するには、次のように入力します。 aws emr list-clusters 出力には、クラスター ID を含むクラスターのリストが表示されます。接続しているクラスターの クラスター ID を書き留めます。 "Status": { "Timeline": { "ReadyDateTime": 1408040782.374, "CreationDateTime": 1408040501.213 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "NormalizedInstanceHours": 4, "Id": "j-2AL4XXXXXX5T9", "Name": "AWS CLI cluster" 2. マスターノードへの SSH 接続を開くには、次のコマンドを入力します。次の例 で、j-2AL4XXXXXX5T9 をクラスター ID に、~/mykeypair.key を .pem ファイル (Linux、Unix、および Mac OS X の場合)または .ppk ファイル(Windows の場合)の場所と ファイル名に置き換えてください。 aws emr ssh --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key 3. マスターノードに対する操作が終了したら、AWS CLI ウィンドウを閉じます。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 Windows で SSH を使用してマスターノードに接続する Windows ユーザーの場合は、PuTTY などの SSH クライアントを使用して、マスターノードに接続で きます。Amazon EMR マスターノードに接続する前に、PuTTY および PuTTYgen をダウンロードし てインストールする必要があります。これらのツールは、PuTTY ダウンロードページからダウンロー ドできます。 PuTTY は、Amazon EC2 によって生成されるプライベートキー形式(.pem)をネイティブにサポー トしていません。PuTTYgen を使用して、キーファイルを必要な PuTTY 形式(.ppk)に変換しま す。PuTTY を使用してマスターノードへの接続を試みる前に、キーをこの形式(.ppk)に変換する 必要があります。 キーの変換の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「PuTTYgen を使用したプライベートキーの変換」を参照してください。 PuTTY を使用してマスターノードに接続するには 1. putty.exe を開きます。Windows のプログラムの一覧から PuTTY を起動することもできます。 2. 必要に応じて、[Category] リストで、[Session] を選択します。 463 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 3. [ Host Name (or IP address)] に、「hadoop@MasterPublicDNS」と入力します。たとえば、 「hadoop@ec2-###-##-##-###.compute-1########amazonaws.com を提供するようになり ました。 4. [Category] リストで、[Connection]、[SSH] の順に選択し、[Auth] を選択します。 5. [Private key file for authentication] では、[Browse] をクリックし、以前に生成した .ppk ファイル を選択します。 6. [Open] を選択し、[Yes] をクリックして PuTTY セキュリティ警告を閉じます。 Important マスターノードにログインするときに、ユーザー名の入力を求められた場合は、 「hadoop」と入力します。 7. マスターノードに対する操作が終了したら、PuTTY を閉じることによって SSH 接続を閉じるこ とができます。 Note SSH 接続のタイムアウト防止には、[Category] リストで [Connection] をクリックし、 [Enable TCP_keepalives] オプションを選択します。PuTTY でアクティブな SSH セッ ションがある場合は、PuTTY のコンテキストを開いて (右クリック)、[Change Settings] を選択することによって設定を変更できます。 Amazon EMR クラスターでホストされているウェ ブサイトの表示 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR クラスターにインストールする Hadoop やその他のアプリケーションは、マスターノー ドでホストされるウェブサイトとしてユーザーインターフェイスを公開します。セキュリティ上の 理由から、これらのウェブサイトはマスターノードのローカルウェブサーバーでのみ利用でき、イ ンターネット経由で一般に利用することはできません。Hadoop は、コアおよびタスク(スレーブ) ノードとしてホストされるウェブサイトとしてもユーザーインターフェイスを公開します。これらの ウェブサイトも、ノードのローカルウェブサーバーでのみ利用できます。 次の表は、マスターノードで表示できるウェブインターフェイスを示しています。Hadoop インター フェイスは、すべてのクラスターで使用できます。Ganglia や HBase など、その他のウェブインター フェイスは、クラスターに追加のアプリケーションをインストールした場合にのみ利用できます。以 下のインターフェイスにアクセスするには、SSH トンネルを作成した後、URI の master-publicdns-name をマスターノードの DNS 名に置き換えてください。マスターパブリック DNS 名の取 得の詳細については、「マスターノードのパブリック DNS 名の取得 (p. 460)」を参照してくださ い。SSH トンネルの作成の詳細については、「オプション 2、パート 1: ダイナミックポートフォワー ディングを使用してマスターノードへの SSH トンネルをセットアップする (p. 469)」を参照してく ださい。 インターフェイスの名前 URI Hadoop バージョン 2.x Hadoop ResourceManager http://master-public-dns-name:9026/ Hadoop HDFS NameNode http://master-public-dns-name:9101/ 464 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 インターフェイスの名前 URI Ganglia メトリクスレポー ト http://master-public-dns-name/ganglia/ HBase インターフェイス http://master-public-dns-name:60010/master-status Hue ウェブアプリケー ション http://master-public-dns-name:8888/ Impala Statestore http://master-public-dns-name:25000 Impalad http://master-public-dns-name:25010 Impala Catalog http://master-public-dns-name:25020 Hadoop バージョン 1.x Hadoop MapReduce JobTracker http://master-public-dns-name:9100/ Hadoop HDFS NameNode http://master-public-dns-name:9101/ Ganglia メトリクスレポー ト http://master-public-dns-name/ganglia/ HBase インターフェイス http://master-public-dns-name:60010/master-status HBase Thrift http://master-public-dns-name:9000 詳細については、以下を参照してください。 • Ganglia ウェブインターフェイス: Ganglia でパフォーマンスをモニタリングする (p. 452) • Impala ウェブインターフェイス: Impala Web ユーザーインターフェイスへのアクセス (p. 300) • Hue:データの表示、照会、操作に関する Hue の設定 (p. 343) Note Hadoop バージョン 2.x ウェブインターフェイスの設定は、conf/hdfs-site.xml ファイル を編集することによって変更できます。Hadoop バージョン 1.x ウェブインターフェイスの設 定は、conf/hadoop-default.xml ファイルを編集することによって変更できます。 マスターノードで利用できるアプリケーション固有のインターフェイスの中には、コアおよびタスク ノードでは利用できないものもあるため、このドキュメントの手順は Amazon EMR マスターノード に固有です。コアおよびタスクノードのウェブインターフェイスには、マスターノードのウェブイン ターフェイスにアクセスする場合と同じ手順でアクセスできます。 マスターノードのウェブインターフェイスにアクセスするには、いくつかの方法があります。最も簡 単な方法は、SSH を使用してマスターノードに接続し、テキストベースのブラウザ Lynx を使用して SSH クライアントでウェブサイトを表示する方法です。ただし、Lynx はユーザーインターフェイス が制限されたテキストベースのブラウザであり、グラフィックを表示できません。次の例では、Lynx を使用して Hadoop ResourceManager のインターフェイスを開く方法を示します(SSH を使用して マスターノードにログインするときに、Lynx の URL も指定されます)。 lynx http://ip-###-##-##-###.us-west-2.compute.internal:9026/ 465 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 すべてのブラウザ機能を提供する、マスターノードのウェブインターフェイスにアクセスするには、 あと 2 つの方法があります。次のいずれかを選択します。 • オプション 1(技術的知識のあるユーザー向け): SSH クライアントを使用してマスターノードに 接続し、ローカルポートフォワーディングを使って SSH トンネリングを設定します。次に、イン ターネットブラウザを使用してマスターノードでホストされるウェブインターフェイスを開きま す。この方法では、SOCKS プロキシを使用せずに、ウェブインターフェイスへのアクセスを設定 できます。 • オプション 2(新規ユーザー向け): SSH クライアントを使用してマスターノードに接続し、ダイ ナミックポートフォワーディングを使って SSH トンネリングを設定します。次に、FoxyProxy や SwitchySharp などのアドオンを使用して SOCKS プロキシの設定を管理するようにインターネット ブラウザを設定します。この方法では、テキストパターンに基づいて自動的に URL をフィルタリン グし、プロキシの設定をマスターノードの DNS 名の形式に合致するドメインに限定することがで きます。マスターノードでホストされるウェブサイトとインターネットのウェブサイトの表示を切 り替えたときに、ブラウザのアドオンが自動的にプロキシのオンとオフを切り替えます。Firefox お よび Google Chrome 用に FoxyProxy を設定する方法の詳細については、「オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するようにプロキシを設定する (p. 472)」 を参照してください。 トピック • オプション 1: ローカルポートフォワーディングを使用してマスターノードへの SSH トンネルを セットアップする (p. 466) • オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマスターノードへの SSH トンネルをセットアップする (p. 469) • オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するようにプロキシ を設定する (p. 472) • コンソールを使用してマスターノードのウェブインターフェイスにアクセスする (p. 476) オプション 1: ローカルポートフォワーディングを使用してマ スターノードへの SSH トンネルをセットアップする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 マスターノードのローカルウェブサーバーに接続するために、コンピューターとマスターノードの間 には SSH トンネルを作成できます。これはポートフォワーディングとも呼ばれます。SOCKS プロキ シを使用しない場合は、ローカルポートフォワーディングを使用してマスターノードへの SSH トン ネルをセットアップすることができます。ローカルポートフォワーディングでは、トラフィックをマ スターノードのローカルウェブサーバーにある特定のリモートポートに転送するために使用される未 使用のローカルポートを指定します。たとえば、未使用のローカルポート(8157 など)で、マスター ノードの Ganglia ウェブインターフェイス(localhost:80)にトラフィックを転送するように設定でき ます。AMI 3.1.1 以降、マスターノードの Hadoop NameNode および ResourceManager のウェブイ ンターフェイスは、localhost にバインドされなくなりました。これらのインターフェイスについて、 ローカルポートフォワーディングを使用して SSH トンネルをセットアップするには、localhost では なく、マスターパブリック DNS 名を使用します。 ローカルポートフォワーディングを使用して SSH トンネルをセットアップするには、マスターノー ドのパブリック DNS 名と、キーペアのプライベートキーファイルが必要です。マスターパブリック DNS 名を特定する方法については、「Amazon EMR コンソールを使用して、マスターノードのパブ リック DNS 名を取得するには (p. 460)」を参照してください。キーペアへのアクセスの詳細につい ては、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 キーペア」を参照し てください。マスターノード上で表示するサイトの詳細については、「Amazon EMR クラスターでホ ストされているウェブサイトの表示 (p. 464)」を参照してください。 466 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 Linux、Unix、および Mac OS X でローカルポートフォワーディングを使用し てマスターノードへの SSH トンネルをセットアップする ターミナルでローカルポートフォワーディングを使用して SSH トンネルをセットアップする には 1. ターミナルウィンドウを開きます。Mac OS X で、[Applications] > [Utilities] > [Terminal] を 選択します。他の Linux ディストリビューションでは、ターミナルは通常、[Applications] > [Accessories] > [Terminal] にあります。 2. ローカルコンピュータで SSH トンネルを開くには、次のコマンドを入力します。このコ マンドは、ローカルポート 8157(ランダムに選択された未使用のローカルポート)のト ラフィックを、マスターノードのローカルウェブサーバーのポート 80 に転送することに よって、ResourceManager ウェブインターフェイスにアクセスします。コマンドでは、~/ mykeypair.pem を .pem ファイルの場所とファイル名に置き換え、ec2-###-##-#####.compute-1.amazonaws.com をクラスターのマスターパブリック DNS 名に置き換えま す。 ssh -i ~/mykeypair.pem -N -L 8157:ec2-###-##-#####.compute-1.amazonaws.com:9026 hadoop@ec2-###-##-#####.compute-1.amazonaws.com このコマンドを発行すると、ターミナルは開いたままになり、応答を返しません。 Note -L はローカルポートフォワーディングを使用することを示し、マスターノードのローカ ルウェブサーバーの指定されたリモートポートにデータを転送するために使用するロー カルポートを指定できます。 3. ブラウザで ResourceManager ウェブインターフェイスを開くには、アドレスバーに「http:// localhost:8157/」と入力します。 4. NameNode ウェブインターフェイスにアクセスするには、新しいターミナルセッションを起動 し、前のコマンドのポート 80 をポート 9101 に、ポート 8157 をポート 8159(3 番目の未使用の ローカルポート)に置き換えます。以下に例を示します。 ssh -i ~/mykeypair.pem -N -L 8159:ec2-###-##-#####.compute-1.amazonaws.com:9101 hadoop@ec2-###-##-#####.compute-1.amazonaws.com 次に、ブラウザでアドレス「http://localhost:8159/」を入力します。 5. Hue ウェブインターフェイスにアクセスするには、新しいターミナルセッションを起動し、前の コマンドのポート 80 をポート 8888 に、ポート 8157 をポート 8160(4 番目の未使用のローカル ポート)に置き換えます。以下に例を示します。 ssh -i ~/mykeypair.pem -N -L 8160:ec2-###-##-#####.compute-1.amazonaws.com:8888 hadoop@ec2-###-##-#####.compute-1.amazonaws.com 次に、ブラウザでアドレス「http://localhost:8160/」を入力します。 6. マスターノードのウェブインターフェイスに対する操作が終了したら、ターミナルウィンドウを 閉じます。 467 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 Windows でローカルポートフォワーディングを使用してマスターノードへの SSH トンネルをセットアップする PuTTY でローカルポートフォワーディングを使用して SSH トンネルをセットアップするには 1. putty.exe をダブルクリックして PuTTY を起動します。Windows のプログラムの一覧から PuTTY を起動することもできます。 2. 必要に応じて、[Category] リストで、[Session] を選択します。 3. [Host Name (or IP address)] フィールドに、「hadoop@MasterPublicDNS」と入力します。たと えば、「hadoop@ec2-###-##-##-###.compute-1########amazonaws.com を提供するよう になりました。 4. [Category] リストで、[Connection]、[SSH] の順に展開し、[Auth] を選択します。 5. [Private key file for authentication] では、[Browse] をクリックし、以前に生成した .ppk ファイル を選択します。 Note PuTTY は、Amazon EC2 によって生成されるプライベートキー形式(.pem)をネイティ ブにサポートしていません。PuTTYgen を使用して、キーファイルを必要な PuTTY 形式 (.ppk)に変換します。PuTTY を使用してマスターノードへの接続を試みる前に、キー をこの形式(.ppk)に変換する必要があります。 6. [Category] リストで、[Connection]、[SSH] の順に展開し、[Tunnels] を選択します。 7. [Source port] フィールドで、未使用のローカル#####(8157 など)を入力します。 8. ウェブインターフェイスにアクセスするには、[Destination] フィールドに、####:#####を入力 します。たとえば、Ganglia のインターフェイスにアクセスするには、「localhost:80」と入 力します。 9. [Local] オプションと [Auto] オプションは選択されたままにします。 10. [Add] を選択します。[Forwarded ports] ボックスに、L8157 localhost:80 のようなエントリが 表示されます。 11. [Open] を選択し、[Yes] をクリックして PuTTY セキュリティ警告を閉じます。 Important マスターノードにログインするときに、ユーザー名の入力を求められた場合は、 「hadoop」と入力します。 12. マスターノードの Ganglia インターフェイスにアクセスするには、ブラウザのアドレスバーに 「http://localhost:8157/ganglia」と入力します。 13. マスターノードの他のインターフェイスにアクセスするには、ポートごとに新しいトンネルを追 加する必要があります。PuTTY のタイトルバーを右クリックし、[Change Settings] を選択しま す。 14. 次の表を参考にして、前の手順に従って残りのウェブインターフェイス用のトンネルを追加しま す。 インターフェイス ソースポー ト 送信先 Hadoop ResourceManager 8158 master-public-dns-name:9026 Hadoop NameNode 8159 master-public-dns-name:9101 Hue ウェブアプリケーション 8160 master-public-dns-name:8888 468 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 Note AMI 3.1.0 以前では、接続先としてマスターパブリック DNS 名の代わりに localhost を使 用できます。 マスターノードのウェブインターフェイスの詳細なリストについては、「Amazon EMR クラス ターでホストされているウェブサイトの表示 (p. 464)」を参照してください。 15. 新しいトンネルを追加した後、[Apply] を選択します。 16. インターフェイスを開くには、ブラウザのアドレスバーに「localhost:#####」と入 力します。たとえば、ResourceManager のインターフェイスを開くには、「http:// localhost:8158/」と入力します。 Note SOCKS プロキシとダイナミックポートフォワーディングをセットアップすることに よって、複数のトンネルを作成する必要がなくなります。また、後で再利用するために PuTTY セッションの設定を保存することもできます。 17. マスターノードのウェブインターフェイスに対する操作が終了したら、PuTTY ウィンドウを閉じ ます。 オプション 2、パート 1: ダイナミックポートフォワーディン グを使用してマスターノードへの SSH トンネルをセットアッ プする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 マスターノードのローカルウェブサーバーに接続するために、コンピューターとマスターノードの間 には SSH トンネルを作成できます。これはポートフォワーディングとも呼ばれます。ダイナミック ポートフォワーディングを使用して SSH トンネルを作成する場合、指定した未使用のローカルポー トにルーティングされたすべてのトラフィックが、マスターノードのローカルウェブサーバーに転送 されます。これにより、SOCKS プロキシが作成されます。次に、FoxyProxy や SwitchySharp などの アドオンを使用して SOCKS プロキシの設定を管理するようにインターネットブラウザを設定できま す。プロキシ管理アドオンを使用すると、テキストパターンに基づいて自動的に URL をフィルタリン グし、プロキシの設定をマスターノードのパブリック DNS 名の形式に合致するドメインに限定する ことができます。マスターノードでホストされるウェブサイトとインターネットのウェブサイトの表 示を切り替えたときに、ブラウザのアドオンが自動的にプロキシのオンとオフを切り替えます。 作業を始める前に、マスターノードのパブリック DNS 名とキーペアのプライベートキーファイルが 必要です。マスターパブリック DNS 名を特定する方法については、「Amazon EMR コンソールを 使用して、マスターノードのパブリック DNS 名を取得するには (p. 460)」を参照してください。 キーペアへのアクセスの詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「Amazon EC2 キーペア」を参照してください。マスターノード上で表示するサイトの詳細について は、「Amazon EMR クラスターでホストされているウェブサイトの表示 (p. 464)」を参照してくだ さい。 469 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 Linux、Unix、および Mac OS X でダイナミックポートフォワーディングを使 用してマスターノードへの SSH トンネルをセットアップする Linux、Unix、および Mac OS X でダイナミックポートフォワーディングを使用して SSH ト ンネルをセットアップするには 1. 2. ターミナルウィンドウを開きます。Mac OS X で、[Applications] > [Utilities] > [Terminal] を 選択します。他の Linux ディストリビューションでは、ターミナルは通常、[Applications] > [Accessories] > [Terminal] にあります。 ローカルコンピュータで SSH トンネルを開くには、次のコマンドを入力します。~/ mykeypair.pem を .pem ファイルの場所とファイル名に置き換え、8157 を未使用のローカル ポート番号に置き換え、c2-###-##-##-###.compute-1.amazonaws.com をクラスターのマ スターパブリック DNS 名に置き換えます。 ssh -i ~/mykeypair.pem -N -D 8157 hadoop@ec2-###-##-#####.compute-1.amazonaws.com このコマンドを発行すると、ターミナルは開いたままになり、応答を返しません。 Note -D はダイナミックポートフォワーディングを使用することを示し、マスターノードの ローカルウェブサーバーのすべてのリモートポートにデータを転送するために使用する ローカルポートを指定できます。ダイナミックポートフォワーディングでは、コマンド で指定されたポートでローカル SOCKS プロキシのリスニングが実行されます。 3. 4. トンネルがアクティブになった後、ブラウザの SOCKS プロキシを設定します。詳細について は、「オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するようにプ ロキシを設定する (p. 472)」を参照してください。 マスターノードのウェブインターフェイスに対する操作が終了したら、ターミナルウィンドウを 閉じます。 AWS CLI でダイナミックポートフォワーディングを使用した SSH トンネルの セットアップ Windows でも、Linux、Unix、および Mac OS X でも、AWS CLI を使用してマスターノードへの SSH 接続を作成できます。Linux、Unix、または Mac OS X で AWS CLI を使用している場合は、「キー ペアのプライベートキーのファイルアクセス許可を設定するには (p. 462)」に示されているよう に .pem ファイルに対するアクセス権限を設定する必要があります。Windows で AWS CLI を使用 している場合は、PuTTY が path 環境変数で指定されている必要があります。指定されていない場 合、"OpenSSH or PuTTY not available" などのエラーが表示されることがあります。 AWS CLI でダイナミックポートフォワーディングを使用して SSH トンネルをセットアップす るには 1. 「AWS CLI を使用したマスターノードへの接続 (p. 462)」に示されているように、マスター ノードへの SSH 接続を作成します。 2. クラスター識別子を取得するには、次のように入力します。 aws emr list-clusters 出力には、クラスター ID を含むクラスターのリストが表示されます。接続しているクラスターの クラスター ID を書き留めます。 "Status": { 470 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 "Timeline": { "ReadyDateTime": 1408040782.374, "CreationDateTime": 1408040501.213 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "NormalizedInstanceHours": 4, "Id": "j-2AL4XXXXXX5T9", "Name": "AWS CLI cluster" 3. 次のコマンドを入力して、ダイナミックポートフォワーディングを使用してマスターノー ドへの SSH トンネルを開きます。次の例で、j-2AL4XXXXXX5T9 をクラスター ID に、~/ mykeypair.key を .pem ファイル(Linux、Unix、および Mac OS X の場合)または .ppk ファ イル(Windows の場合)の場所とファイル名に置き換えてください。 aws emr socks --cluster-id j-2AL4XXXXXX5T9 --key-pair-file ~/mykeypair.key Note socks コマンドは、自動的にポート 8157 でダイナミックポートフォワーディングを設定 します。現在、この設定は変更できません。 4. トンネルがアクティブになった後、ブラウザの SOCKS プロキシを設定します。詳細について は、「オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するようにプ ロキシを設定する (p. 472)」を参照してください。 5. マスターノードのウェブインターフェイスに対する操作が終了したら、AWS CLI ウィンドウを閉 じます。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Windows でダイナミックポートフォワーディングを使用してマスターノード への SSH トンネルをセットアップする Windows ユーザーの場合は、PuTTY などの SSH クライアントを使用して、マスターノードへ の SSH トンネルを作成できます。Amazon EMR マスターノードに接続する前に、PuTTY および PuTTYgen をダウンロードしてインストールする必要があります。これらのツールは、PuTTY ダウン ロードページからダウンロードできます。 PuTTY は、Amazon EC2 によって生成されるプライベートキー形式(.pem)をネイティブにサポー トしていません。PuTTYgen を使用して、キーファイルを必要な PuTTY 形式(.ppk)に変換しま す。PuTTY を使用してマスターノードへの接続を試みる前に、キーをこの形式(.ppk)に変換する 必要があります。 キーの変換の詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の 「PuTTYgen を使用したプライベートキーの変換」を参照してください。 Windows でダイナミックポートフォワーディングを使用して SSH トンネルをセットアップす るには 1. putty.exe をダブルクリックして PuTTY を起動します。Windows のプログラムの一覧から PuTTY を起動することもできます。 471 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 Note 2. 既にマスターノードとのアクティブな SSH セッションがある場合は、PuTTY のタイト ルバーを右クリックし、[Change Settings] を選択することによってトンネルを追加でき ます。 必要に応じて、[Category] リストで、[Session] を選択します。 3. [Host Name] フィールドに、「hadoop@MasterPublicDNS」と入力します。たとえば、 「hadoop@ec2-###-##-##-###.compute-1########amazonaws.com を提供するようになり ました。 4. [Category] リストで、[Connection]、[SSH] の順に展開し、[Auth] を選択します。 5. [Private key file for authentication] では、[Browse] をクリックし、以前に生成した .ppk ファイル を選択します。 Note PuTTY は、Amazon EC2 によって生成されるプライベートキー形式(.pem)をネイティ ブにサポートしていません。PuTTYgen を使用して、キーファイルを必要な PuTTY 形式 (.ppk)に変換します。PuTTY を使用してマスターノードへの接続を試みる前に、キー をこの形式(.ppk)に変換する必要があります。 6. [Category] リストで、[Connection]、[SSH] の順に展開し、[Tunnels] を選択します。 7. [Source port] フィールドで、「8157」(未使用のローカルポート)を入力します。 8. 9. [Destination] フィールドは空白のままにしておきます。 [Dynamic] オプションと [Auto] オプションを選択します。 10. [Add] を選択し、[Open] を選択します。 11. [Yes] を選択して、PuTTY セキュリティ警告を閉じます。 Important マスターノードにログインするときに、ユーザー名の入力を求められた場合は、 「hadoop」と入力します。 12. トンネルがアクティブになった後、ブラウザの SOCKS プロキシを設定します。詳細について は、「オプション 2、パート 2: マスターノードでホストされるウェブサイトを表示するようにプ ロキシを設定する (p. 472)」を参照してください。 13. マスターノードのウェブインターフェイスに対する操作が終了したら、PuTTY ウィンドウを閉じ ます。 オプション 2、パート 2: マスターノードでホストされるウェ ブサイトを表示するようにプロキシを設定する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 ダイナミックポートフォワーディングによる SSH トンネルを使用する場合、SOCKS プロキシ管理ア ドオンを使用して、ブラウザでプロキシ設定を管理する必要があります。SOCKS プロキシ管理ツー ルを使用すると、テキストパターンに基づいて自動的に URL をフィルタリングし、プロキシの設定 をマスターノードのパブリック DNS 名の形式に合致するドメインに限定することができます。マス ターノードでホストされるウェブサイトとインターネットのウェブサイトの表示を切り替えたとき に、ブラウザのアドオンが自動的にプロキシのオンとオフを切り替えます。プロキシ設定を管理する には、FoxyProxy や SwitchySharp などのアドオンを使用するようにブラウザを設定します。 SSH トンネルの作成の詳細については、「オプション 2、パート 1: ダイナミックポートフォワーディ ングを使用してマスターノードへの SSH トンネルをセットアップする (p. 469)」を参照してくださ 472 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 い。利用可能なウェブインターフェイスの詳細については、「Amazon EMR クラスターでホストされ ているウェブサイトの表示 (p. 464)」を参照してください。 Firefox 用の FoxyProxy の設定 FoxyProxy (Standard) は、Google Chrome、Mozilla Firefox、および Microsoft Internet Explorer 用に 設定できます。FoxyProxy には、一連のプロキシ管理ツールが用意されており、Amazon EMR クラス ターの Amazon EC2 インスタンスで使用されるドメインに対応するパターンと一致する URL につい てプロキシサーバーを使用するよう設定できます。FoxyProxy を設定する前に、ダイナミックポート フォワーディングを使用して SSH トンネルを作成する必要があります。詳細については、「オプショ ン 2、パート 1: ダイナミックポートフォワーディングを使用してマスターノードへの SSH トンネル をセットアップする (p. 469)」を参照してください。 Note 次のチュートリアルでは、FoxyProxy Standard バージョン 4.2.4 および Firefox バージョン 24.7.0 を使用します。 Firefox で FoxyProxy をインストールして設定するには 1. http://getfoxyproxy.org/downloads.html から FoxyProxy の Standard バージョンをダウンロードし てインストールします。 2. テキストエディターを使用して、foxyproxy-settings.xml という名前で、以下の内容のファ イルを作成します。 <?xml version="1.0" encoding="UTF-8"?> <foxyproxy> <proxies> <proxy name="emr-socks-proxy" id="2322596116" notes="" fromSubscription="false" enabled="true" mode="manual" selectedTabIndex="2" lastresort="false" animatedIcons="true" includeInCycle="true" color="#0055E5" proxyDNS="true" noInternalIPs="false" autoconfMode="pac" clearCacheBeforeUse="false" disableCache="false" clearCookiesBeforeUse="false" rejectCookies="false"> <matches> <match enabled="true" name="*ec2*.amazonaws.com*" pattern="*ec2*.amazonaws.com*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*ec2*.compute*" pattern="*ec2*.compute*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="10.*" pattern="http://10.*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*10*.amazonaws.com*" pattern="*10*.amazonaws.com*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*10*.compute*" pattern="*10*.compute*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false"/> <match enabled="true" name="*.compute.internal*" pattern="*.compute.internal*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false"/> <match enabled="true" name="*.ec2.internal* " pattern="*.ec2.internal*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false"/> </matches> 473 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 <manualconf host="localhost" port="8157" socksversion="5" isSocks="true" username="" password="" domain="" /> </proxy> </proxies> </foxyproxy> このファイルには、以下の設定が含まれます。 • ポート 8157 は、マスターノードとの SSH トンネルを確立するために使用されるローカルポー ト番号です。この値は、PuTTY やターミナルで使用されるポート番号と一致している必要があ ります。 • *ec2*.amazonaws.com* と *10*.amazonaws.com* パターンは、米国リージョンのクラスターの パブリック DNS 名と一致します。 • *ec2*.compute* と *10*.compute* パターンは、それ以外のすべてのリージョンのクラスターの パブリック DNS 名と一致します。 • 10.* パターンは、Hadoop 1.x の JobTracker のログファイルへのアクセスを提供します。ネッ トワークアクセスプランと競合する場合は、このフィルタを変更します。 3. [Firefox]、[Add-ons] の順に選択します。 4. [Add-ons] タブで、[FoxyProxy Standard] の右側にある [Options] を選択します。 5. [FoxyProxy Standard] ダイアログで、[File]、[Import Settings] の順に選択します。 6. foxyproxy-settings.xml の場所を参照し、このファイルを選択して、[Open] を選択します。 7. 既存の設定の上書きを確認するメッセージが表示されたら [Yes] を選択します。次に、[Yes] を選 択して Firefox を再起動します。 8. Firefox が再起動したら、[Add-ons] タブで、[FoxyProxy Standard] の右側にある [Options] を選択 します。 9. [FoxyProxy Standard] ダイアログの [Select Mode] で、[Use proxies based on their pre-defined patterns and priorities] を選択します。 10. [Close] を選択します。 11. ウェブインターフェイスを開くには、ブラウザのアドレスバーに master-public-dns に続け て、ポート番号または URL を入力します。ガイドとして次の表を使用してください。 インターフェイス URL Ganglia メトリクスレポート master-public-dns/ganglia/ Hadoop ResourceManager master-public-dns-name:9026 Hadoop NameNode master-public-dns-name:9101 Hue ウェブアプリケーション master-public-dns-name::8888 マスターノードのウェブインターフェイスの詳細なリストについては、「Amazon EMR クラス ターでホストされているウェブサイトの表示 (p. 464)」を参照してください。 Google Chrome 用の FoxyProxy の設定 FoxyProxy は、Google Chrome、Mozilla Firefox、および Microsoft Internet Explorer 用に設定でき ます。FoxyProxy には、一連のプロキシ管理ツールが用意されており、Amazon EMR クラスターの Amazon EC2 インスタンスで使用されるドメインに対応するパターンと一致する URL についてプロ キシサーバーを使用するよう設定できます。FoxyProxy を設定する前に、ダイナミックポートフォ ワーディングを使用して SSH トンネルを作成する必要があります。詳細については、「オプション 2、パート 1: ダイナミックポートフォワーディングを使用してマスターノードへの SSH トンネルを セットアップする (p. 469)」を参照してください。 474 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 Note 次のチュートリアルでは、FoxyProxy Standard バージョン 3.0.3 および Chrome バージョン 24.7.0 を使用します。 Google Chrome で FoxyProxy をインストールして設定するには 1. http://getfoxyproxy.org/downloads.html から FoxyProxy の Standard バージョンをダウンロードし てインストールします。 2. 確認を求められたら、[FREE] を選択して FoxyProxy 拡張機能をインストールし、[Add] を選択し ます。 3. テキストエディターを使用して、foxyproxy-settings.xml という名前で、以下の内容のファ イルを作成します。 <?xml version="1.0" encoding="UTF-8"?> <foxyproxy> <proxies> <proxy name="emr-socks-proxy" id="2322596116" notes="" fromSubscription="false" enabled="true" mode="manual" selectedTabIndex="2" lastresort="false" animatedIcons="true" includeInCycle="true" color="#0055E5" proxyDNS="true" noInternalIPs="false" autoconfMode="pac" clearCacheBeforeUse="false" disableCache="false" clearCookiesBeforeUse="false" rejectCookies="false"> <matches> <match enabled="true" name="*ec2*.amazonaws.com*" pattern="*ec2*.amazonaws.com*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*ec2*.compute*" pattern="*ec2*.compute*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="10.*" pattern="http://10.*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*10*.amazonaws.com*" pattern="*10*.amazonaws.com*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*10*.compute*" pattern="*10*.compute*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false" /> <match enabled="true" name="*.compute.internal*" pattern="*.compute.internal*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false"/> <match enabled="true" name="*.ec2.internal* " pattern="*.ec2.internal*" isRegEx="false" isBlackList="false" isMultiLine="false" caseSensitive="false" fromSubscription="false"/> </matches> <manualconf host="localhost" port="8157" socksversion="5" isSocks="true" username="" password="" domain="" /> </proxy> </proxies> </foxyproxy> このファイルには、以下の設定が含まれます。 • ポート 8157 は、マスターノードとの SSH トンネルを確立するために使用されるローカルポー ト番号です。この値は、PuTTY やターミナルで使用されるポート番号と一致している必要があ ります。 475 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 • *ec2*.amazonaws.com* と *10*.amazonaws.com* パターンは、米国リージョンのクラスターの パブリック DNS 名と一致します。 • *ec2*.compute* と *10*.compute* パターンは、それ以外のすべてのリージョンのクラスターの パブリック DNS 名と一致します。 • 10.* パターンは、Hadoop 1.x の JobTracker のログファイルへのアクセスを提供します。ネッ トワークアクセスプランと競合する場合は、このフィルタを変更します。 4. [Customize and Control Google Chrome]、[Tools]、[Extensions] の順に選択します。 5. [Extensions] タブで、[FoxyProxy Standard] の下にある [Options] を選択します。 6. [FoxyProxy Standard] ページで [Import/Export] を選択します。 7. [Import/Export] ページで [Choose File] を選択します。foxyproxy-settings.xml の場所を参照 し、このファイルを選択して、[Open] を選択します。 8. 既存の設定の上書きを確認するメッセージが表示されたら [Replace] を選択します。 9. ページの上部にある [Proxy mode] で、[Use proxies based on their predefined patterns and priorities] を選択します。 10. ウェブインターフェイスを開くには、ブラウザのアドレスバーに master-public-dns に続け て、ポート番号または URL を入力します。ガイドとして次の表を使用してください。 インターフェイス URL Ganglia メトリクスレポート master-public-dns/ganglia/ Hadoop ResourceManager master-public-dns-name:9026 Hadoop NameNode master-public-dns-name:9101 Hue ウェブアプリケーション master-public-dns-name::8888 マスターノードのウェブインターフェイスの詳細なリストについては、「Amazon EMR クラス ターでホストされているウェブサイトの表示 (p. 464)」を参照してください。 コンソールを使用してマスターノードのウェブインターフェイ スにアクセスする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 既にダイナミックポートフォワーディングを使用して、Amazon EMR マスターノードとの SSH トン ネルを設定している場合は、コンソールを使用してウェブインターフェイスを開くことができます。 コンソールを使用してウェブインターフェイスを開くには 1. マスターノードへの SSH トンネルを確立していることと、ブラウザのプロキシ管理アドオンを設 定していることを確認します。 2. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 3. [Cluster List] ページで、クラスターのリンクを選択します。 4. クラスターの詳細の [Connections] で、ブラウザで開くウェブインターフェイスのリンクを選択 します。 476 Amazon EMR 開発者ガイド Amazon EMR クラスターでホス トされているウェブサイトの表示 5. または、[View All] リンクを選択して、クラスターのマスターノードで利用可能なすべてのウェブ インターフェイスへのリンクを表示します。リンクを選択すると、ブラウザにインターフェイス が表示されます。 マスターノードへの SSH トンネルを開いていない場合は、[Enable Web Connection] を選択して トンネルの作成手順を参照するか、「オプション 2、パート 1: ダイナミックポートフォワーディ ングを使用してマスターノードへの SSH トンネルをセットアップする (p. 469)」を参照してく ださい。 477 Amazon EMR 開発者ガイド クラスターの終了を制御する Note ローカルポートフォワーディングを使用して SSH トンネルを設定している場 合、Amazon EMR コンソールでは接続が検出されません。 クラスターの終了を制御する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスター終了の制御は、終了保護と自動終了という 2 つのオプションによって決定されます。デ フォルトでは、コンソールを使用してクラスターを起動するときに、終了保護が有効になります。こ れにより、クラスターの偶発的な終了が防止されます。CLI または API を使用してクラスターを起動 する場合、終了保護は無効になります。 自動終了により、すべてのステップが完了したらクラスターを自動的に終了するかどうかが決定され ます。コンソールを使用してクラスターを起動する場合、クラスターのデフォルトの動作では、すべ てのステップが完了した後でクラスターはアクティブのままになります。つまり、クラスターは長時 間稼働します。長時間稼働クラスターは手動で終了する必要があります。CLI または API を使用して クラスターを起動する場合、クラスターのデフォルトの動作では、データ処理が完了すると(実行す るステップが残っていなくなると)終了します。これにより、一時的なクラスターが作成されます。 トピック • クラスターを終了する (p. 478) • クラスター終了の管理 (p. 481) クラスターを終了する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、クラスターを終了する方法について説明しま す。STARTING、RUNNING、WAITING のいずれかの状態のクラスターを終了できます。WAITING 状態 のクラスターは終了する必要があります。終了しないと、無制限に実行され、アカウントに対して料 金が発生します。STARTING 状態から移行できないクラスター、またはステップを完了できないクラ スターを終了できます。 478 Amazon EMR 開発者ガイド クラスターを終了する 終了保護が設定されているクラスターを終了する場合、クラスターを終了する前に、終了保護を無効 にしておく必要があります。終了保護が無効になったら、クラスターを終了できます。クラスター は、コンソール、AWS CLI、またはプログラムで TerminateJobFlows API を使用して終了できま す。 クラスターの設定によっては、クラスターが完全に終了し、割り当てられたリソース(EC2 インスタ ンスなど)が解放されるまでに、最大で 5~20 分かかる場合があります。 コンソールを使用してクラスターを終了する Amazon EMR コンソールを使用して 1 つ以上のクラスターを終了できます。コンソールのクラスター を終了する手順は、終了保護が有効かどうかによって異なります。保護されているクラスターを終了 するには、まず終了保護を無効にする必要があります。 終了保護が無効な状態でクラスターを終了するには 1. AWS マネジメントコンソールにサインインした後、Amazon EMR コンソール(https:// console.aws.amazon.com/elasticmapreduce/)を開きます。 2. 終了するクラスターを選択します。複数のクラスターを選択し、同時に終了することができま す。 3. [Terminate] をクリックします。 4. メッセージが表示されたら、[Terminate] をクリックします。 クラスターのインスタンスが終了し、ログデータの保存が停止します。 終了保護が有効な状態でクラスターを終了するには 1. AWS マネジメントコンソールにサインインした後、Amazon EMR コンソール(https:// console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Cluster List] ページで、終了するクラスターを選択します。複数のクラスターを選択し、同時に 終了することができます。 3. [Terminate] をクリックします。 479 Amazon EMR 開発者ガイド クラスターを終了する 4. プロンプトが表示されたら、[Change] をクリックして終了保護を無効にします。複数のクラス ターを選択した場合は、[Turn off all] をクリックして、すべてのクラスターの終了保護を同時に無 効にします。 5. [Terminate clusters] ダイアログで、[Termination Protection] の [Off] をクリックし、チェックマー クをクリックして確認します。 6. [Terminate] をクリックします。 クラスターのインスタンスが終了し、ログデータの保存が停止します。 AWS CLI を使用してクラスターを終了する AWS CLI を使用して、保護されていないクラスターを終了するには AWS CLI を使用して、保護されていないクラスターを終了するには、terminate-clusters サブコ マンドと共に --cluster-ids パラメーターを使用します。 • 1 つのクラスターを終了する次のコマンドを入力して、j-3KVXXXXXXX7UG をクラスター ID に置 き換えます。 aws emr terminate-clusters --cluster-ids j-3KVXXXXXXX7UG 複数のクラスターを終了するには、次のコマンドを入力し、j-3KVXXXXXXX7UG # と jWJ2XXXXXX8EU をクラスター ID に置き換えます。 aws emr terminate-clusters --cluster-ids j-3KVXXXXXXX7UG j-WJ2XXXXXX8EU 480 Amazon EMR 開発者ガイド クラスター終了の管理 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 AWS CLI を使用して、保護されているクラスターを終了するには AWS CLI を使用して保護されているクラスターを終了するには、最初に modify-clusterattributes サブコマンドを --no-termination-protected パラメーターと共に使用して終了保 護を無効にします。次に、terminate-clusters サブコマンドを --cluster-ids パラメーターと 共に使用してクラスターを終了します。 1. 次のコマンドを入力して終了保護を無効にし、j-3KVTXXXXXX7UG をクラスター ID に置き換えま す。 aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG --notermination-protected 2. クラスターを終了するには、次のコマンドを入力して、j-3KVXXXXXXX7UG をクラスター ID に置 き換えます。 aws emr terminate-clusters --cluster-ids j-3KVXXXXXXX7UG 複数のクラスターを終了するには、次のコマンドを入力し、j-3KVXXXXXXX7UG # と jWJ2XXXXXX8EU をクラスター ID に置き換えます。 aws emr terminate-clusters --cluster-ids j-3KVXXXXXXX7UG j-WJ2XXXXXX8EU AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 API を使用してクラスターを終了する TerminateJobFlows オペレーションが、ステップの処理を終了し、Amazon EC2 から Amazon S3 にログデータをアップロードして(設定されている場合)、Hadoop クラスターを終了しま す。RunJobFlows リクエストで KeepJobAliveWhenNoSteps を False に設定すると、クラスター も自動的に終了します。 1 つのクラスターまたは複数クラスターのリストをクラスターの ID を指定して終了するには、このア クションを使用します。 TerminateJobFlows に固有の入力パラメーターの詳細については、「TerminateJobFlows」を 参照してください。リクエストの一般的なパラメーターの詳細については、「Common Request Parameters」を参照してください。 クラスター終了の管理 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 終了保護機能は、事故やエラーによるシャットダウンが発生しないようジョブフローの EC2 インスタ ンスを保護します。この保護機能は、クラスターのインスタンスストレージに、これらのインスタン スが終了する前に回復する必要があるデータが含まれるときに特に役に立ちます。 終了保護が無効の場合、クラスターを終了するには、TerminateJobFlows API を呼び出す か、Amazon EMR コンソールまたはコマンドラインインターフェイスを使用します。また、マスター 481 Amazon EMR 開発者ガイド クラスター終了の管理 ノードによって、応答しなくなったタスクノード、またはエラーを返したタスクノードが終了するこ ともあります。 デフォルトでは、コンソールを使用してクラスターを起動するときに終了保護が有効になります。 デフォルトでは、CLI または API を使用してクラスターを起動するときに、終了保護が無効になりま す。終了保護が有効の場合、クラスターを終了するには、クラスターから終了保護を明示的に削除し ておく必要があります。終了保護が有効になっていると、TerminateJobFlows ではクラスターを終 了できません。また、ユーザーが CLI を使用してクラスターを終了することもできません。ユーザー が Amazon EMR コンソールを使用してクラスターを終了する場合は、クラスターを終了する前に、 終了保護を削除するかどうかを尋ねる追加の確認ボックスが表示されます。 保護されているクラスターを API または CLI で終了しようとすると、API はエラーを返し、CLI はゼ ロ以外のリターンコードとともに終了します。 クラスターにステップを送信すると、ActionOnFailure 設定によって、エラーに対するクラスターの反 応が決定されます。この設定に使用できる値は次のとおりです。 • TERMINATE_JOB_FLOW: ステップが失敗した場合、クラスターを停止します。クラスターの停止 保護が有効で、自動終了が無効な場合は、クラスターは停止されません。 • CANCEL_AND_WAIT: ステップが失敗した場合、残りのステップをキャンセルします。クラスター の自動終了が無効な場合、クラスターは停止されません。 • CONTINUE: ステップが失敗した場合、次のステップに進みます。 Amazon EMR および Amazon EC2 内の終了保護 Amazon EMR におけるクラスターの終了保護は、EC2 インスタンスに disableAPITermination フラグを設定する操作と似ています。Amazon EC2 に設定された終了保護と Amazon EMR に設定 された終了保護の間で競合が発生した場合は、Amazon EMR クラスターの保護ステータスの方が、 指定されたインスタンスで Amazon EC2 によって設定されたステータスよりも優先されます。例え ば、Amazon EC2 コンソールを使用して、終了保護が無効になっている Amazon EMR クラスター で、EC2 インスタンスの終了保護を有効にすると、Amazon EMR は、その EC2 インスタンスで終了 保護をオフにして、残りのクラスターの終了時にインスタンスをシャットダウンします。 終了保護とスポットインスタンス Amazon EMR 終了保護を有効にしても、スポット価格が最高入札価格を超えた場合の Amazon EC2 スポットインスタンスの終了を防ぐことはできません。 終了保護と自動終了 自動終了を有効にすると、一時的なクラスターが作成されます。クラスターは、終了保護が有効に なっている場合でも、最後のステップが正常に完了すると自動的に終了します。 自動終了を無効にすると、ステップが正常に完了した後もクラスター内のインスタンスが存続します が、その場合でも、ユーザーアクション、エラー、または TerminateJobFlows の呼び出しによって クラスターは終了します(終了保護が無効になっている場合)。 Note デフォルトで、コンソールと CLI を使って起動したクラスターの場合、自動終了は無効で す。API を使って起動したクラスターは自動終了が有効になっています。 新しいクラスターに対する終了保護の設定 コンソール、AWS CLI または API を使用してクラスターを起動するときは、終了保護を有効または無 効にすることができます。 482 Amazon EMR 開発者ガイド クラスター終了の管理 コンソールを使用して新しいクラスターの終了保護を設定するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. [Create cluster] を選択します。 3. [Cluster Configuration] セクションで、[Termination protection] フィールドを [Yes] に設定して保 護を有効にするか、フィールドを [No] に設定して無効にします。デフォルトでは、終了保護は有 効になります。 4. クラスターの作成に進みます。 AWS CLI を使用して新しいクラスターの終了保護を設定するには AWS CLI を使用して create-cluster コマンドを --termination-protected パラメーターと 共に入力することで、終了保護を有効にしてクラスターを起動できます。デフォルトでは、AWS CLI を使用してクラスターを起動するときに、終了保護は無効になります。--no-terminationprotected パラメーターを使用して、終了保護を無効にすることもできます。 • 保護されたクラスターを起動するには、次のコマンドを入力し、myKey を EC2 キーペアの名前 に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.8 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 --termination-protected • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.8 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 -termination-protected AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 実行中のクラスターに対する終了保護の設定 コンソールまたは AWS CLI を使用して、実行中のクラスターに対して終了保護を設定することがで きます。 483 Amazon EMR 開発者ガイド クラスターリソースのスケーリング コンソールを使用して、実行中のクラスターの終了保護を設定するには 1. Amazon EMR コンソール(https://console.aws.amazon.com/elasticmapreduce/)を開きます。 2. 3. [Cluster List] ページで、クラスターのリンクをクリックします。 [Cluster Details] ページで、[Summary ] セクションにある [Termination protection] の [Change] を クリックします。 [On] をクリックし、チェックマークアイコンをクリックして終了保護を有効にします。または、 [Off] をクリックして無効にします。 4. AWS CLI を使用して、実行中のクラスターの終了保護を設定するには AWS CLI を使用して実行中のクラスターで終了保護を有効にするには、modify-clusterattributes サブコマンドを --termination-protected パラメーターと共に入力します。これを 無効にするには、--no-termination-protected パラメーターを入力します。 • 実行中のクラスターで終了保護を有効にするには、次のコマンドを入力します。 aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG -termination-protected 終了保護を無効にするには、次のように入力します。 aws emr modify-cluster-attributes --cluster-id j-3KVTXXXXXX7UG --notermination-protected クラスターリソースのスケーリング このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 さまざまな需要を持つワークロードに応じて、EMR クラスターで使用できる多数の Amazon EC2 イ ンスタンスを自動または手動で調整できます。以下のオプションが利用できます。 • コアインスタンスグループおよびタスクインスタンスグループを最初に作成するか、実行後に、 その 自動スケーリング を設定できます。Amazon EMR は、指定したルールに従って自動で Auto Scaling パラメーターを設定できます。その後、CloudWatch メトリックスに基づいてインスタンス を追加または削除できます。 • Amazon EC2 インスタンスを手動で追加または削除することで、コアインスタンスグループとタス クインスタンスグループを手動でサイズ変更できます。 • クラスターに新しいタスクインスタンスグループを追加できます。 484 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する Amazon EC2 インスタンスタイプを指定するオプションは、インスタンスグループの初期設定時にの み利用できます。そのため、新しいタスクを追加して変更できるのは Amazon EC2 インスタンスタイ プのみです。クラスター全体の設定を行うことで、クラスターから削除された Amazon EC2 インスタ ンスをインスタンス時間の境界で終了するか、Amazon EC2 インスタンスのタスクが完了したときに 終了するかを指定できます。詳細については、「クラスターのスケールダウンを設定する (p. 501)」 を参照してください。 このセクションで説明されるスケーリングの方法を 1 つ選択する前に、重要なコンセプトについて知 る必要があります。まず、EMR クラスターのノードタイプのロールを理解し、それらのロールを管 理するためにインスタンスグループをどのように使用するかを理解する必要があります。ノードタイ プの機能に関する詳細は、「What is Amazon EMR?」を、インスタンスグループに関する詳細につい ては、「インスタンスグループ」を参照してください。また、ワークロードの性質に応じて、クラス ターリソースのサイズを適切にするための戦略を立てる必要があります。詳細については、「インス タンスの数とタイプを選択する」を参照してください。 Note EMR クラスターのマスターインスタンスグループは、必ず Amazon EC2 で実行されている単 一のノードで構成されます。そのため、初期設定時以降にスケールすることはできません。 クラスターをスケールアウト、スケールインするには、コアインスタンスグループおよびタ スクインスタンスグループで作業します。マスターノードのみを持ち、コアノードまたはタ スクノードを持たないクラスターを 1 つ保有することが可能です。クラスターのサイズをス ケーリングするためには、クラスター作成時に少なくとも 1 つのコアノードが必要です。つ まり、単一ノードクラスターは、サイズを変更することはできません。 トピック • Amazon EMR で自動スケーリングを使用する (p. 485) • 実行中のクラスターのサイズを手動で変更する (p. 494) • クラスターのスケールダウンを設定する (p. 501) Amazon EMR で自動スケーリングを使用する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR の自動スケーリングを使用すると、スケーリングポリシーで指定したルールに基づき、 クラスター内のコアノードとタスクノードをプログラムを使ってスケールアウト、スケールインでき ます。スケーリングポリシーは、インスタンスグループ設定の一部です。インスタンスグループの初 期設定時にポリシーを指定するか、インスタンスグループがアクティブになった後でも、既存のクラ スターのインスタンスグループを変更して、ポリシーを指定できます。マスターインスタンスグルー プを除くクラスター内の各インスタンスグループは、独自のスケーリングポリシーを持つことができ ます。スケーリングポリシーはスケールアウトルールとスケールインルールで構成されます。スケー ルアウトルールとスケールインルールは、それぞれに異なるパラメーターを用いて、個別に設定でき ます。 AWS マネジメントコンソール、AWS CLI、または Amazon EMR API を使用してスケーリングポリ シーを設定できます。AWS CLI または Amazon EMR API を使用する場合、スケーリングポリシーを JSON 形式で指定します。最初にコンソールを使用してスケーリングポリシーを作成する場合は、ま ず、多数のアプリケーションが事前設定されているデフォルトのポリシーが適しています。デフォル トのルールは削除したり変更できます。 自動スケーリングを使用すれば、実行中でも EMR クラスターの容量を変更できますが、ベースライ ンとなるワークロード要件を考慮し、ノードおよびインスタンスグループ設定を計画してください。 詳細については、「インスタンスの数とタイプを選択する」を参照してください。 485 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する Note ほとんどのワークロードで、リソースの活用を最適化するには、スケールイン、スケールア ウトの両方のルールを設定することが理想となります。一方を設定せずにどちらかのルー ルのみを設定すると、規模の拡大や縮小の後に、インスタンスカウントを手動でサイズ調整 する必要があります。つまりこの方法では、手動でのリセットを伴う「一方通行の」自動ス ケールアウトまたはスケールインポリシーを設定することになります。 自動スケーリングの IAM ロールを作成する Amazon EMR での自動スケーリングには、規模の拡大や縮小がトリガーされたときにイン スタンスを追加または削除する権限を持つ IAM ロールが必要です。デフォルトロールである EMR_AutoScaling_DefaultRole は、適切なロールポリシーと信頼ポリシーで設定されており、こ の目的に使用できます。自動スケーリングはこの IAM ロールを使用して、ユーザーの代理でノードを スケールします。 新しいクラスターを作成するときは、このロールを作成する必要があります。このロールを持たない クラスターでは自動スケーリングは利用できません。また、クラスターが作成された後でこのロール を追加することはできません。Amazon EMR の AWS マネジメントコンソール を使用してスケーリ ングポリシーを作成する場合、ロールはデフォルトで作成されます。AWS CLI を使用して自動スケー リングポリシーを持つクラスターを作成する場合、ロールを作成するには --auto-scaling-role EMR_AutoScaling_DefaultRole コマンドを使用する必要があります。詳細については、「インス タンスグループに適用する、自動スケーリングポリシーを持つクラスターを作成する (p. 488)」を参 照してください。 自動スケーリングルールについて スケールアウトルールがインスタンスグループの規模の拡大や縮小をトリガーする場合、ルールに基 づいて Amazon EC2 インスタンスがインスタンスグループに追加されます。Amazon EC2 インスタン スが InService 状態になるとすぐに、アプリケーションは Apache Spark や Apache Hive などの新 しいノードを使用できます。インスタンスを終了し、ノードを削除するスケールインルールを設定す ることもできます。自動でスケーリングする Amazon EC2 インスタンスのライフサイクルについての 詳細は、Auto Scaling ユーザーガイドの「Auto Scaling ライフサイクル」を参照してください。 クラスターが Amazon EC2 インスタンスを終了する方法を設定できます。請求の Amazon EC2 イン スタンス時間の境界、またはタスクの完了時のどちらで終了するかを選択できます。この設定は自動 スケーリングと手動でのサイズ変更オペレーションの両方に適用されます。この設定の詳細について は、「クラスターのスケールダウンを設定する (p. 501)」を参照してください。 ポリシー内の各ルールのうち、次のパラメーターで自動スケーリングの動作を決定します。 Note ここに記載されたパラメーターは、Amazon EMR の AWS マネジメントコンソール に基づ いています。AWS CLI または Amazon EMR API を使用する場合は、追加の詳細設定オプ ションが使用できます。詳細オプションについて詳しくは、Amazon EMR API Referenceの 「SimpleScalingPolicyConfiguration」を参照してください。 • 最大インスタンスおよび最小インスタンス。最大インスタンスの制約で、インスタンスグループ に含められる Amazon EC2 インスタンスの最大数を指定します。これはすべてのスケールアウト ルールに適用されます。同様に、最小インスタンスの制約で、インスタンスグループに含められる Amazon EC2 インスタンスの数を指定します。これはすべてのスケールインルールに適用されま す。 • ルール名は、ポリシー内で一意である必要があります。 • スケーリング調整は、ルールによりトリガーされた規模の拡大や縮小の間に追加 (スケールアウト ルールの場合)、または終了 (スケールインルールの場合) する EC2 インスタンスの数を決定しま す。 486 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する • CloudWatch メトリックスは、アラーム条件用に監視されます。 • 比較演算子は、CloudWatch メトリックスをしきい値と比較してトリガー条件を決定します。 • 評価期間は、5 分単位で増分します。規模の拡大や縮小がトリガーされる前に CloudWatch メト リックスがトリガー条件になる必要があります。 • クールダウンは、ルールにより規模の拡大や縮小が起動し、その次の規模の拡大や縮小が起動す る (トリガーするルールは問わない) までに経過する必要がある時間を決定します。インスタンス グループが規模の拡大や縮小を完了し、スケーリング後の状態に達した際、クールダウンすること で、後続の規模の拡大や縮小をトリガーする可能性のある CloudWatch メトリックスが安定する機 会が与えられます。詳細については、Auto Scaling ユーザーガイドの「Auto Scaling のクールダウ ン」を参照してください。 AWS マネジメントコンソール を使用して自動スケーリングを 設定する クラスターを作成する際、高度なクラスター設定オプションを使用して、インスタンスグループにス ケーリングポリシーを設定します。既存のクラスターのハードウェア設定でインスタンスグループを 変更することにより、実行中のインスタンスグループのスケーリングポリシーを作成または変更する こともできます。 1. クラスターを作成する場合、Amazon EMR コンソールで、[クラスターの作成]、[詳細オプション に移動する] の順に選択し、[Step 1: Software and Steps] のオプションを選択して、その後 [Step 2: Hardware Configuration] に移動します。 —または— 実行中のクラスターのインスタンスグループを変更する場合、クラスターリストからクラスター を選択し、その後 [ハードウェア] セクションを展開します。 2. 設定するインスタンスグループの [Auto Scaling] 列に表示される鉛筆アイコンをクリックしま す。インスタンスグループに自動スケーリングポリシーがすでに設定されている場合、最大イン スタンス数と最小インスタンス数がこの列に表示されます。設定されていない場合は、「有効で ない」と表示されます。 Auto Scaling ルールの画面が開きます。デフォルトで、[スケールアウト] と [スケールイン] が選 択されています。多くのアプリケーションに適切な設定で、デフォルトのルールが事前設定され ています。 3. インスタンスグループをスケールアウトした後に含める最大インスタンスを入力するか、インス タンスグループをスケールインした後に含める最小インスタンスを入力します。 4. ルールのパラメーターを編集するには鉛筆をクリックします。ポリシーからルールを削除するに は [X] を、ルールを追加するには [Add rule] をクリックします。 5. このトピックで先に記載したとおり、ルールのパラメーターを選択します。Amazon EMR の利 用可能な CloudWatch メトリックスの説明は、Amazon CloudWatch ユーザーガイドの「Amazon EMR メトリックスとディメンション」を参照してください。 487 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する AWS CLI を使用して自動スケーリングを設定する Amazon EMR に AWS CLI コマンドを使用して、クラスターを作成したときとインスタンスグループ を作成したときに自動スケーリングを設定できます。短縮構文を使用して、関連コマンドのインライ ンで JSON 設定を指定したり、設定 JSON を含むファイルを参照したりできます。既存のインスタ ンスグループに自動スケーリングポリシーを適用したり、以前適用されていた自動スケーリングポリ シーを削除することもできます。さらに、スケーリングポリシーの詳細設定を実行中のクラスターか ら取得できます。 Important 自動スケーリングポリシーを持つクラスターを作成する場合は、--auto-scaling-role EMR_AutoScaling_DefaultRole コマンドを使用する必要があります。クラスターで自動 スケーリングを実施するには、クラスターに EMR_AutoScaling_DefaultRole が必要です。 ロールはクラスターが作成された後にのみ追加でき、既存のクラスターには追加できませ ん。 自動スケーリングポリシーを設定する際に利用できるパラメーターの詳細な説明は、Amazon EMR API Referenceの「PutAutoScalingPolicy」を参照してください。 インスタンスグループに適用する、自動スケーリングポリシーを持つクラス ターを作成する aws emr create-cluster コマンドの --instance-groups オプション内で自動スケーリング設定を指定で きます。次の例は、create-cluster コマンドを示しています。このコマンドには、インラインにコアイ ンスタンスグループの自動スケーリングポリシーがあります。このコマンドは、AWS マネジメント コンソール の Amazon EMR を使用して自動スケーリングポリシーを作成したときに表示される、デ フォルトのスケールアウトポリシーに相当するスケーリング設定を作成します。簡潔にするために、 スケールインポリシーは表示されません。スケールインルールなしで、スケールアウトルールを作成 するのは推奨されていません。 aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole --auto-scaling-role EMR_AutoScaling_DefaultRole --instance-groups Name=MyMasterIG,InstanceGroupType=MASTER,InstanceType=m3.xlarge,InstanceCount=1 'Name=MyCoreIG,InstanceGroupType=CORE,InstanceType=m3.xlarge,InstanceCount=2,AutoScalingPol scale-out,Description=Replicates the default scale-out rule in the console.,Action={SimpleScalingPolicyConfiguration={AdjustmentType=CHANGE_IN_CAPACITY,Scalin ElasticMapReduce,Period=300,Statistic=AVERAGE,Threshold=15,Unit=PERCENT,Dimensions=[{Key=Job 次のコマンドは、コマンドラインを使用した instancegroupconfig.json という名前のインスタン スグループ設定ファイルの一部としての自動スケーリングポリシー定義の提供を示しています。 aws emr create-cluster --release-label emr-5.2.0 --service-role EMR_DefaultRole --ec2-attributes InstanceProfile=EMR_EC2_DefaultRole -instance-groups file://your/path/to/instancegroupconfig.json --auto-scalingrole EMR_AutoScaling_DefaultRole 次の構成ファイルのコンテンツ: [ 488 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する { "InstanceCount": 1, "Name": "MyMasterIG", "InstanceGroupType": "MASTER", "InstanceType": "m3.xlarge" }, { "InstanceCount": 2, "Name": "MyCoreIG", "InstanceGroupType": "CORE", "InstanceType": "m3.xlarge", "AutoScalingPolicy": { "Constraints": { "MinCapacity": 2, "MaxCapacity": 10 }, "Rules": [ { "Name": "Default-scale-out", "Description": "Replicates the default scale-out rule in the console for YARN memory.", "Action":{ "SimpleScalingPolicyConfiguration":{ "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1, "CoolDown": 300 } }, "Trigger":{ "CloudWatchAlarmDefinition":{ "ComparisonOperator": "LESS_THAN", "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Threshold": 15, "Statistic": "AVERAGE", "Unit": "PERCENT", "Dimensions":[ { "Key" : "JobFlowId", "Value" : "${emr.clusterId}" } ] } } } ] } } ] 489 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する 自動スケーリングポリシーを持つインスタンスグループをクラスターに追加す る create-cluster を使用するときと同じ方法で、--instance-groups オプションを使用し て、add-instance-groups コマンドでスケーリングポリシーの設定を指定できます。次の例では、 インスタンスグループ設定がある JSON ファイル instancegroupconfig.json への参照を使用し ています。 aws emr add-instance-groups --cluster-id j-1EKZ3TYEVF1S2 --instance-groups file://your/path/to/instancegroupconfig.json 既存のインスタンスグループに自動スケーリングポリシーを適用するか、適用 されたポリシーを変更する aws emr put-auto-scaling-policy コマンドを使用して自動スケーリングポリシーを既存のイ ンスタンスグループに適用します。インスタンスグループは、自動スケーリング IAM ロールを使用す るクラスターの一部である必要があります。次の例では、自動スケーリングポリシー設定を指定する JSON ファイル autoscaleconfig.json への参照を使用します。 aws emr put-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instancegroup-id ig-3PLUZBA6WLS07 --auto-scaling-policy file://your/path/to/ autoscaleconfig.json autoscaleconfig.json ファイルのコンテンツは、前の例と同じスケールアウトルールを定義する もので、次に示されています。 "AutoScalingPolicy": { "Constraints": { "MinCapacity": 2, "MaxCapacity": 10 }, "Rules": [ { "Name": "Default-scale-out", "Description": "Replicates the default scale-out rule in the console for YARN memory.", "Action":{ "SimpleScalingPolicyConfiguration":{ "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1, "CoolDown": 300 } }, "Trigger":{ "CloudWatchAlarmDefinition":{ "ComparisonOperator": "LESS_THAN", "EvaluationPeriods": 1, "MetricName": "YARNMemoryAvailablePercentage", "Namespace": "AWS/ElasticMapReduce", "Period": 300, "Threshold": 15, "Statistic": "AVERAGE", 490 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する "Unit": "PERCENT", "Dimensions":[ { "Key" : "JobFlowId", "Value" : "${emr.clusterId}" } ] } } } ] } 自動スケーリングポリシーをインスタンスグループから削除する aws emr remove-auto-scaling-policy --cluster-id j-1EKZ3TYEVF1S2 --instancegroup-id ig-3PLUZBA6WLS07 自動スケーリングポリシー設定を取得する describe-cluster コマンドは InstanceGroup ブロックのポリシー設定を取得します。たとえば、 次のコマンドは、クラスター ID j-1CWOHP4PI30VJ を持つクラスターの設定を取得します。 aws emr describe-cluster –cluster-id j-1CWOHP4PI30VJ このコマンドでは、次のサンプルアウトプットが生成されます。 { "Cluster": { "Configurations": [], "Id": "j-1CWOHP4PI30VJ", "NormalizedInstanceHours": 48, "Name": "Auto Scaling Cluster", "ReleaseLabel": "emr-5.2.0", "ServiceRole": "EMR_DefaultRole", "AutoTerminate": false, "TerminationProtected": true, "MasterPublicDnsName": "ec2-54-167-31-38.compute-1.amazonaws.com", "LogUri": "s3n://aws-logs-232939870606-us-east-1/elasticmapreduce/", "Ec2InstanceAttributes": { "Ec2KeyName": "performance", "AdditionalMasterSecurityGroups": [], "AdditionalSlaveSecurityGroups": [], "EmrManagedSlaveSecurityGroup": "sg-09fc9362", "Ec2AvailabilityZone": "us-east-1d", "EmrManagedMasterSecurityGroup": "sg-0bfc9360", "IamInstanceProfile": "EMR_EC2_DefaultRole" }, "Applications": [ { "Name": "Hadoop", "Version": "2.7.3" 491 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する } ], "InstanceGroups": [ { "AutoScalingPolicy": { "Status": { "State": "ATTACHED", "StateChangeReason": { "Message": "" } }, "Constraints": { "MaxCapacity": 10, "MinCapacity": 2 }, "Rules": [ { "Name": "Default-scale-out", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 15, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "LESS_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": 1 } } }, { "Name": "Default-scale-in", "Trigger": { "CloudWatchAlarmDefinition": { "MetricName": "YARNMemoryAvailablePercentage", "Unit": "PERCENT", "Namespace": "AWS/ElasticMapReduce", "Threshold": 0.75, "Dimensions": [ { "Key": "JobFlowId", "Value": "j-1CWOHP4PI30VJ" 492 Amazon EMR 開発者ガイド Amazon EMR で自動スケーリングを使用する } ], "EvaluationPeriods": 1, "Period": 300, "ComparisonOperator": "GREATER_THAN", "Statistic": "AVERAGE" } }, "Description": "", "Action": { "SimpleScalingPolicyConfiguration": { "CoolDown": 300, "AdjustmentType": "CHANGE_IN_CAPACITY", "ScalingAdjustment": -1 } } } ] }, "Configurations": [], "InstanceType": "m3.xlarge", "Market": "ON_DEMAND", "Name": "Core - 2", "ShrinkPolicy": {}, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413864.615 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "RunningInstanceCount": 2, "Id": "ig-3M16XBE8C3PH1", "InstanceGroupType": "CORE", "RequestedInstanceCount": 2, "EbsBlockDevices": [] }, { "Configurations": [], "Id": "ig-OP62I28NSE8M", "InstanceGroupType": "MASTER", "InstanceType": "m3.xlarge", "Market": "ON_DEMAND", "Name": "Master - 1", "ShrinkPolicy": {}, "EbsBlockDevices": [], "RequestedInstanceCount": 1, "Status": { "Timeline": { "CreationDateTime": 1479413437.342, "ReadyDateTime": 1479413752.088 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } 493 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する }, "RunningInstanceCount": 1 } ], "AutoScalingRole": "EMR_AutoScaling_DefaultRole", "Tags": [], "VisibleToAllUsers": true, "BootstrapActions": [], "Status": { "Timeline": { "CreationDateTime": 1479413437.339, "ReadyDateTime": 1479413863.666 }, "State": "WAITING", "StateChangeReason": { "Message": "Cluster ready after last step completed." } } } } 実行中のクラスターのサイズを手動で変更する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS マネジメントコンソール、AWS CLI、または Amazon EMR API を使用してノードを追加して、 実行中のクラスターのコアインスタンスグループのサイズを変更することができます。インスタンス 数を減らして、実行中のクラスターのコアインスタンスグループのサイズを縮小することはできませ ん。ただし、AWS CLI または API を使用して、コアインスタンスグループのインスタンスを終了する ことはできます。そうする場合は、注意が必要です。コアインスタンスグループのインスタンスを終 了すると、データを喪失する危険性があり、インスタンスの自動的な置換が行われなくなります。 タスクノードが Hadoop ジョブを実行することもできます。クラスターの実行後は、タスクノードの 数を増減でき、AWS マネジメントコンソール、AWS CLI、または Amazon EMR API を使用してタス クインスタンスグループを追加できます。 クラスターの実行時、Hadoop は、データを処理するときに必要だったマッパータスクとリデュー サータスクの数を確認します。クラスターが大きければ、リソースを効率的に使用し、処理時間を短 縮するために、タスクの数は多くなるはずです。通常、EMR クラスターのサイズは、そのクラスター を通して変わりません。タスクの数はクラスターの作成時に設定します。実行中のクラスターのサイ ズを変更すると、クラスター実行中に処理を変更できます。つまり、タスクの数は固定されておら ず、クラスターが存続している間は変更できます。最適な数のタスクを設定するのに役立つ設定オプ ションは 2 つあります: • mapred.map.tasksperslot • mapred.reduce.tasksperslot これらのオプションは両方とも mapred-conf.xml ファイルで設定できます。ジョブをクラスターに 送信するとき、クラスター全体で使用できるマップおよびリデューススロットの現在の合計数がジョ ブクライアントによって確認されます。その後、ジョブクライアントは次の方程式を使用して、タス クの数を設定します。 • mapred.map.tasks = mapred.map.tasksperslot ×クラスターのマップスロット数 494 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する • mapred.reduce.tasks =mapred.reduce.tasksperslot ×クラスターのリデューススロット数 ジョブクライアントは、タスク数が設定されていない場合にのみ tasksperslot パラメーターを読み 込みます。タスク数はいつでも無効にできます。この無効にする処理は、ブートストラップアクショ ンを使用してすべてのクラスターに対してまとめて実行することも、設定を変更するステップを追加 してジョブごとに個別に実行することも可能です。 Amazon EMR は、スレーブノードエラーに対する耐性があり、スレーブノードが使用できなくなって もクラスターの実行を継続できます。Amazon EMR は、追加スレーブノードを自動的にプロビジョニ ングし、エラーが発生したスレーブノードの代わりに配置します。 クラスターステップごとに異なる数のスレーブノードを設定できます。また、実行中のクラスターに ステップを追加して、スレーブノードの数を変更することもできます。デフォルトで、すべてのス テップが確実に順次実行されるので、どのステップに対しても、実行中のスレーブノードの数を指定 できます。 コンソールを使用してクラスターのサイズを変更する 実行中のクラスターのサイズを変更するために、Amazon EMR コンソールを使用できます。 コンソールを使用して、実行中のクラスターのサイズを変更するには 1. [Cluster List] ページで、サイズを変更するクラスターを選択します。 2. [Cluster Details] ページで、[Resize] を選択します。または、[Hardware Configuration] セクション を展開して、コアグループまたはタスクグループの横にある [Resize] ボタンを選択することもで きます。 3. コアグループまたは 1 つ以上のタスクグループにノードを追加するには、[Count] 列の [Resize] リンクをクリックし、インスタンスの数を変更して緑色のチェックマークを選択します。 タスクインスタンスグループを追加するには、[Add task instance group]] を選択し、タスクノー ドのタイプ、タスクノードの数、およびタスクノードがスポットインスタンスであるかどうかを 選択します。48 個を超えるタスクグループを追加しようとすると、エラーメッセージが表示さ れます。クラスターがタスクグループなしで起動された場合は、[Add task nodes] を選択してグ ループを追加します。 Note コアノードの数は、コンソールを使用して追加することしかできませんが、タスクノードの 数は増減することができます。 ノードの数を変更したとき、Amazon EMR コンソールは準備が整うまで Provisioning 状態および Resizing 状態により、インスタンスグループのステータスを更新し、新しく必要なノードの数をブラ ケット内に表示します。ノード数の変更が完了すると、インスタンスグループは Running 状態に戻り ます。 AWS CLI を使用してクラスターのサイズを変更する 実行中のクラスターのサイズを変更するために、AWS CLI を使用できます。タスクノードの数は増減 することができ、実行中のクラスターのコアノードの数を増やすことができます。AWS CLI または API を使用して、コアインスタンスグループのインスタンスを終了することもできます。そうする場 合は、注意が必要です。コアインスタンスグループのインスタンスを終了すると、データを喪失する 危険性があり、インスタンスの自動的な置換が行われなくなります。 コアグループおよびタスクグループのサイズの変更以外に、AWS CLI を使用して、実行中のクラス ターに 1 つ以上のタスクインスタンスグループを追加することもできます。 495 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する AWS CLI を使用してインスタンス数を変更することでクラスターのサイズを変更するには コアグループまたはタスクグループにインスタンスを追加でき、AWS CLI の modify-instancegroups サブコマンドを InstanceCount パラメーターと共に使用して、タスクグループか らインスタンスを削除できます。コアグループまたはタスクグループにインスタンスを追 加するには、InstanceCount を増やします。タスクグループのインスタンス数を減らすに は、InstanceCount を減らします。タスクグループのインスタンス数を 0 に変更すると、すべての インスタンスが削除されますが、インスタンスグループは削除されません。 • タスクインスタンスグループのインスタンス数を 3 個から 4 個に増やすには、次のコマンドを入 力し、ig-31JXXXXXXBTO をインスタンスグループ ID に置き換えます。 aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-31JXXXXXXBTO,InstanceCount=4 InstanceGroupId を取得するには、describe-cluster サブコマンドを使用します。出力 は、各インスタンスグループの ID が含まれている、Cluster という名前の JSON オブジェクト です。このコマンドを使用するには、クラスター ID が必要です(aws emr list-clusters コ マンドまたはコンソールを使用して取得できます)。インスタンスグループ ID を取得するには、 次のコマンドを入力し、j-2AXXXXXXGAPLF をクラスター ID に置き換えます。 aws emr describe-cluster --cluster-id j-2AXXXXXXGAPLF AWS CLI を使用して、--modify-instance-groups サブコマンドでコアインスタンスグルー プのインスタンスを終了することもできます。そうする場合は、注意が必要です。コアインスタ ンスグループのインスタンスを終了すると、データを喪失する危険性があり、インスタンスの自 動的な置換が行われなくなります。特定のインスタンスを終了するには、インスタンスグループ ID(aws emr describe-cluster --cluster-id サブコマンドによって返されます)とイン スタンス ID(aws emr list-instances --cluster-id サブコマンドによって返されます) が必要です。次のコマンドを入力し、ig-6RXXXXXX07SA をインスタンスグループ ID に置き換 え、i-f9XXXXf2 をインスタンス ID に置き換えます。 aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-6RXXXXXX07SA,EC2InstanceIdsToTerminate=i-f9XXXXf2 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 AWS CLI を使用してタスクインスタンスグループを追加することによってクラスターのサイ ズを変更するには AWS CLI を使用して、--add-instance-groups サブコマンドで 1 個から 48 個までのタスクイン スタンスグループをクラスターに追加できます。タスクインスタンスグループは、マスターインスタ ンスグループとコアインスタンスグループが含まれているクラスターだけに追加できます。AWS CLI を使用する場合は、--add-instance-groups サブコマンドを使用するたびに最大で 5 個のタスク インスタンスグループを追加できます。 1. クラスターに 1 つのタスクインスタンスグループを追加するには、次のコマンドを入力し、jJXBXXXXXX37R をクラスター ID に置き換えます。 aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instance-groups InstanceCount=6,InstanceGroupType=task,InstanceType=m1.large 496 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する 2. クラスターに複数のタスクインスタンスグループを追加するには、次のコマンドを入力し、jJXBXXXXXX37R をクラスター ID に置き換えます。1 つのコマンドで最大 5 個のタスクインスタ ンスグループを追加できます。 aws emr add-instance-groups --cluster-id j-JXBXXXXXX37R --instancegroups InstanceCount=6,InstanceGroupType=task,InstanceType=m1.large InstanceCount=10,InstanceGroupType=task,InstanceType=m3.xlarge AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 サイズ変更の中断 Note この機能は Amazon EMR リリース 4.1.0 以降用です。 既存のサイズ変更処理中に、サイズ変更を実行することができます。さらに、既に提出されたサイズ 変更リクエストを中止したり、新規リクエストを提出して先のリクエストの処理が終了するのを待 たずに上書きすることもできます。また、既存するサイズ変更リクエストをコンソールから中止した り、クラスターのターゲット数を現在の数とした ModifyInstanceGroups API 呼び出しを使用して 中止することも可能です。 以下のスクリーンショットには、[Stop] を選択することで中止することのできる、サイズ変更中のタ スクインスタンスグループが示されています。 CLI を使用してサイズ変更を中断するには [modify-instance-groups] サブコマンドで AWS CLI を利用することで、サイズ変更を中断するこ とができます。インスタンスグループに 6 つのインスタンスがあり、これを 10 に増やしたいとしま す。そして、その後このリクエストをキャンセルしたいとします: • 最初のリクエスト: aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=10 最初のリクエストを中止する 2 番目のリクエスト: aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-myInstanceGroupId,InstanceCount=6 Note この処理は非同期であるため、後から申請したリクエストが反映される前に、以前の API リ クエストに関したインスタンスの数の変更が表示される場合があります。サイズを縮小する 場合、現行のノードで作業中のインスタンスグループのサイズは、それらのノードにおける 作業が完了するまで縮小されないことがあります。 497 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する arrested 状態 新しいクラスターノードを起動しようとしているときに、多数のエラーが発生すると、インスタンス グループが arrested 状態になります。たとえば、ブートストラップアクションを実行中に新しいノー ドが失敗した場合、インスタンスグループは ARRESTED 状態になり、それ以降新しいノードのプロ ビジョニングが行われなくなります。基本となる問題を解決したら、クラスターのインスタンスグ ループで必要な数のノードをリセットしてください。その後、インスタンスグループはノードの割り 当てを再開します。インスタンスグループを変更すると、Amazon EMR は再度ノードをプロビジョニ ングしようとします。実行中のノードについては再開または終了しません。 AWS CLI では、list-instances サブコマンドは describe-cluster サブコマンドと同様に、す べてのインスタンスとその状態を返します。Amazon EMR によってインスタンスグループのエラーが 検出されると、グループの状態は ARRESTED に変更されます。 AWS CLI を使用して ARRESTED 状態のクラスターをリセットするには クラスター内のインスタンスの状態を表示するには、describe-cluster サブコマンドを入力 し、--cluster-id パラメーターを指定します。 • クラスター内のすべてのインスタンスとインスタンスグループについての情報を表示するには、 次のコマンドを入力し、j-3KVXXXXXXY7UG をクラスター ID に置き換えます。 aws emr describe-cluster --cluster-id j-3KVXXXXXXY7UG 出力には、インスタンスグループとインスタンスの状態に関する情報が表示されます: { "Cluster": { "Status": { "Timeline": { "ReadyDateTime": 1413187781.245, "CreationDateTime": 1413187405.356 }, "State": "WAITING", "StateChangeReason": { "Message": "Waiting after step completed" } }, "Ec2InstanceAttributes": { "Ec2AvailabilityZone": "us-west-2b" }, "Name": "Development Cluster", "Tags": [], "TerminationProtected": false, "RunningAmiVersion": "3.2.1", "NormalizedInstanceHours": 16, "InstanceGroups": [ { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187775.749, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } 498 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する }, "Name": "MASTER", "InstanceGroupType": "MASTER", "InstanceType": "m1.large", "Id": "ig-3ETXXXXXXFYV8", "Market": "ON_DEMAND", "RunningInstanceCount": 1 }, { "RequestedInstanceCount": 1, "Status": { "Timeline": { "ReadyDateTime": 1413187781.301, "CreationDateTime": 1413187405.357 }, "State": "RUNNING", "StateChangeReason": { "Message": "" } }, "Name": "CORE", "InstanceGroupType": "CORE", "InstanceType": "m1.large", "Id": "ig-3SUXXXXXXQ9ZM", "Market": "ON_DEMAND", "RunningInstanceCount": 1 } ... } 特定のインスタンスグループについての情報を表示するには、list-instances サブコマンドを 入力し、--cluster-id および --instance-group-types パラメーターを指定します。マス ター、コア、またはタスクグループの情報を表示できます。 aws emr list-instances --cluster-id j-3KVXXXXXXY7UG --instance-grouptypes "CORE" ARRESTED 状態のクラスターをリセットするには、modify-instance-groups サブコマン ドを使用し、--instance-groups パラメーターを指定します。インスタンスグループ ID は、describe-cluster サブコマンドによって返されます。 aws emr modify-instance-groups --instance-groups InstanceGroupId=ig-3SUXXXXXXQ9ZM,InstanceCount=3 499 Amazon EMR 開発者ガイド 実行中のクラスターのサイズを手動で変更する レガシークラスター 2010 年 10 月より前には、Amazon EMR に、インスタンスグループという概念がありませんでした。 実行中のクラスターのサイズを変更するオプションが利用できるようになる前に作成された Amazon EMR 用に開発されたクラスターは、レガシークラスターとみなされます。以前の Amazon EMR アー キテクチャーでは、インスタンスグループを使わずにノードを管理していました。また、スレーブ ノードのタイプも 1 つしかありませんでした。レガシークラスターは、slaveInstanceType と、今 は使われていない他のフィールドを参照しています。Amazon EMR では、引き続きレガシークラス ターがサポートされているので、変更しなくても適切に実行できます。 クラスターの動作 レガシークラスターを実行し、マスターノードとスレーブノードのみを設定する場合は、クラスター に関連付けられている今は使われていない他のフィールドと slaveInstanceType を確認します。 レガシークラスターのインスタンスグループへのマッピング 2010 年 10 月の前は、すべてのクラスターノードはマスターノードかスレーブノードのどちらかでし た。Amazon EMR 設定は、通常は次の図にように表されます。 古い Amazon EMR モデル 1 レガシークラスターが起動し、リクエストが Amazon EMR に送信され、クラスターが 開始します。 2 Amazon EMR が Hadoop クラスターを作成します。 3 レガシークラスターは、1 つのマスターノードと、指定した数のスレーブノードで構成 されるクラスターで実行されます。 以前のモデルを使用して作成されたクラスターが完全にサポートされ、最初に計画したとおりに機能 します。Amazon EMR API とコマンドは、新しいモデルに直接マッピングされます。マスターノード はマスターノードのままで、マスターインスタンスグループの一部になります。スレーブノードでは 引き続き HDFS が実行されます。このスレーブノードはコアノードになり、コアインスタンスグルー プに含められます。 Note タスクインスタンスグループまたはタスクノードが、レガシークラスターの一部として作成 されることはありませんが、これらのグループやノードは、いつでも実行中のクラスターに 追加できます。 次の図は、レガシークラスターが、マップインスタンスグループおよびコアインスタンスグループに どのようにマッピングされるかを示しています。 500 Amazon EMR 開発者ガイド クラスターのスケールダウンを設定する 現在のアーキテクチャーに再マッピングされた古い Amazon EMR モデル 1 リクエストが Amazon EMR に送信され、クラスターが開始します。 2 Hadoop クラスター、およびマスターインスタンスグループとコアインスタンスグループが作成 されます。 3 マスターノードはマスターインスタンスグループに追加されます。 4 スレーブノードはコアインスタンスグループに追加されます。 クラスターのスケールダウンを設定する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR バージョン 5.1.0 以降では、終了リクエストが発行されたときの、Amazon EC2 インス タンスのスケールダウンの動作を設定できます。終了リクエストは、スケールインアクティビティを トリガーする自動スケーリングポリシーから届く場合と、クラスターのサイズが変更されたときにイ ンスタンスグループからのインスタンスの手動削除から届く場合があります。スケールダウン動作に は 2 つのオプションがあります。Amazon EC2 請求のインスタンス時間境界での終了と、タスク完了 時の終了です。AWS マネジメントコンソール Amazon EMR コンソール、AWS CLI、または Amazon EMR API を使用できます。インスタンスを終了するリクエストがいつ送信されたかにかかわらず、デ フォルトでは、インスタンス時間の境界で終了します。これは、インスタンスがいつ終了したかにか かわらず、Amazon EC2 は 1 時間分の料金を課金するためです。この動作で、クラスターで実行して 501 Amazon EMR 開発者ガイド クラスターのスケールダウンを設定する いるアプリケーションが、動的なスケーリング環境で、よりコスト効率良く Amazon EC2 インスタン スを活用できます。まず、Amazon EMR は最小のタスクを持つ、またはタスクを持たないノードを終 了します。 5.1.0 よりも前のバージョンで 4.1.0 で始まる Amazon EMR を使用して作成されたクラスターは、デ フォルトで、Amazon EMR タスク完了時に Amazon EC2 インスタンスを終了します。これらのバー ジョンでは、インスタンス時間の境界での終了を利用できません。タスク完了時に終了する場合、イ ンスタンス時間の境界にかかわらず、Amazon EMR では、Amazon EC2 インスタンスを終了する前に ノードからのタスクをブラックリストに記載して排出します。 いずれの動作でも、HDFS 破損につながる可能性があれば、Amazon EMR はコアインスタンスグルー プの EC2 インスタンスを終了しません。 Amazon EMR スケールダウン動作を設定する Note この設定機能は Amazon EMR リリース 5.1.0 以降でのみ使用可能です。 クラスターを作成する際、AWS マネジメントコンソール、AWS CLI,、Amazon EMR API を使用して スケールダウン動作を設定できます。AWS マネジメントコンソール を使用したスケールダウンの設 定は、詳細オプションを使用してクラスターを作成するときに、Step 3: General Cluster Settings 画面 で完了しています。 yAWS CLI を使用してクラスターを作成する場合、--ScaleDownBehavior オプションを使用して TERMINATE_AT_INSTANCE_HOUR または TERMINATE_AT_TASK_COMPLETION を指定します。 タスクの完了時に終了 Amazon EMR では、ワークロードに支障を与えることなくクラスターをスケールダウンする ことができます。Amazon EMR では、コアおよびタスクノードにおけるサイズ縮小処理中の YARN、HDFS、およびその他のデーモンを、データ損失やジョブを中断することなく平滑に停 止します。Amazon EMR では、作業が完了してアイドル状態となったインスタンスグループのみ を縮小します。YARN NodeManager の停止には、/etc/hadoop/conf/yarn-site.xml 内の yarn.resourcemanager.decommissioning.timeout で、ノードが停止するまでの時間を手動で 調整することができます。停止時間がタイムアウトした時点で実行中のコンテナーまたは YARN アプ リケーションがあった場合、そのノードは強制的に停止され、実行中のコンテナーは YARN によって 他のノードで再スケジュールされます。デフォルト値は 3600秒 (1 時間) で、サイズ縮小リクエストさ れた YARN ノードは一時間以内に停止されます。このタイムアウト時間は、縮小を平滑に強制して行 えるように、任意的に長くすることができます。 タスクノードグループ Amazon EMR では、タスクを実行していないインスタンスを賢く選択して、クラスターから最初に 削除します。クラスター内のすべてのインスタンスが使用されている場合、Amazon EMR はそのイ ンスタンスのタスクが完了するの待ってからクラスターから削除します。デフォルトの待ち時間は 1 時間ですが、yarn.resourcemanager.decommissioning.timeout で設定変更することが可能で 502 Amazon EMR 開発者ガイド コンソールを使用してクラスターを複製する す。Amazon EMR では、この新しい設定が動的に使用されます。クラスターのサイズ縮小中にタスク が中断されないよう、この値を任意的に大きく設定することができます。 コアノードグループ コアノードでは、インスタンスグループのサイズを縮小するのに YARN NodeManager および HDFS DataNode デーモンの両方を停止する必要があります。YARN では、平滑なサイズ縮小により、停止 されるようマークされたノードは保留中や未完了のコンテナーまたはアプリケーションがないときに 限って停止済み状態に移行されます。停止作業開始時においてノードでコンテナーが実行されていな い場合、停止作業は即終了します。 HDFS では、平滑なサイズ縮小により、HDFS のターゲット容量にすべての既存ブロックが収まるよ う十分な大きさが確保されます。ターゲット容量の大きさが十分でない場合、残りのノードが HDFS にある現在のデータを処理できるように、一部のコアインスタンスのみが停止されます。ノードが完 全に停止されるよう、HDFS に十分な容量があるよう確認してください。サイズ変更処理が遅れない ように、インスタンスグループのサイズを縮小する前に書き込み I/O を最小限にしておきます。 別の制限として、/etc/hadoop/conf/hdfs-site 内の dfs.replication という既定レプリケー ション要素があります。Amazon EMR では、クラスター内のインスタンス数によって値が設定され ます。インスタンス数 1 から 3 の場合は 1、インスタンス数 4 から 9 の場合は 2、インスタンス数が 10 以上の場合は 3 となります。平滑なサイズ縮小では、HDFS レプリケーション要素以下のコアノー ドの縮小は行われません。これは、HDFS によって不十分なレプリカが原因でファイルが閉じれなく なる問題を防ぐためです。この制限を回避するには、レプリケーション要素を低く設定し直してから NameNode デーモンを再起動する必要があります。 コンソールを使用してクラスターを複製する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR コンソールを使用してクラスターを複製できます。これにより、新しいクラスターの基 盤として使用する元のクラスターの設定のコピーを作成します。 コンソール を使用してクラスターを作成するには 1. [Cluster List] ページで、複製するクラスターをクリックします。 2. [Cluster Details] ページの上部で、[Clone] をクリックします。 クローンとして作成されたクラスターに元のクラスターのステップを含めるには、ダイアログ ボックスで [Yes] を選択します。ステップを含めずに元のクラスターの設定のクローンを作成す るには、[No] を選択します。 Note AMI 3.1.1 以降(Hadoop 2.x)または AMI 2.4.8 以降(Hadoop 1.x)を使用して作成さ れたクラスターでは、ステップを含めてクラスターのクローンを作成すると、すべての システムステップ(Hive の設定など)が、ユーザーが送信したステップと共にクロー ンとして作成されます。ステップの最大数は合計で 1,000 ステップです。コンソール のステップ履歴に表示されなくなった以前のステップは、クローンとして作成すること はできません。以前の AMI では、クローンとして作成できるステップは 256 ステップ までです(システムステップを含む)。詳細については、「クラスターへの作業の送 信 (p. 504)」を参照してください。 3. [Create Cluster] ページが、元のクラスターの設定のコピーとともに表示されます。設定を確認 し、必要な変更を加え、[Create Cluster] をクリックします。 503 Amazon EMR 開発者ガイド クラスターへの作業の送信 クラスターへの作業の送信 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、Amazon EMR クラスターに作業を送信する方法を説明します。クラスターに 作業を送信するには、ステップを追加するか、マスターノードに Hadoop ジョブをインタラクティブ に送信します。クラスターで使用できる保留中のステップとアクティブなステップの最大数は 256 で す。クラスターで実行しているアクティブなステップが 256 ある場合でも、マスターノードにジョブ をインタラクティブに送信できます。長時間稼働するクラスターが存続する間は、送信できるステッ プの数に制限はありませんが、任意の時点でアクティブまたは保留中にできるステップは 256 ステッ プまでです。 AMI バージョン 3.1.0 以前(Hadoop 2.x)または AMI バージョン 2.4.7 以前(Hadoop 1.x)を使用し て作成されたクラスターの場合は、クラスターの存続期間中に使用できるステップの総数が 256 に 制限されます。この制限を回避する方法については、「256 を超えるステップをクラスターに追加す る (p. 508)」を参照してください。 トピック • CLI およびコンソールを使用した手順の作業 (p. 504) • Hadoop ジョブのインタラクティブな送信 (p. 507) • 256 を超えるステップをクラスターに追加する (p. 508) CLI およびコンソールを使用した手順の作業 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターにステップを追加するには、AWS マネジメントコンソール、AWS CLI、または Amazon EMR API を使用します。クラスターで使用できる保留中のステップとアクティブなステップの最大数 は 256 です (これには、Pig のインストール、Hive のインストール、HBase のインストール、デバッ グの設定などのシステムステップも含まれます)。長時間稼働するクラスターが存続する間は、送信で きるステップの数に制限はありませんが、任意の時点でアクティブまたは保留中にできるステップは 256 ステップまでです。バージョン 5.0.0 を除いた EMR バージョン 4.8.0 以降では、AWS マネジメ ントコンソール、AWS CLI、または Amazon EMR API を使用する保留中のステップをキャンセルす ることができます。 クラスターへのステップの追加 クラスターにステップを追加するには、AWS CLI、Amazon EMR SDK、または AWS マネジメント コンソール を使用します。AWS マネジメントコンソール を使用して、クラスターの作成時にクラス ターにステップを追加できます。長時間稼働クラスター、すなわち自動終了オプションが無効になっ ているクラスターにステップを追加できます。 コンソールを使用したステップの追加 クラスターの作成時にステップを追加する場合も、クラスターにステップを追加する場合も、手順は 以下のようになります。 AWS マネジメントコンソール を使用して実行中のクラスターにステップを追加するには 1. Amazon EMR コンソールの [Cluster List] ページで、クラスターのリンクをクリックします。 504 Amazon EMR 開発者ガイド CLI およびコンソールを使用した手順の作業 2. [Cluster Details] ページで [Steps] セクションを展開し、[Add step] をクリックします。 3. [Add Step] ダイアログボックスの各フィールドに適切な値を入力し、[Add] をクリックします。ス テップタイプによってオプションが異なります。 AWS CLI を使用してステップを追加する 以下の手順は、AWS CLI を使用して、新しく作成されるクラスターと実行中のクラスターにステップ を追加する方法を示しています。どちらの例でも、クラスターにステップを追加するために --steps サブコマンドを使用してします。 クラスターの作成時にステップを追加するには • 以下のコマンドを入力し、クラスターを作成して Pig ステップを追加します。myKey を EC2 キーペアの名前に置き換え、mybucket を Amazon S3 バケットの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 2.4 -applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ --steps Type=PIG,Name="Pig Program",ActionOnFailure=CONTINUE,Args=[f,s3://mybucket/scripts/pigscript.pig,-p,INPUT=s3://mybucket/ inputdata/,-p,OUTPUT=s3://mybucket/outputdata/,$INPUT=s3://mybucket/ inputdata/,$OUTPUT=s3://mybucket/outputdata/] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --amiversion 2.4 --applications Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge -steps Type=PIG,Name="Pig Program",ActionOnFailure=CONTINUE,Args=[f,s3://mybucket/scripts/pigscript.pig,-p,INPUT=s3://mybucket/ inputdata/,-p,OUTPUT=s3://mybucket/outputdata/,$INPUT=s3://mybucket/ inputdata/,$OUTPUT=s3://mybucket/outputdata/] Note 引数のリストはステップのタイプによって異なります。 出力は、 { "ClusterId": "j-2AXXXXXXGAPLF" } のようなクラスター識別子です。 505 Amazon EMR 開発者ガイド CLI およびコンソールを使用した手順の作業 実行中のクラスターにステップを追加するには • 以下のコマンドを入力し、実行中のクラスターに ステップを追加します。j-2AXXXXXXGAPLF を クラスター ID に置き換え、mybucket を Amazon S3 バケット名に置き換えます。 aws emr add-steps --cluster-id j-2AXXXXXXGAPLF --steps Type=PIG,Name="Pig Program",Args=[-f,s3://mybucket/scripts/pigscript.pig,-p,INPUT=s3:// mybucket/inputdata/,-p,OUTPUT=s3://mybucket/outputdata/,$INPUT=s3:// mybucket/inputdata/,$OUTPUT=s3://mybucket/outputdata/] 出力は、 { "StepIds": [ "s-Y9XXXXXXAPMD" ] } のようなステップ識別子です。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 ステップの表示 表示できるステップレコードの合計数は、ステップのステータスに関係なく、1,000 ステップです。 この合計数には、ユーザーが送信したステップとシステムステップが含まれます。ユーザーが送信し たステップのステータスが完了または失敗に変わると、制限である 1,000 ステップに到達するまで、 ユーザーが送信した他のステップをクラスターに追加できます。1,000 ステップがクラスターに追加 された後で、さらにステップを送信すると、ユーザーが送信した以前のステップレコードが古い順に 削除されます。ただし、これらレコードはログファイルからは削除されません。これらのレコードは コンソール画面から削除され、CLI や API を使用してクラスター情報を取得するときに表示されなく なります。システムステップレコードは削除されません。 表示できるステップ情報は、クラスター情報の取得で使用するメカニズムによって異なります。以下 の表は、使用可能な各オプションで返されるステップ情報を示しています。 オプション DescribeJobFlow または -describe --jobflow ListSteps または list-steps SDK 256 ステップ 1,000 ステップ Amazon EMR CLI 256 ステップ NA AWS CLI NA 1,000 ステップ API 256 ステップ 1,000 ステップ 保留中のステップのキャンセル AWS マネジメントコンソール、AWS CLI、または Amazon EMR API を使用してステップをキャンセ ルできます。PENDING のステップのみキャンセルできます。 AWS マネジメントコンソール を使用してステップをキャンセルするには 1. Amazon EMR console の [Cluster List] ページで、クラスターのリンクを選択します。 506 Amazon EMR 開発者ガイド Hadoop ジョブのインタラクティブな送信 2. [Cluster Details] ページで、[Steps] セクションを展開します。 3. 各ステップをキャンセルするには、[Steps] のリストでステップを選択し、[Cancel step] を選択 し、キャンセルするステップを確認します。 AWS CLI を使用してステップをキャンセルするには • クラスターとキャンセルするステップを指定して、aws emr cancel-steps コマンドを使用し ます。次の例では、2 つのステップをキャンセルする AWS CLI コマンドについて説明します。 aws emr cancel-steps --ClusterID j-2QUAJ7T3OTEI8 -StepIDs s-3M8DKCZYYN1QE,s-3M8DKCZYYN1QE Hadoop ジョブのインタラクティブな送信 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターにステップを追加する他に、SSH クライアントまたは AWS CLI を使用してマスターノー ドに接続し、インタラクティブに Hadoop ジョブを送信できます。たとえば、PuTTY を使用してマス ターノードとの SSH 接続を確立し、1 つ以上の Hadoop ジョブにコンパイルされるインタラクティブ な Hive クエリを送信できます。 Hadoop ジョブをインタラクティブに送信するには、マスターノードへの SSH 接続を確立するか (PuTTY または OpenSSH などの SSH クライアントを使用)、AWS CLI で ssh サブコマンドを使 用します。クラスターで実行しているアクティブなステップが 256 ある場合でも、マスターノードに ジョブをインタラクティブに送信できます。ただし、インタラクティブに送信されるジョブに関連付 けられているログレコードが、現在実行されているステップのコントローラログの [step created jobs] セクションに含まれることに注意してください。ステップログの詳細については、「ログファイルを 表示する (p. 426)」を参照してください。 以下の例は、マスターノードに Hadoop ジョブと Hive ジョブをインタラクティブに送信する方法を示 しています。他のプログラミングフレームワーク(Pig など)でジョブを送信するプロセスも、これ らの例と同様です。 AWS CLI を使用してインタラクティブに Hadoop ジョブを送信するには • AWS CLI を使用して、CLI コマンドで SSH 接続を確立することによって(ssh サブコマンドを 使用)、インタラクティブに Hadoop ジョブを送信できます。 ローカルの Windows マシンからマスターノードのファイルシステムに JAR ファイルをコ ピーするには、次のコマンドを入力します。j-2A6HXXXXXXL7J をクラスター ID に置き換 え、mykey.ppk をキーペアファイルの名前に置き換え、myjar.jar を JAR ファイルの名前に置 き換えます。 aws emr put --cluster-id j-2A6HXXXXXXL7J --key-pair-file "C:\Users \username\Desktop\Keys\mykey.ppk" --src "C:\Users\username\myjar.jar" SSH 接続を作成し、Hadoop ジョブ myjar.jar を送信するには、次のコマンドを入力します。 aws emr ssh --cluster-id j-2A6HXXXXXXL7J --key-pair-file "C:\Users \username\Desktop\Keys\mykey.ppk" --command "hadoop jar myjar.jar" 507 Amazon EMR 開発者ガイド 256 を超えるステップをクラスターに追加する AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 AWS CLI を使用してインタラクティブに Hive ジョブを送信するには JAR ファイルを通じてマスターノードにジョブを送信するだけでなく、マスターノード上で実行され ている Hadoop プログラミングフレームワークのいずれかとやり取りすることによって、ジョブを送 信することもできます。たとえば、コマンドラインで Hive クエリまたは Pig 変換をインタラクティブ に送信できます。または、スクリプトをクラスターに送信して処理できます。その場合、コマンドま たはスクリプトは、1 つ以上の Hadoop ジョブにコンパイルされます。 次の手順は、AWS CLI を使用して Hive スクリプトを実行する方法を示しています。 1. クラスターに Hive がインストールされていない場合は、次のコマンドを入力してインストールし ます。j-2A6HXXXXXXL7J をクラスター ID に置き換えます。 aws emr install-applications --cluster-id j-2A6HXXXXXXL7J --apps Name=Hive 2. 実行するクエリまたはコマンドを含む Hive スクリプトファイルを作成します。次の my-hive.q という名前のサンプルスクリプトでは、aTable と anotherTable という 2 つのテーブルを作成 し、aTable の内容を anotherTable にコピーして、すべてのデータを置き換えます。 ---- sample Hive script file: my-hive.q ---create table aTable (aColumn string) ; create table anotherTable like aTable; insert overwrite table anotherTable select * from aTable 3. 次のコマンドを入力して、コマンドラインから ssh サブコマンドを使用してスクリプトを実行し ます。 Windows マシンからクラスターに my-hive.q をコピーするには、次のコマンドを入力しま す。j-2A6HXXXXXXL7J をクラスター ID に置き換え、mykey.ppk をキーペアファイルの名前に 置き換えます。 aws emr put --cluster-id j-2A6HXXXXXXL7J --key-pair-file "C:\Users \username\Desktop\Keys\mykey.ppk" --src "C:\Users\username\my-hive.q" SSH 接続を作成し、Hive スクリプト my-hive.q を送信するには、次のコマンドを入力します。 aws emr ssh --cluster-id j-2A6HXXXXXXL7J --key-pair-file "C:\Users \username\Desktop\Keys\mykey.ppk" --command "hive -f my-hive.q" AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 256 を超えるステップをクラスターに追加する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AMI 3.1.1(Hadoop 2.x)および AMI 2.4.8(Hadoop 1.x)以降、長時間稼働するクラスターが存続す る間は、送信できるステップの数に制限はありませんが、任意の時点でアクティブまたは保留中にで 508 Amazon EMR 開発者ガイド AWS Data Pipeline でクラスターを自動的に繰り返す きるステップは 256 ステップまでです。それ以前の AMI バージョンの場合は、クラスターで処理でき るステップの総数が 256 に制限されます(Hive のインストールや Pig のインストールなどのシステム ステップを含む)。詳細については、「クラスターへの作業の送信 (p. 504)」を参照してください。 3.1.1 より前および 2.4.8 より前の AMI での 256 ステップの制限を回避するために、次のいくつかの 方法のうちのいずれかを使用できます。 1. 各ステップから Hadoop に複数のジョブを送信する。これによって、3.1.1 および 2.4.8 よりも前の バージョンの AMI におけるステップ数が無制限になるわけではありませんが、256 を超えるステッ プの数が決まっている場合には最も簡単な方法です。 2. 長時間稼働クラスター上のステップ内で実行されるワークフロープログラムを記述し、ジョブを Hadoop に送信する。ワークフロープログラムは、次のいずれかを行うようにすることが考えられ ます。 • Amazon SQS キューをリッスンして、実行すべき新しいステップに関する情報を受け取る。 • 実行すべき新しいステップに関する情報を含むファイルがないか、定期的なスケジュールで Amazon S3 バケットをチェックする。 3. EC2 インスタンス上で実行されるワークフロープログラムを Amazon EMR 外で作成し、SSH を使 用して長時間稼働クラスターにジョブを送信します。 4. SSH 経由で長時間稼働クラスターに接続し、Hadoop API を使用して Hadoop ジョブを送信し ます。詳細については、http://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/ JobClient.htmlを参照してください。 5. SSH クライアント(PuTTY や OpenSSH など)を使用してマスターノードに接続し、手動でジョ ブをクラスターに送信するか、AWS CLI で ssh サブコマンドを使用して接続とジョブの送信の両 方を行います。マスターノードとの SSH 接続を確立する方法の詳細については、「SSH を使用し てマスターノードに接続する (p. 459)」を参照してください。インタラクティブに Hadoop ジョブ を送信する方法の詳細については、「Hadoop ジョブのインタラクティブな送信 (p. 507)」を参照 してください。 AWS Data Pipeline でクラスターを自動的に繰り 返す このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS Data Pipeline は、データの移動と変換を自動化するサービスです。これを使用して入力データ の Amazon S3 への移動をスケジュールし、クラスターの起動によってそのデータを処理するようス ケジュールできます。例えば、トラフィックログを記録するウェブサーバーがあるとします。トラ フィックデータを分析するために毎週クラスターを実行する必要がある場合、AWS Data Pipeline を 使用してそれらのクラスターをスケジュールできます。AWS Data Pipeline はデータドリブンワーク フローであり、1 つのタスク(クラスターの起動)が別のタスク(入力データの Amazon S3 への移 動)に依存する場合があります。また、強力な再試行機能もあります。 AWS Data Pipeline の詳細については、「AWS Data Pipeline 開発者ガイド」(特に Amazon EMR に 関するチュートリアル)を参照してください。 • チュートリアル: Amazon EMR ジョブフローを起動する • 使用開始: AWS Data Pipeline、Amazon EMR、および Hive でウェブログを処理する • チュートリアル: AWS Data Pipeline を使用した Amazon DynamoDB のインポートとエクスポート 509 Amazon EMR 開発者ガイド クラスターをトラブルシューティン グする このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このドキュメントは、Amazon EMR の バージョン 4.x および 5.x を対象としています。Amazon EMR AMI バージョン 2.x および 3.x については、Amazon EMR 開発者ガイド (PDF) を参照してく ださい。 Amazon EMR でホストされたクラスターは、複数のタイプのオープンソースソフトウェア、カスタム アプリケーションコード、およびアマゾン ウェブ サービスで構成される複雑なエコシステムで実行さ れます。これらのいずれかのパーツに問題があると、クラスターでエラーが発生したり、予想よりも 完了時間が長くなったりする場合があります。次のトピックでは、クラスターで何が問題となったの かを理解し、その修正方法を参照します。 トピック • トラブルシューティングに利用可能なツールは何ですか? (p. 511) • Amazon EMR AMI の既知の問題 (p. 512) • 失敗したクラスターのトラブルシューティング (p. 518) • 遅いクラスターのトラブルシューティング (p. 523) • Amazon EMR の共通エラー (p. 530) 新しい Hadoop アプリケーションを開発する場合は、デバッグを有効にして、代表的なデータの小さ なサブセットを処理してアプリケーションをテストすることをお勧めします。また、アプリケーショ ンをステップごとに実行して、各ステップを個別にテストすることもできます。詳細については、 「ログ記録およびデバッグの作成(オプション) (p. 204)」および「ステップ 5: 手順を追ってのクラ スターのテスト (p. 522)」を参照してください。 510 Amazon EMR 開発者ガイド トラブルシューティングに利用可能なツールは何ですか? トラブルシューティングに利用可能なツールは何 ですか? このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 何が問題かを判別するために、クラスターに関する情報を収集できるツールがあります。ツールに よっては、クラスターを起動する際に初期化が必要です。それ以外はすべてのクラスターで利用でき ます。 トピック • クラスターの詳細を表示するツール (p. 511) • ログファイルを表示するツール (p. 511) • クラスターのパフォーマンスを監視するツール (p. 512) クラスターの詳細を表示するツール クラスターに関する詳細情報を取得するには、すべての Amazon EMR インターフェイス(コン ソール、CLI、または API)を使用できます。詳細については、「クラスターの詳細情報を表示す る (p. 422)」を参照してください。 Amazon EMR コンソールの詳細ペイン コンソールには、アクティブか、終了されているかに関わらず、過去 2 週間に起動したすべてのクラ スターが表示されます。クラスターをクリックした場合、コンソールにはクラスターに関する情報が 詳細ペインに表示されます。 Amazon EMR コマンドラインインターフェイス --describe 引数を使用して、CLI からクラスターに関する情報を検索できます。 Amazon EMR API DescribeJobFlows アクションを使用して、API からクラスターに関する情報を検索できます。 ログファイルを表示するツール Amazon EMR と Hadoop は両方、クラスターが実行されたときにログファイルを生成します。クラス ターを起動したときの設定に応じて、さまざまなツールからログファイルにアクセスできます。詳細 については、「ログ記録およびデバッグの作成(オプション) (p. 204)」を参照してください。 マスターノードのログファイル すべてのクラスターは、マスターノードの /mnt/var/log/ ディレクトリにログファイルを発行します。 ログファイルはクラスターが実行されている間のみ利用可能です。 Amazon S3 にアーカイブされたログファイル クラスターを起動し、Amazon S3 のログパスを指定した場合、クラスターは 5 分間隔でマスターノー ドの /mnt/var/log/ に保存されたログファイルを Amazon S3 にコピーします。これによって、クラス 511 Amazon EMR 開発者ガイド クラスターのパフォーマンスを監視するツール ターが終了された後でも確実にログファイルにアクセスできます。ファイルは 5 分間隔でアーカイブ されるため、突然終了したクラスターの最後の数分は利用できない可能性があります。 クラスターのパフォーマンスを監視するツール Amazon EMR では、クラスターのパフォーマンスを監視するためにいくつかのツールを提供していま す。 Hadoop Web インターフェイス すべてのクラスターは、クラスターに関する情報を含むマスターノードに Web インターフェイス一式 を発行します。SSH トンネルを使用してマスターノードの Web ページに接続することによって、こ れらの Web ページにアクセスできます。詳細については、「Amazon EMR クラスターでホストされ ているウェブサイトの表示 (p. 464)」を参照してください。 CloudWatch メトリクス すべてのクラスターがメトリクスを CloudWatch にレポートします。CloudWatch はメトリクスを追 跡する Web サービスです。これを使用して、メトリクスにアラームを設定できます。詳細について は、「CloudWatch でメトリクスをモニタリングする (p. 436)」を参照してください。 Ganglia Ganglia はクラスターモニタリングツールです。これを有効にするには、起動時にクラスターに Ganglia をインストールする必要があります。このように実行した後、マスターノードで実行中の Ganglia UI に SSH トンネルを使用して接続することによって、実行されているクラスターを監視でき ます。詳細については、「Ganglia でパフォーマンスをモニタリングする (p. 452)」を参照してくださ い。 Amazon EMR AMI の既知の問題 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、Amazon EMR でサポートされる Amazon マシンイメージ (AMI) の既知の問題 を示します。深刻な問題がある AMI は廃止されるため、使用しないでください。サポートされている AMI および廃止された AMI の詳細については、「Amazon EMR バージョン 2.x および 3.x でサポート される AMI バージョン (p. 60)」を参照してください。 多くの場合、既知の問題は新しい AMI で修正されます。入手可能な最新の AMI を使用することをお 勧めします。AWS CLI を使用して最新の AMI を使用していることを確認するには、--ami-version 3.2 など、--ami-version パラメーターを使用してメジャーおよびマイナーバージョン番号を指 定してください。AMI のバージョンの指定の詳細については、「AMI バージョン番号 (バージョン 2.x、3.x) (p. 57)」を参照してください。 一般的な問題 HBase シェルの過剰なデバッグログ記録 HBase シェルを使用中に、シェルで発生していることを知らせるログ記録が過剰になり、有効でなく なる場合があります。このログ記録の詳細は Zookeeper を使用する他のいずれのプロセスでも同じで あるため、/mnt が完全にいっぱいになる可能性があります。この問題を回避するには、次のブートス トラップアクションの呼び出し例をガイドとして使用します。 512 Amazon EMR 開発者ガイド Hadoop 2.4.0 AMI の既知の問題 aws emr create-cluster --ami-version 3.9.0 --instance-type m3.xlarge -instance-count 2 --ec2-attributes KeyName=myKey --use-default-roles -applications Name=HBase --bootstrap-actions --bootstrap-actions Path=s3:// support.elasticmapreduce/bootstrap-actions/misc/run-patch.bash,Args=["s3:// support.elasticmapreduce/patch/ami-3.x-fix-excessive-zookeeper-loggingall.patch"] Hadoop 2.4.0 AMI の既知の問題 次の既知の問題は Hadoop 2.4.0 AMI に影響を与えます。必要に応じて、問題を解決する AMI が示さ れます。既知の問題に対する回避策または新しい AMI への移行のサポートについては、AWS サポー ト担当者にお問い合わせください。 AMI 3.2.1 の問題 問題 解決 EMRFS DynamoDB メタデータテーブルがリー ジョン us-east-1 に作成される AMI 3.2.3 で解決済み クラスターの起動後に Hive サーバーが起動しな い AMI 3.2.3 で解決済み AMI 3.2.0 の問題 問題 解決 インスタンスストアボリュームが 3 個未満であ ることでジョブまたはクラスターが失敗するイ ンスタンスタイプでルートボリュームが容量の 100% に達する AMI 3.2.1 で解決済み 次のインスタンスタイプが影響を受けます: c3.xlarge、c3.2xlarge、c3.4xlarge、c3.8xlarge、c1.medium、m3.xlarge、m3.2xlarge、m2.xlarge、m2.2xlarge、m2.4x AMI 3.1.0(廃止)の問題 問題 解決 SSH 接続の詳細で示される URL lynx:// localhost:9026 および lynx:// localhost:9101 を使用して、マスターノー ドの Lynx ブラウザから ResourceManager イン ターフェイスおよび NameNode インターフェイ スにアクセスできない localhost をマスターのプライベート DNS 名 lynx://master private DNS:9026 に置き換 える インスタンスコントローラを再起動すると、予 期しない動作の原因となる通信エラーが発生す る AMI 3.1.3 と 3.2.3 で解決済み • コアノードのサイズ変更が失敗する • コンソールは間違った数のコアコードを報告 し、予定されたリタイアが原因で終了した 1 つ以上のノードを示す場合がある 513 SSH 接続の詳細は、AMI 3.1.2 で修正されます Amazon EMR 開発者ガイド Hadoop 2.2.0 AMI の既知の問題 問題 解決 • ジョブまたはクラスターが失敗する Hadoop 2.2.0 AMI の既知の問題 次の既知の問題は Hadoop 2.2.0 AMI に影響を与えます。必要に応じて、問題を解決する AMI が示さ れます。既知の問題に対する回避策または新しい AMI への移行のサポートについては、AWS サポー ト担当者にお問い合わせください。 AMI 3.0.4(廃止)の問題 問題 解決 Amazon Linux のカーネル更新による Ganglia の インストールエラー Ganglia ブートストラップアクションで解決済み HBase スナップショット作成時の ERROR: AMI 3.1.0 で解決済み java.lang.UnsupportedOperationException: This is supposed to be overridden by subclasses... S3 入力を読み取り中に Received IOException while reading '...', attempting to reopen... が断続的に表示さ れる AMI 3.1.0 で解決済み Hadoop NameNode および DataNode ヒープ サイズのデフォルト値が誤って 1 GB に設定さ れ、configure-daemons ブートストラップア クションを使用して設定できない AMI 3.1.0 で解決済み AMI 3.0.3(廃止)の問題 問題 解決 HBase スナップショット作成時の ERROR: AMI 3.1.0 で解決済み java.lang.UnsupportedOperationException: This is supposed to be overridden by subclasses... S3 入力を読み取り中に Received IOException while reading '...', attempting to reopen... が断続的に表示さ れる AMI 3.1.0 で解決済み Hadoop NameNode および DataNode ヒープ サイズのデフォルト値が誤って 1 GB に設定さ れ、configure-daemons ブートストラップア クションを使用して設定できない AMI 3.1.0 で解決済み yum update コマンドによって次のエラーが発 生する: Transaction check error: file [...] from install of [...] conflicts with file from package [...] AMI 3.0.4 で解決済み 514 Amazon EMR 開発者ガイド Hadoop 2.2.0 AMI の既知の問題 AMI 3.0.2(廃止)の問題 問題 解決 HVM(cc.*)インスタンスのエフェメラルボ リュームがアタッチまたはマウントされない (30 GB EBS ボリュームはアタッチされます) AMI 3.0.3 で解決済み S3 入力を読み取り中に Received IOException while reading '...', attempting to reopen... が断続的に表示さ れる AMI 3.1.0 で解決済み Hadoop NameNode および DataNode ヒープ サイズのデフォルト値が誤って 1 GB に設定さ れ、configure-daemons ブートストラップア クションを使用して設定できない AMI 3.1.0 で解決済み yum update コマンドによって次のエラーが発 生する: Transaction check error: file [...] from install of [...] conflicts with file from package [...] AMI 3.0.4 で解決済み AMI 3.0.1(廃止)の問題 問題 解決 HVM(cc.*)インスタンスのエフェメラルボ リュームがアタッチまたはマウントされない (30 GB EBS ボリュームはアタッチされます) AMI 3.0.3 で解決済み S3 入力を読み取り中に Received IOException while reading '...', attempting to reopen... が断続的に表示さ れる AMI 3.1.0 で解決済み Hadoop NameNode および DataNode ヒープ サイズのデフォルト値が誤って 1 GB に設定さ れ、configure-daemons ブートストラップア クションを使用して設定できない AMI 3.1.0 で解決済み yum update コマンドによって次のエラーが発 生する: Transaction check error: file [...] from install of [...] conflicts with file from package [...] AMI 3.0.4 で解決済み AMI 3.0.0(廃止)の問題 問題 解決 HVM(cc.*)インスタンスのエフェメラルボ リュームがアタッチまたはマウントされない (30 GB EBS ボリュームはアタッチされます) AMI 3.0.3 で解決済み S3 入力を読み取り中に Received IOException while reading '...', AMI 3.1.0 で解決済み 515 Amazon EMR 開発者ガイド Hadoop 1.0.3 AMI の問題 問題 解決 attempting to reopen... が断続的に表示さ れる Hadoop NameNode および DataNode ヒープ サイズのデフォルト値が誤って 1 GB に設定さ れ、configure-daemons ブートストラップア クションを使用して設定できない AMI 3.1.0 で解決済み yum update コマンドによって次のエラーが発 生する: Transaction check error: file [...] from install of [...] conflicts with file from package [...] AMI 3.0.4 で解決済み Hadoop 1.0.3 AMI の問題 次の既知の問題は Hadoop 1.0.3 AMI に影響します。必要に応じて、問題を解決する AMI が示されま す。既知の問題に対する回避策または新しい AMI への移行のサポートについては、AWS サポート担 当者にお問い合わせください。 AMI 2.4.7 の問題 問題 解決 LZO の出力で distcp コマンドを使用すると、 一部の出力ファイルが圧縮されない AMI 2.4.8 で解決済み AMI 2.4.3 の問題 問題 解決 AWS Java SDK を使用しているときに、2 GB を超える Amazon S3 ファイルでコンテンツの 長さの検証を実行すると次の例外が発生する: Unable to verify integrity of data download. Client calculated content length didn't match content length received from Amazon S3. The data may be corrupt. AMI 2.4.4 で解決済み Amazon EMR ログで Too many fetchfailures または Error reading task output を含むメッセージが多数表示される AMI 2.4.5 で解決済み AMI 2.4.2 の問題 問題 解決 Amazon EMR ログで Too many fetchfailures または Error reading task output を含むメッセージが多数表示される AMI 2.4.5 で解決済み 516 Amazon EMR 開発者ガイド Hadoop 1.0.3 AMI の問題 AMI 2.4.1 の問題 問題 解決 S3DistCp で生成されるスレッドが多すぎるた め、他のプロセスが新しいスレッドを作成しよ うとすると失敗する AMI 2.4.2 で解決済み Amazon EMR ログで Too many fetchfailures または Error reading task output を含むメッセージが多数表示される AMI 2.4.5 で解決済み AMI 2.4.0 の問題 問題 解決 Java 7 を実行すると、次の例外が発生 AMI 2.4.1 で解決済み する: Communication exception: java.util.ConcurrentModificationException... HBase シェルが正常に動作しない AMI 2.4.1 で解決済み Amazon EMR ログで Too many fetchfailures または Error reading task output を含むメッセージが多数表示される AMI 2.4.5 で解決済み AMI 2.3.6 の問題 問題 解決 Amazon EMR ログで Too many fetchfailures または Error reading task output を含むメッセージが多数表示される AMI 2.4.5 で解決済み m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する AMI 2.3.5 の問題 問題 解決 m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する AMI 2.3.4(廃止)の問題 問題 解決 m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する 517 Amazon EMR 開発者ガイド 失敗したクラスターのトラブルシューティング AMI 2.3.3 の問題 問題 解決 TextInputFormat 以外の入力形式を使用する ストリーミングジョブによって入力分割の最初 の行にバイトオフセットが挿入されると、マッ パーが失敗する AMI 2.3.4 で解決済み m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する AMI 2.3.2 の問題 問題 解決 m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する AMI 2.3.1 の問題 問題 解決 m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する AMI 2.3.0 の問題 問題 解決 m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する AMI 2.2.4 の問題 問題 解決 m3.xlarge または c3.4xlarge インスタンスタイプ AMI 2.4.0 で解決済み を使用するノードを含むクラスターが起動に失 敗する 失敗したクラスターのトラブルシューティング このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 518 Amazon EMR 開発者ガイド ステップ 1: 問題に関するデータの収集 このセクションでは、失敗したクラスターをトラブルシューティングする手順を説明します。これ は、クラスターがエラーコードで終了したことを意味します。クラスターは実行中のままですが、 結果が返ってくるのに時間がかかる場合は、代わりに「遅いクラスターのトラブルシューティン グ (p. 523)」を参照してください。 トピック • ステップ 1: 問題に関するデータの収集 (p. 519) • ステップ 2: 環境の確認 (p. 519) • ステップ 3: 最終状態変更の確認 (p. 521) • ステップ 4: ログファイルの検証 (p. 521) • ステップ 5: 手順を追ってのクラスターのテスト (p. 522) ステップ 1: 問題に関するデータの収集 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターのトラブルシューティングの最初の手順は、問題点、現在の状態、クラスターの設定に関 する情報を収集することです。次の手順でこの情報を使用して、考えられる問題の原因を確認または 除外します。 問題の定義 最初の問題を明確に定義することから始めます。次の点について考えます。 • どのような動作が期待されたか。代わりに、どのような動作が発生したか。 • 最初にこの問題が発生したのはいつか。以降、どれくらいの頻度で問題が発生しているか。 • クラスターの設定または実行に変更を加えたか。 クラスターの詳細 以下のクラスターの詳細は、問題の原因を追跡する上で役立ちます。この情報の収集方法についての 詳細は、「クラスターの詳細情報を表示する (p. 422)」を参照してください。 • クラスターの識別子。(ジョブフロー識別子とも呼ばれる。) • クラスターが起動されたリージョンとアベイラビリティーゾーン。 • 最終状態変更の詳細を含む、クラスターの状態。 • クラスターの起動に使用した AMI バージョン。バージョンが「最新」と表示される場合は、これを Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バージョン (p. 60) のバージョン番 号にマッピングできます。 • マスターノード、コアノード、タスクノードで指定した EC2 インスタンスのタイプと数。 ステップ 2: 環境の確認 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は Web サービスのエコシステムおよびオープンソースソフトウェアの一部として動作 します。これらの依存関係に影響する内容は、Amazon EMR のパフォーマンスに影響を及ぼす場合が あります。 519 Amazon EMR 開発者ガイド ステップ 2: 環境の確認 トピック • • • • サービスの停止を確認 (p. 520) 使用制限の確認 (p. 520) リリースバージョンの確認 (p. 520) Amazon VPC サブネット設定の確認 (p. 520) サービスの停止を確認 Amazon EMR は、内部でいくつかのアマゾン ウェブ サービスを使用しています。Amazon EC2 で仮 想サーバーを実行し、Amazon S3 にデータとスクリプトを保存し、Amazon SimpleDB でログファイ ルにインデックスを付け、CloudWatch にメトリクスを報告しています。これらのサービスを中断す るイベントが発生することはほとんどありませんが、発生すると、Amazon EMR で問題を引き起こす ことがあります。 次に進む前に、サービス状態ダッシュボードを確認します。クラスターを起動したリージョンを チェックして、いずれかのサービスで中断イベントが発生しているかどうかを確認します。 使用制限の確認 より大規模なクラスターを起動する場合、多くのクラスターを同時に起動した場合、または他のユー ザーと AWS アカウントを共有する IAM ユーザーの場合は、AWS のサービス上限を超えたためにク ラスターが失敗した可能性があります。 Amazon EC2 では、単一の AWS リージョンで実行する仮想サーバーのインスタンスの数は 20 のオ ンデマンドまたはリザーブドインスタンスに制限されます。20 以上のノードでクラスターを起動す る場合、またはクラスターを起動したことで、AWS アカウントでアクティブな EC2 インスタンスの 合計数が 20 を超えた場合は、クラスターは必要なすべての EC2 インスタンスを起動できなくなり、 失敗する可能性があります。この場合は、Amazon EMR が EC2 QUOTA EXCEEDED エラーを返しま す。Amazon EC2 インスタンス上限緩和申請を提出して、アカウントで実行できる EC2 インスタン ス数の増加を AWS にリクエストできます。 使用上限を超えるもう 1 つの原因として、クラスターが終了し、すべてのリソースを解放するまでの 遅延が考えられます。設定によっては、1 つのクラスターが完全に終了して、割り当てられたリソー スを解放するまでに 5~20 分かかることがあります。クラスターを起動しようとして EC2 QUOTA EXCEEDED エラーが発生する場合、そのエラーの原因は、最近終了したクラスターのリソースが、ま だ解放されていないことが原因である可能性があります。この場合は、Amazon EC2 クォータ増加リ クエストを送信するか、20 分待ってからクラスターを再作成してください。 Amazon S3 では、アカウントで作成できるバケット数の上限が 100 に制限されています。クラス ターがこの上限を超えて新しいバケットを作成すると、バケットの作成に失敗し、クラスターが失敗 する場合があります。 リリースバージョンの確認 クラスターの起動に使用した Amazon マシンイメージ(AMI)を、最新の Amazon EMR AMI バー ジョンと比較してください。Amazon EMR AMI の各リリースには、新機能、パッチ、バグ修正などの 改善内容が含まれています。クラスターに影響を及ぼしている問題が、最新の AMI バージョンですで に修正されている可能性があります。可能な場合は、最新の AMI バージョンを使用してクラスターを もう一度実行してください。Amazon EMR によってサポートされる AMI バージョン、各バージョン での変更点の詳細については、「Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バー ジョン (p. 60)」を参照してください。 Amazon VPC サブネット設定の確認 クラスターを Amazon VPC サブネットで起動した場合は、「クラスターの Amazon VPC サブネット を選択する (p. 209)」に従ってサブネットを設定する必要があります。さらに、クラスターを起動す 520 Amazon EMR 開発者ガイド ステップ 3: 最終状態変更の確認 るサブネットに、クラスターの各ノードに割り当てるのに十分な空き Elastic IP アドレスがあること を確認します。 ステップ 3: 最終状態変更の確認 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 最終状態変更は、最後にクラスターが状態を変更した内容に関する情報を示します。通常、ここには クラスターが状態を FAILED に変更するときに発生した問題に関する情報があります。例えば、ス トリーミングクラスターを起動して、Amazon S3 で既存の出力場所を指定した場合、クラスターは 「Streaming output directory already exists」(ストリーミング出力ディレクトリはすでに存在しま す)の最終状態変更で失敗します。 list-steps または describe-cluster 引数を使用して CLI から、または DescribeCluster お よび ListSteps アクションを使用して API からクラスターの詳細ペインを表示することにより、コ ンソールから最終状態変更値を検索できます。詳細については、「クラスターの詳細情報を表示す る (p. 422)」を参照してください。 ステップ 4: ログファイルの検証 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次の手順では、ログファイルを調べて、クラスターで発生した問題のエラーコードやその他の表示を 探します。使用可能なログファイル、ログファイルの保存場所、表示方法については、「ログファイ ルを表示する (p. 426)」を参照してください。 問題の特定には、詳しい調査が必要となることがあります。Hadoop は、クラスターの様々なノード のタスク試行でジョブの作業を実行します。Amazon EMR は、投機的タスク試行を開始し、最初に完 了しないその他のタスク試行をすべて終了します。これにより大きなアクティビティが生成され、生 成に伴って controller、stderr、syslog ログファイルにログされます。また、複数のタスク試行が同時 に実行されますが、ログファイルには実行に応じて結果のみが表示されます。 ブートストラップアクションログで、クラスターの起動中のエラーや設定上の予期しない変更を確認 することから始めます。ここで、ステップログを調べて、エラーが発生したステップで起動された Hadoop ジョブを特定します。Hadoop ジョブログを調べて、失敗したタスク試行を特定します。この タスク試行ログには、タスク試行の失敗の原因に関する詳細が含まれています。 次のセクションでは、様々なログファイルを使用して、クラスターでエラーを特定する方法を説明し ます。 ブートストラップアクションログの確認 ブートストラップアクションは、クラスターが起動されるとスクリプトを実行します。これらのスク リプトは、クラスターに追加のソフトウェアをインストールする場合や、構成設定をデフォルト値 から変更する場合に一般的に使用されます。これらのログを確認すると、クラスターの設定中に発生 したエラーや、パフォーマンスに影響を及ぼす構成設定の変更について手がかりを得ることができま す。 ステップログの確認 4 種類のステップログがあります。 521 Amazon EMR 開発者ガイド ステップ 5: 手順を追ってのクラスターのテスト • controller – ステップを実行しようとしたときに発生したエラーが原因で Amazon EMR(Amazon EMR)によって生成されるファイルが含まれます。読み込みステップに問題が生じる場合、このロ グでスタックトレースを探すことができます。アプリケーションの読み込みエラーまたはアクセス エラーは、マッパーファイルが見当たらないというエラーと同様に、通常ここで説明されます。 • stderr – ステップの処理中に発生したエラーメッセージが含まれます。アプリケーションの読み込み エラーは、通常ここで説明されます。このログにはスタックトレースが含まれることがあります。 • stdout – マッパーおよびリデューサーの実行可能ファイルによって生成されたステータスが含まれ ます。アプリケーションの読み込みエラーは、通常ここで説明されます。このログには、アプリ ケーションのエラーメッセージが含まれることがあります。 • syslog – Apache、Hadoop など、Amazon 以外のソフトウェアのログが含まれます。ストリーミン グエラーの説明は、ほとんどの場合、ここで見つかります。 明白なエラーについては、stderr を確認します。stderr にエラーの短いリストが表示される場合、そ のステップが突然終了し、エラーがスローされたことを示します。これは通常、クラスターで実行中 のマッパーとリデューサーアプリケーションのエラーが原因で発生します。 controller と syslog の最後の数行を調べて、エラーや障害に関する情報を探します。タスクの失敗に 関する情報(特に「Job Failed」と記載されている場合)に従います。 タスク試行ログの確認 ステップログの前回の分析で、失敗したタスクが 1 つ以上特定された場合は、対応するタスク試行の ログで詳細のエラー情報を調べます。 ステップ 5: 手順を追ってのクラスターのテスト このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 エラーの原因を追跡しようとする場合、クラスターを再起動し、ステップを個別にクラスターに送信 するのが有用です。これによって、次のステップを処理する前に各ステップの結果を確認することが でき、失敗したステップを修正および再実行できます。これには、一度だけ入力データを読み込むと いう利点もあります。 手順を追ってクラスターをテストするには 1. キープアライブおよび有効な終了保護を有効にして、新しいクラスターを起動します。キープア ライブでは、保留中のすべてのステップを処理した後、継続してクラスターを実行します。終了 保護では、クラスターがエラーのイベントでシャットダウンできないようにします。詳細につい ては、「クラスターのライフサイクル(長時間稼働または一時的)を選択する (p. 160)」および 「クラスター終了の管理 (p. 481)」を参照してください。 2. ステップをクラスターに送信します。詳細については、「クラスターへの作業の送信 (p. 504)」 を参照してください。 ステップが処理を完了すると、ステップログファイルのエラーを確認します。詳細については、 「ステップ 4: ログファイルの検証 (p. 521)」を参照してください。これらのログファイルを検 索する最も簡単な方法は、マスターノードに接続し、ログファイルを表示します。ステップログ ファイルは、ステップがしばらく実行されるまで、または終了あるいは失敗するまで表示されま せん。 ステップがエラーなしで成功した場合、次のステップを実行します。エラーが発生した場合、ロ グファイルでエラーを確認します。ユーザーのコードでエラーがあった場合、修正してステップ を再実行します。すべてのステップがエラーなしで実行できるまで続けます。 クラスターのデバッグを完了し、これを終了する場合、手動で終了する必要があります。クラ スターは終了保護を有効にして起動されているため、これが必要になります。詳細については、 「クラスター終了の管理 (p. 481)」を参照してください。 3. 4. 5. 522 Amazon EMR 開発者ガイド 遅いクラスターのトラブルシューティング 遅いクラスターのトラブルシューティング このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このセクションでは、実行中のままですが、結果が返るのに時間がかかっているクラスターをトラブ ルシューティングする手順を説明します。クラスターがエラーコードで終了した場合の対処方法につ いては、「失敗したクラスターのトラブルシューティング (p. 518)」を参照してください。 Amazon EMR では、クラスター内のインスタンスの数と種類を指定することができます。これを指定 することが、データ処理の実行速度に影響を与える主な手段です。クラスターの再実行を検討する可 能性があります。今回は、より大きなリソースを持つ EC2 インスタンスを指定するか、より多い数 のインスタンスをクラスターに指定します。詳細については、「インスタンスの数とタイプを選択す る (p. 33)」を参照してください。 次のトピックでは、クラスターを遅くさせる他の要因を特定する手順を説明します。 トピック • ステップ 1: 問題に関するデータの収集 (p. 523) • ステップ 2: 環境の確認 (p. 524) • ステップ 3: ログファイルの検証 (p. 525) • ステップ 4: クラスターとインスタンスの状態の確認 (p. 526) • ステップ 5: 停止されたグループの確認 (p. 527) • ステップ 6: 構成設定のレビュー (p. 528) • ステップ 7: 入力データの検証 (p. 529) ステップ 1: 問題に関するデータの収集 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターのトラブルシューティングの最初の手順は、問題点、現在の状態、クラスターの設定に関 する情報を収集することです。次の手順でこの情報を使用して、考えられる問題の原因を確認または 除外します。 問題の定義 最初の問題を明確に定義することから始めます。次の点について考えます。 • どのような動作が期待されたか。代わりに、どのような動作が発生したか。 • 最初にこの問題が発生したのはいつか。以降、どれくらいの頻度で問題が発生しているか。 • クラスターの設定または実行に変更を加えたか。 クラスターの詳細 以下のクラスターの詳細は、問題の原因を追跡する上で役立ちます。この情報の収集方法についての 詳細は、「クラスターの詳細情報を表示する (p. 422)」を参照してください。 • クラスターの識別子。(ジョブフロー識別子とも呼ばれる。) • クラスターが起動されたリージョンとアベイラビリティーゾーン。 523 Amazon EMR 開発者ガイド ステップ 2: 環境の確認 • 最終状態変更の詳細を含む、クラスターの状態。 • クラスターの起動に使用した AMI バージョン。バージョンが「最新」と表示される場合は、これを Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バージョン (p. 60) のバージョン番 号にマッピングできます。 • マスターノード、コアノード、タスクノードで指定した EC2 インスタンスのタイプと数。 ステップ 2: 環境の確認 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • サービスの停止を確認 (p. 524) • 使用制限の確認 (p. 524) • AMI バージョンの確認 (p. 525) • Amazon VPC サブネット設定の確認 (p. 525) • クラスターの再起動 (p. 525) サービスの停止を確認 Amazon EMR は、内部でいくつかのアマゾン ウェブ サービスを使用しています。Amazon EC2 で仮 想サーバーを実行し、Amazon S3 にデータとスクリプトを保存し、Amazon SimpleDB でログファイ ルにインデックスを付け、CloudWatch にメトリクスを報告しています。これらのサービスを中断す るイベントが発生することはほとんどありませんが、発生すると、Amazon EMR で問題を引き起こす ことがあります。 次に進む前に、サービス状態ダッシュボードを確認します。クラスターを起動したリージョンを チェックして、いずれかのサービスで中断イベントが発生しているかどうかを確認します。 使用制限の確認 より大規模なクラスターを起動する場合、多くのクラスターを同時に起動した場合、または他のユー ザーと AWS アカウントを共有する IAM ユーザーの場合は、AWS のサービス上限を超えたためにク ラスターが失敗した可能性があります。 Amazon EC2 では、単一の AWS リージョンで実行する仮想サーバーのインスタンスの数は 20 のオ ンデマンドまたはリザーブドインスタンスに制限されます。20 以上のノードでクラスターを起動す る場合、またはクラスターを起動したことで、AWS アカウントでアクティブな EC2 インスタンスの 合計数が 20 を超えた場合は、クラスターは必要なすべての EC2 インスタンスを起動できなくなり、 失敗する可能性があります。この場合は、Amazon EMR が EC2 QUOTA EXCEEDED エラーを返しま す。Amazon EC2 インスタンス上限緩和申請を提出して、アカウントで実行できる EC2 インスタン ス数の増加を AWS にリクエストできます。 使用上限を超えるもう 1 つの原因として、クラスターが終了し、すべてのリソースを解放するまでの 遅延が考えられます。設定によっては、1 つのクラスターが完全に終了して、割り当てられたリソー スを解放するまでに 5~20 分かかることがあります。クラスターを起動しようとして EC2 QUOTA EXCEEDED エラーが発生する場合、そのエラーの原因は、最近終了したクラスターのリソースが、ま だ解放されていないことが原因である可能性があります。この場合は、Amazon EC2 クォータ増加リ クエストを送信するか、20 分待ってからクラスターを再作成してください。 Amazon S3 では、アカウントで作成できるバケット数の上限が 100 に制限されています。クラス ターがこの上限を超えて新しいバケットを作成すると、バケットの作成に失敗し、クラスターが失敗 する場合があります。 524 Amazon EMR 開発者ガイド ステップ 3: ログファイルの検証 AMI バージョンの確認 クラスターの起動に使用した Amazon マシンイメージ(AMI)を、最新の Amazon EMR AMI バー ジョンと比較してください。Amazon EMR AMI の各リリースには、新機能、パッチ、バグ修正などの 改善内容が含まれています。クラスターに影響を及ぼしている問題が、最新の AMI バージョンですで に修正されている可能性があります。可能な場合は、最新の AMI バージョンを使用してクラスターを もう一度実行してください。Amazon EMR によってサポートされる AMI バージョン、各バージョン での変更点の詳細については、「Amazon EMR バージョン 2.x および 3.x でサポートされる AMI バー ジョン (p. 60)」を参照してください。 Amazon VPC サブネット設定の確認 クラスターを Amazon VPC サブネットで起動した場合は、「クラスターの Amazon VPC サブネット を選択する (p. 209)」に従ってサブネットを設定する必要があります。さらに、クラスターを起動す るサブネットに、クラスターの各ノードに割り当てるのに十分な空き Elastic IP アドレスがあること を確認します。 クラスターの再起動 処理速度の低下は、一時的な条件で発生している可能性があります。クラスターの終了および再起動 を検討し、パフォーマンスが改善されるか確認します。 ステップ 3: ログファイルの検証 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次の手順では、ログファイルを調べて、クラスターで発生した問題のエラーコードやその他の表示を 探します。使用可能なログファイル、ログファイルの保存場所、表示方法については、「ログファイ ルを表示する (p. 426)」を参照してください。 問題の特定には、詳しい調査が必要となることがあります。Hadoop は、クラスターの様々なノード のタスク試行でジョブの作業を実行します。Amazon EMR は、投機的タスク試行を開始し、最初に完 了しないその他のタスク試行をすべて終了します。これにより大きなアクティビティが生成され、生 成に伴って controller、stderr、syslog ログファイルにログされます。また、複数のタスク試行が同時 に実行されますが、ログファイルには実行に応じて結果のみが表示されます。 ブートストラップアクションログで、クラスターの起動中のエラーや設定上の予期しない変更を確認 することから始めます。ここで、ステップログを調べて、エラーが発生したステップで起動された Hadoop ジョブを特定します。Hadoop ジョブログを調べて、失敗したタスク試行を特定します。この タスク試行ログには、タスク試行の失敗の原因に関する詳細が含まれています。 次のセクションでは、様々なログファイルを使用して、クラスターでエラーを特定する方法を説明し ます。 ブートストラップアクションログの確認 ブートストラップアクションは、クラスターが起動されるとスクリプトを実行します。これらのスク リプトは、クラスターに追加のソフトウェアをインストールする場合や、構成設定をデフォルト値 から変更する場合に一般的に使用されます。これらのログを確認すると、クラスターの設定中に発生 したエラーや、パフォーマンスに影響を及ぼす構成設定の変更について手がかりを得ることができま す。 ステップログの確認 4 種類のステップログがあります。 525 Amazon EMR 開発者ガイド ステップ 4: クラスターとインスタンスの状態の確認 • controller – ステップを実行しようとしたときに発生したエラーが原因で Amazon EMR(Amazon EMR)によって生成されるファイルが含まれます。読み込みステップに問題が生じる場合、このロ グでスタックトレースを探すことができます。アプリケーションの読み込みエラーまたはアクセス エラーは、マッパーファイルが見当たらないというエラーと同様に、通常ここで説明されます。 • stderr – ステップの処理中に発生したエラーメッセージが含まれます。アプリケーションの読み込み エラーは、通常ここで説明されます。このログにはスタックトレースが含まれることがあります。 • stdout – マッパーおよびリデューサーの実行可能ファイルによって生成されたステータスが含まれ ます。アプリケーションの読み込みエラーは、通常ここで説明されます。このログには、アプリ ケーションのエラーメッセージが含まれることがあります。 • syslog – Apache、Hadoop など、Amazon 以外のソフトウェアのログが含まれます。ストリーミン グエラーの説明は、ほとんどの場合、ここで見つかります。 明白なエラーについては、stderr を確認します。stderr にエラーの短いリストが表示される場合、そ のステップが突然終了し、エラーがスローされたことを示します。これは通常、クラスターで実行中 のマッパーとリデューサーアプリケーションのエラーが原因で発生します。 controller と syslog の最後の数行を調べて、エラーや障害に関する情報を探します。タスクの失敗に 関する情報(特に「Job Failed」と記載されている場合)に従います。 タスク試行ログの確認 ステップログの前回の分析で、失敗したタスクが 1 つ以上特定された場合は、対応するタスク試行の ログで詳細のエラー情報を調べます。 Hadoop デーモンログの確認 まれですが、Hadoop 自体が失敗することがあります。Hadoop 自体が失敗しているかどうかを調 べるには、Hadoop ログを確認する必要があります。このログは、各ノードの /mnt/var/log/ hadoop/、または Amazon S3 にアーカイブされるログファイルの daemons/ にあります。 JobTracker ログを使用して、失敗したタスク試行を、タスクを実行したノードにマッピングします。 タスク試行に関連付けられているノードを特定すると、そのノードをホストしている EC2 インスタン スの状態を確認して、CPU またはメモリ不足などの問題が発生したかどうかを確認できます。 ステップ 4: クラスターとインスタンスの状態の確 認 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR クラスターは、Amazon EC2 インスタンスで実行されているノードで構成されてい ます。これらのインスタンスがリソースにバインドされた場合(CPU またはメモリの不足などによ り)、ネットワーク接続の問題が発生したり、ネットワークが切断されたりして、クラスターの処理 速度が低下します。 クラスターには最大 3 種類のノードがあります。 • マスターノード – クラスターを管理します。パフォーマンスに問題が発生した場合、クラスター全 体に影響があります。 • コアノード – マップリデュースタスクを処理し、Hadoop Distributed Filesystem (HDFS)を管 理します。これらのノードの 1 つにパフォーマンスの問題がある場合、HDFS の操作とマップリ デュースの処理を行うスピードを下げる可能性があります。さらにコアノードをクラスターに追 加し、パフォーマンスを改善できますが、コアノードを削除することはできません。詳細について は、「実行中のクラスターのサイズを手動で変更する (p. 494)」を参照してください。 526 Amazon EMR 開発者ガイド ステップ 5: 停止されたグループの確認 • タスクノード – マップリデュースタスクを処理します。専用の演算リソースがあり、データは保存 しません。タスクノードをクラスターに追加してパフォーマンスの速度を上げるか、必要のないタ スクノードを削除することができます。詳細については、「実行中のクラスターのサイズを手動で 変更する (p. 494)」を参照してください。 クラスターの状態を確認する場合、クラスター全体のパフォーマンスと、個々の仮想サーバーインス タンスのパフォーマンスの両方を確認する必要があります。次のようなツールを使用できます。 CloudWatch でのクラスター状態の確認 すべての Amazon EMR クラスターが CloudWatch にメトリクスをレポートします。メトリクスで は、合計読み込み、HDFS 使用率、実行中のタスク、残りのタスク、および破損ブロックなどの クラスターに関するパフォーマンス情報の概要を提供します。CloudWatch メトリクスを確認する と、クラスターで進行中の内容の大きな画像が表示され、処理速度を下げている要因を分析できま す。CloudWatch を使用して既存のパフォーマンスの問題を分析するのに加えて、将来にパフォーマ ンスの問題が発生した場合に、CloudWatch がアラートを生成するようにアラームを設定できます。 詳細については、「CloudWatch でメトリクスをモニタリングする (p. 436)」を参照してください。 Ganglia でのクラスターとインスタンスの状態の確認 Ganglia オープンソースプロジェクトは拡張可能な分散システムで、パフォーマンスへの影響を最小 限に抑えながら、クラスターやグリッドをモニタリングできるように設計されています。クラスター で Ganglia を有効にすると、レポートを生成し、クラスター全体のパフォーマンスを表示するだけで なく、クラスターのノードごとにパフォーマンスを調べることができます。Ganglia オープンソース プロジェクトの詳細については、http://ganglia.info/ を参照してください。クラスターで Ganglia を利 用可能にするには、クラスターを起動する際にブートストラップアクションを使用してインストール する必要があります。Amazon EMR での Ganglia の使用の詳細については、「Ganglia でパフォーマ ンスをモニタリングする (p. 452)」を参照してください。 Hadoop Web インターフェイスでのジョブと HDFS の状態の 確認 Hadoop では、情報の表示に使用できる Web インターフェイスのシリーズを提供します。Web イン ターフェイスへのアクセス方法については、「Amazon EMR クラスターでホストされているウェブサ イトの表示 (p. 464)」を参照してください。 • JobTracker – クラスターで処理されているジョブの進行状況に関する情報を提供します。このイン ターフェイスを使用して、ジョブが停止したタイミングを特定できます。 • HDFS NameNode – HDFS 使用率および各ノードの使用可能な領域に関する情報を提供します。こ のインターフェイスを使用して、HDFS がリソースにバインドされ、追加の容量を必要とするタイ ミングを特定できます。 • TaskTracker – クラスターで処理されているジョブのタスクに関する情報を提供します。このイン ターフェイスを使用して、タスクが停止したタイミングを特定できます。 Amazon EC2 でのインスタンス状態の確認 別の方法でクラスターのインスタンスのステータスに関する情報を確認するには、Amazon EC2 コン ソールを使用します。クラスターの各ノードは EC2 インスタンスで実行されるため、Amazon EC2 から提供されるツールを使用してステータスを確認できます。詳細については、「Amazon EC2 でク ラスターインスタンスを表示する (p. 430)」を参照してください。 ステップ 5: 停止されたグループの確認 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 527 Amazon EMR 開発者ガイド ステップ 6: 構成設定のレビュー ノードの起動中にエラーが多数発生した場合、インスタンスグループは停止されます。例えば、ブー トストラップアクションの実行中に新しいノードが繰り返し失敗する場合、インスタンスグループは 新しいノードを継続して準備しようとするのではなく、(しばらくしてから) ARRESTED 状態になり ます。 例えば、次のような場合に、ノードが表示されないことがあります。 • Hadoop またはクラスターが何らかの理由で破損し、クラスターへの新しいノードを受け入れない • ブートストラップアクションが新しいノードで失敗した • ノードが適切に機能していないため、Hadoop でチェックインできない インスタンスグループが ARRESTED 状態で、クラスターが WAITING 状態の場合は、クラスタース テップを追加して、必要な数のスレーブノードをリセットします。ステップを追加することで、クラ スターの処理が再開し、インスタンスグループが RUNNING 状態に戻ります。 停止状態のクラスターを再設定する方法については、「arrested 状態 (p. 498)」を参照してくださ い。 ステップ 6: 構成設定のレビュー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 構成設定では、タスクを再試行する回数およびソートに利用できるメモリ量など、クラスターの実 行方法に関する詳細を指定します。Amazon EMR を使用してクラスターを起動した場合、標準の Hadoop 構成設定に加えて、Amazon EMR 固有の設定があります。構成設定はクラスターのマスター ノードに保存されます。構成設定を確認し、効率的に実行するのに必要なリソースがクラスターにあ るようにできます。 Amazon EMR では、クラスターの起動に使用されるデフォルトの Hadoop 構成設定を定義します。 この値は、クラスターに指定した AMI およびインスタンスに基づいています。詳細については、 「Hadoop 設定のリファレンス (p. 556)」を参照してください。ブートストラップアクションを使用 したデフォルトの値から、またはジョブ実行パラメーターに新しい値を指定することによって、構成 設定を変更できます。詳細については、「(オプション)追加のソフトウェアをインストールするた めのブートストラップアクションの作成 (p. 121)」と「hadoop-user-env.sh の設定 (p. 560)」を参照 してください。ブートストラップアクションで構成設定を変更したかどうかを判定するには、ブート ストラップアクションログを確認します。 Amazon EMR では、各ジョブの実行に使用される Hadoop 設定を記録します。ログデータは、マス ターノードの /mnt/var/log/hadoop/history/ ディレクトリに job_job-id_conf.xml という 名前のファイルで存されます。ここで job-id はジョブの識別子で置換されます。ログのアーカイブ を有効にしている場合、このデータは logs/date/jobflow-id/jobs フォルダーの Amazon S3 に コピーされます。ここでの date はジョブが実行された日付で、jobflow-id はクラスターの識別子 です。 次の Hadoop ジョブ構成設定は、パフォーマンスの問題を調査するのに特に役立ちます。Hadoop の 構成設定および Hadoop の動作にどのように影響するかについては、http://hadoop.apache.org/docs/ を参照してください。 構成設定 説明 dfs.replication RAID のような環境を生成するために、単一ブロック (ハードドライブブロックなど)がコピーされる HDFS ノードの数。ブロックのコピーを含んでいる HDFS のノー ド数を決定します。 io.sort.mb ソートに利用可能な合計メモリ。この値は io.sort.factor の 10 倍になります。この設定は、io.sort.mb に 528 Amazon EMR 開発者ガイド ステップ 7: 入力データの検証 構成設定 説明 mapred.tasktracker.ap.tasks.maximum を掛けて計算して、 タスクノードが使用する合計メモリを計算するためにも使 用できます。 io.sort.spill.percent 割り当てられたソートメモリがいっぱいであるため、ディ スクが使用を開始するポイントでソート中に使用されま す。 mapred.child.java.opts 廃止. 代わりに、mapred.map.child.java.opts および mapred.reduce.child.java.opts を使用します。TaskTracker が内部で実行するタスク用に JVM を起動する際に使用す る Java オプション。共通パラメーターは、最大メモリサ イズの設定用の "-Xmx" です。 mapred.map.child.java.opts TaskTracker が内部で実行するマップタスク用に JVM を起 動する際に使用する Java オプション。共通パラメーター は、最大メモリヒープサイズの設定用の "-Xmx" です。 mapred.map.tasks.speculative.execution 同じタスクのマップタスク試行を並行して起動できるかど うかを決定します。 mapred.reduce.tasks.speculative.execution 同じタスクのリデュースタスク試行を並行して起動できる かどうかを決定します。 mapred.map.max.attempts マップタスクの最大試行回数。すべてが失敗した場合、 マップタスクは失敗としてマークされます。 mapred.reduce.child.java.opts TaskTracker が内部で実行する Reduce タスク用に JVM を起動する際に使用する Java オプション。共通パラメー ターは、最大メモリヒープサイズの設定用の "-Xmx" で す。 mapred.reduce.max.attempts Reduce タスクの最大試行回数。すべてが失敗した場合、 マップタスクは失敗としてマークされます。 mapred.reduce.slowstart.completed.mapsReduce タスクが試行される前に完了する必要のある Map タスクの量。待機時間が足りないと、試行中に「Too many fetch-failure」(取得失敗が多すぎます)というエラーが発 生する場合があります。 mapred.reuse.jvm.num.tasks タスクは単一の JVM 内で実行されます。同じ JVM を再利 用できるタスク数を指定します。 mapred.tasktracker.map.tasks.maximum マッピング中のタスクノードごとに並行して実行できる最 大タスク数。 mapred.tasktracker.reduce.tasks.maximum 減らしている間のタスクノードごとに並行して実行できる 最大タスク数。 クラスタータスクがメモリを大量に使用する場合、コアノードごとに使うタスクの数を減らしてジョ ブトラッカーのヒープサイズを減らすと、パフォーマンスを向上させることができます。 ステップ 7: 入力データの検証 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 529 Amazon EMR 開発者ガイド Amazon EMR の共通エラー 入力データを確認します。キー値に均等に割り付けられていますか?データが 1 つまたは少数のキー 値に偏っている場合、他のノードが待機中であるにもかかわらず、読み込み処理は少数のノードに マップされている可能性があります。この不均等な作業の割り付けは、処理時間を遅くさせる場合が あります。 例えば、不均等なデータセットでは、クラスターを実行して単語をアルファベット順にしています が、所有しているデータセットには "a" の文字で始まる単語しかありません。作業を綿密に計画した 場合、他の文字で始まる単語を処理するノードが待機中であっても、"a" で始まる値を処理している ノードに負担がかかることになります。 Amazon EMR の共通エラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 クラスターに障害が発生する、またはデータの処理が遅くなる場合、多くの理由が考えられます。次 のセクションでは、最も一般的な問題とそれらを解決するための提案をリストアップしています。 トピック • 入力および出力エラー (p. 530) • 権限エラー (p. 532) • メモリエラー (p. 533) • リソースエラー (p. 534) • ストリーミングクラスターエラー (p. 538) • カスタム JAR クラスターエラー (p. 539) • Hive クラスターエラー (p. 540) • VPCエラー (p. 541) • AWS GovCloud (US) エラー (p. 543) • その他の問題 (p. 544) 入力および出力エラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次は、クラスターの入力および出力オペレーションに共通するエラーです。 トピック • Amazon Simple Storage Service(Amazon S3)へのパスに 3 つ以上のスラッシュが含まれていま すか? (p. 531) • 入力ディレクトリを再帰的に走査しようとしていませんか? (p. 531) • 出力ディレクトリが存在していませんか? (p. 531) • HTTP URL を使用してリソースを指定しようとしていませんか? (p. 531) • Amazon S3 バケットの参照に使用している名前のフォーマットが無効ではありません か? (p. 531) • Amazon S3 との間でデータをロードする際に問題が発生しますか? (p. 531) 530 Amazon EMR 開発者ガイド 入力および出力エラー Amazon Simple Storage Service(Amazon S3)へのパスに 3 つ以上のスラッシュが含まれていますか? Amazon S3 バケットを指定するときは、終了スラッシュを URL の末尾に付ける必要があります。例 えば、バケットを「s3n://myawsbucket」と参照するのではなく、「s3n://myawsbucket/」を使用しま す。スラッシュを付けないと、Hadoop では、ほとんどの場合、クラスターが失敗します。 入力ディレクトリを再帰的に走査しようとしていませんか? Hadoop では、入力ディレクトリでファイルが再帰的に検索されることはありません。/ corpus/01/01.txt、/corpus/01/02.txt、/corpus/02/01.txt のようなディレクトリ構造で、入力パラメー ターとして /corpus/ をクラスターに指定しても、Hadoop は入力ファイルは検出しません。/corpus/ ディレクトリが空で、Hadoop はサブディレクトリのコンテンツをチェックしないからです。同様 に、Amazon S3 バケットのサブディレクトリが再帰的にチェックされることもありません。 入力ファイルは、サブディレクトリではなく、指定する入力ディレクトリまたは Amazon S3 バケッ トに直接置かれている必要があります。 出力ディレクトリが存在していませんか? 既に存在する出力パスを指定すると、Hadoop では、ほとんどの場合、クラスターが失敗します。つ まり、クラスターを一度実行してから、まったく同じパラメーターを指定して再度実行すると、おそ らく最初は動作しますが、その後は動作しなくなります。最初の実行後、出力パスが存在するように なり、これにより以降の実行がすべて失敗するからです。 HTTP URL を使用してリソースを指定しようとしていません か? Hadoop では、http:// プレフィックスを使用して指定されたリソースの場所は認識されません。し たがって、HTTP URL を使用したリソースを参照することはできません。例えば、http://mysite/ myjar.jar を JAR パラメーターとして渡すと、クラスターは失敗します。Amazon EMR でファイルを 参照する方法の詳細については、「Amazon EMR と互換性のあるファイルシステム (p. 132)」を参照 してください。 Amazon S3 バケットの参照に使用している名前のフォーマッ トが無効ではありませんか? Amazon EMR で「myawsbucket.1」のようなバケット名を使おうとすると、クラスターに障害が 発生します。これは、Amazon EMR では、バケット名を有効な RFC 2396 ホスト名にする必要 があるためです。名前の末尾に数値を使用することはできません。さらに、Hadoop の要件によ り、Amazon EMR で使用する Amazon S3 バケット名に含めることができるのは、小文字、数値、ピ リオド(.)、およびハイフン(-)に限られます。Amazon S3 バケット名のフォーマットを設定する 方法の詳細については、『Amazon Simple Storage Service 開発者ガイド』の「Bucket Restrictions and Limitations」を参照してください。 Amazon S3 との間でデータをロードする際に問題が発生しま すか? Amazon S3 は、Amazon EMR の最も一般的な入力および出力ソースです。一般的な間違いは、一般 的なファイルシステムと同じに Amazon S3 を扱うことです。Amazon S3 とファイルシステムの間に は、クラスターの実行時に考慮するべき違いがあります。 • Amazon S3 で内部エラーが発生する場合、そのエラーを正しく処理し、オペレーションを再試行す ることがアプリケーションに要求されます。 531 Amazon EMR 開発者ガイド 権限エラー • Amazon S3 を呼び出し、応答に時間がかかりすぎるとき、場合によっては、アプリケーションが Amazon S3 を呼び出す頻度を減らす必要があります。 • Amazon S3 バケットのすべてのオブジェクトをリストアップする行為はコストのかかる呼び出しと なります。呼び出しを行う回数を最小限に抑えることがアプリケーションに要求されます。 クラスターと Amazon S3 のやり取りを改善する方法がいくつかあります。 • 最新の AMI を利用してクラスターを起動します。このバージョンには、Amazon EMR による Amazon S3 へのアクセス方法に関する最新の改善が含まれています。詳細については、「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 • S3DistCp を使用し、Amazon S3 にオブジェクトを入れたり、Amazon S3 からオブジェクトを出し たりします。S3DistCp はエラー処理を実装し、再試行し、バックオフして Amazon S3 の要件に合 わせます。 詳細については、「S3DistCp を使用した分散コピー」を参照してください。 • 結果整合性を念頭に置いてアプリケーションを設計します。クラスターの実行中の中間データス トレージには HDFS を使用し、初期データの入力と最終結果の出力にのみ Amazon S3 を使用しま す。 • クラスターが 1 秒あたり 200 以上のトランザクションを Amazon S3 にコミットする場合は、サ ポートに問い合わせて、1 秒あたりの大量のトランザクション用にバケットを用意し、「Amazon S3 のパフォーマンスのヒントとコツ」で説明されているキーパーティション方式を使用することを 検討してください。 • Hadoop 設定の io.file.buffer.size を 65536 に設定します。 この設定により、Hadoop で Amazon S3 オブジェクトの検索にかかる時間が短縮されます。 • クラスターで Amazon S3 並行処理問題が発生する場合、Hadoop の投機的実行機能の 無効化を検討してください。この無効化は、mapred.map.tasks.speculative.execution と mapred.reduce.tasks.speculative.execution を設定することで行います。この無効化は遅いクラス ターのトラブルシューティングにも役立ちます。 • Hive クラスターを実行している場合、「Amazon S3 と Hive の間でデータをロードするときに問題 が発生しますか? (p. 541)」を参照してください。 詳細については、「Amazon Simple Storage Service 開発者ガイド」の「Amazon S3 Error Best Practices」を参照してください。 権限エラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次は権限または認証情報の利用時に共通するエラーです。 トピック • 正しい認証情報を SSH に渡しましたか? (p. 532) • IAM を使用している場合は、適切な Amazon EC2 ポリシーセットがありますか? (p. 533) 正しい認証情報を SSH に渡しましたか? SSH を使用してマスターノードに接続できない場合、それはセキュリティの認証情報の問題である可 能性が高いです。 まず、SSH キーが含まれる .pem ファイルに適切な権限があることを確認します。次の例で示すよ うに、chmod を使用して .pem ファイルの権限を変更できます。この例の mykey.pem は、ご自身 の .pem ファイルに置き換えてください。 532 Amazon EMR 開発者ガイド メモリエラー chmod og-rwx mykey.pem 原因として次に考えられるのは、クラスターの作成時に指定したキーペアを使用していないという状 況です。複数のキーペアを作成した場合、これはよく起こります。Amazon EMR コンソールのクラス ター詳細をチェックし(あるいは CLI の --describe オプションを利用し)、クラスター作成時に指 定したキーペアの名前を確認します。 正しいキーペアを使用していること、および .pem ファイルで権限が適切に設定さ れていることを確認したら、次のコマンドを使用して、マスターノードに SSH 接 続できます。次のコマンドの mykey.pem はご自身の .pem ファイルの名前に置き換 え、[email protected] はマスターノードのパブリック DNS 名に置き換えてください(CLI の --describe、または Amazon EMR コンソールを使って入手 できます)。 Important Amazon EMR クラスターノードに接続するときは、ログイン名 hadoop を使用する必要があ ります。そうしないと、Server refused our key エラーのようなエラーが発生する場合 があります。 ssh -i mykey.pem [email protected] 詳細については、「SSH を使用してマスターノードに接続する (p. 459)」を参照してください。 IAM を使用している場合は、適切な Amazon EC2 ポリシー セットがありますか? Amazon EMR は EC2 インスタンスをノードとして使用します。したがって、Amazon EMR が IAM ユーザーの代わりにこのインスタンスを管理できるようにするには、Amazon EMR の IAM ユーザー にも特定の Amazon EC2 ポリシーセットが必要です。必要な権限セットがない場合、Amazon EMR は [User account is not authorized to call EC2] というエラーを返します。 Amazon EC2 ポリシーの詳細については、Amazon EMR を実行するように IAM アカウントを設定す る必要があります。「ユーザーベースの IAM ポリシーの Amazon EMR アクション (p. 179)」を参照 してください。 メモリエラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 メモリのチューニング問題は、状況により、次のような 1 つまたは複数の兆候で現れる場合がありま す。 • マッパーまたはリデューサーのフェーズでジョブが停止します。 • ジョブが長時間ハングアップしたり、予想より大幅に遅れて完了します。 • ジョブが完全に失敗するか、強制終了されます。 533 Amazon EMR 開発者ガイド リソースエラー これらの兆候は、通常、マスターインスタンスタイプまたはスレーブノードのメモリが足りなくなっ たときに発生します。 マッパーまたはリデューサーの同時タスク数を制限する • Amazon EMR では、スロットごとに JVM が実行されるため、大量のマップスロットに大容量の メモリが必要になります。次のブートストラップアクションにより、TaskTracker で同時に実行 されるマッパーまたはリデューサーの数が制御されます。結果として、利用されるメモリの全体 量が制御されます。 --args -m,mapred.tasktracker.map.tasks.maximum=maximum number of simultaneous map tasks --args -m,mapred.tasktracker.reduce.tasks.maximum=maximum number of simultaneous reduce tasks JVM ヒープサイズを増やし、タスクタイムアウトを延長する • Hadoop プロセスの JVM ヒープサイズを調整することでメモリ問題を回避します。これ は、m1.xlarge など、ラージインスタンスサイズでさえ、デフォルト設定ではメモリ不足を引き 起こす可能性があるためです。例えば、m1.xlarge のインスタンスタイプはデフォルトではタス クごとに 1 GB のメモリを割り当てます。ただし、タスクをノードごとに 1 つに減らす場合、次 のブートストラップアクションによりヒープに割り当てられるメモリを増やします。 s3://elasticmapreduce/bootstrap-actions/configure-hadoop --args m,mapred.child.java.opts=-Xmxamount of memory in MB ヒープサイズを調整した後でも、mapred.task.timeout 設定を増やし、Hadoop がプロセスの 終了を始めるのを遅らせると良い場合があります。 NameNode ヒープサイズを増やす • NameNode もメモリ不足になることがあります。NameNode は、HDFS ファイルシステ ムのすべてのメタデータをメモリに保持します。HDFS ファイルシステムが大きくなり、 ブロックとファイルが増えれば、NameNode はそれだけ多くのメモリを必要とします。 ま た、DataNodes の可用性に一貫性がない場合、NameNode は無効な状態にあるブロックを列に並 べます。NameNodes がメモリエラーから抜け出ることはまれであり、非常に大きな HDFS ファ イルシステムが存在するかどうか、または大量のエントリを持つ HDFS ディレクトリが存在する かどうかを観察します。NameNode JVM ヒープサイズは次のブートストラップアクションで増加 できます。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configuredaemons --args --namenode-heap-size=amount of memory in MB リソースエラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次は、クラスターのリソースの制約により引き起こされる一般的なエラーです。 トピック • クラスター用に十分な HDFS 容量がありますか? (p. 535) 534 Amazon EMR 開発者ガイド リソースエラー • 「EC2 クォータの超過」に関するエラーが表示されますか? (p. 535) • [Too many fetch-failures] というエラーが表示されますか? (p. 536) • [File could only be replicated to 0 nodes instead of 1] エラーが表示されていますか? (p. 537) • TaskTracker ノードがブラックリストに記載されていますか? (p. 537) クラスター用に十分な HDFS 容量がありますか? 十分な容量がない場合、Amazon EMR は [Cannot replicate block, only managed to replicate to zero nodes] というエラーを返します。このエラーは、HDFS の容量を超えるデータが含まれるクラスター を作成したときに発生します。このエラーはクラスターの実行中にのみ発生します。これは、クラス ターが終了するとき、使用していた HDFS 容量を解放するためです。 クラスターが使用できる HDFS 容量は、コアノードとして使用される Amazon EC2 インスタンスの 数とタイプによって異なります。各 Amazon EC2 インスタンスのすべてのディスク容量を、HDFS が 使用できます。EC2 インスタンスタイプごとのローカルストレージの量に関する詳細については、 「Linux インスタンス用 Amazon EC2 ユーザーガイド」の「Instance Types and Families」を参照し てください。 」の「インスタンスのファミリーとタイプ」を参照してください。レプリケーション係数が、使用で きる HDFS 容量に影響を及ぼすこともあります。レプリケーション係数は、冗長性を確保するため に HDFS に格納された各データブロックのコピー数です。レプリケーション係数は、クラスター内の ノード数に応じて大きくなります。これは、クラスターに 10 個以上のノードがある場合は、データ ブロックごとに 3 つのコピー、4~9 個のノードがある場合は各ブロックの 2 つのコピー、ノードが 3 つ以下のクラスターの場合は 1 つのコピー(冗長性なし)が格納されているからです。ジョブフロー が使用できる容量を算出するには、使用できる HDFS 容量の合計をレプリケーション係数で割りま す。ノードの数が 9 個から 10 個に増えた場合など、レプリケーション係数が増加することで、使用 できる HDFS 容量が実質的には減ることがあります。 例えば、10 個のコアノードを持つタイプ m1.large のクラスターでは、2833 GB の容量を HDFS で使 用できます(10 ノード X ノードあたりの容量 850 GB)÷レプリケーション係数 3)。 HDFS で使用できる容量をクラスターが超えた場合は、コアノードをクラスターに追加するか、デー タを圧縮すると、HDFS 容量を生成できます。クラスターを停止して再起動できる場合は、さらに 大きな Amazon EC2 インスタンスタイプのコアノードの使用を検討してください。また、レプリ ケーション係数を調整して対応することもできます。ただし、レプリケーション係数を小さくする と、HDFS データの冗長性と、紛失または破損した HDFS ブロックからクラスターを回復する機能が 低下します。 「EC2 クォータの超過」に関するエラーが表示されますか? Amazon EC2 インスタンスクォータの超過に関するメッセージが表示された場合、その原因としてい くつかの理由が考えられます。設定によっては、1 つのクラスターが完全に終了して、割り当てられ たリソースを解放するまでに 5~20 分かかることがあります。クラスターを起動しようとして EC2 QUOTA EXCEEDED エラーが発生する場合、そのエラーの原因として、最近終了したクラスターのリ ソースがまだ解放されていないことが考えられます。また、インスタンスグループのサイズを変更し ようとしたとき、新しいターゲットサイズがアカウントの現在のインスタンスクォータよりも大きい 場合にも、このエラーが発生する可能性があります。このような場合は、クラスターを終了し、ター ゲットサイズを小さくしてクラスターを起動してください。いずれの場合も、未使用のクラスターリ ソースや EC2 インスタンスの削除、Amazon EC2 クォータの増加のリクエスト、クラスターの再作 成の待機を行うことができます。 Note 同じクラスターに対して複数のサイズ変更のリクエストを発行することはできません。この ため、最初のリクエストが失敗したとき、場合によっては現在のクラスターを終了し、目的 の数のインスタンスを指定して別のクラスターを起動する必要があります。 535 Amazon EMR 開発者ガイド リソースエラー [Too many fetch-failures] というエラーが表示されますか? ステップまたはタスク試行ログに [Too many fetch-failures] または [Error reading task output] という エラーメッセージが表示されている場合、実行中のタスクは別のタスクの出力に依存するというこ とを示しています。これは多くの場合、リデューサータスクが実行のために列に並んでおり、1 つま たは複数のマップタスクの出力を必要としているとき、その出力がまだ利用できないときに発生しま す。 出力が利用できない場合、次のような理由が考えられます。 • 前提条件となるタスクが処理中です。これは多くの場合、マップタスクです。 • データが別のインスタンスに置かれている場合、ネットワークの接続状態が悪いためにデータが利 用できないことがあります。 • 出力の取得に HDFS が利用される場合、HDFS の問題も考えられます。 このエラーの最も一般的な原因は、前のタスクが実行中であることです。これは特に、リデューサー タスクが最初に実行を試みるときにエラーが発生する場合に該当します。これに該当するかどうか は、エラーを返したクラスターステップの syslog ログを調べることで確認できます。マップタスクと リデューサータスクの両方が進行していることが syslog から判明した場合、マップタスクが完了して いないうちにリデューサーフェーズが開始されたことを示します。 ログで確認するべきことの 1 つは、100% に到達し、それから値を落とすマッパーの進捗パーセン テージです。マップのパーセンテージが 100% のとき、それはすべてのマップタスクが完了してい ることを意味しません。それが意味することは、Hadoop がすべてのマップタスクを実行している ことだけです。この値が 100% より下に落ちる場合、それはマップタスクが失敗し、設定によって は、Hadoop がタスクの再スケジュールを試行する場合があることを意味します。ログのマップの パーセンテージが 100% で留まっている場合、CloudWatch のメトリクス、特に RunningMapTasks をチェックし、マップタスクが実行中かどうかを確認します。この情報は、マスターノードで Hadoop Web インターフェイスを利用し、確認することもできます。 この問題が発生する場合、次のような操作を試すことができます。 • リデューサーフェーズが開始までに待ち時間を長くします。この場合、Hadoop 設定の mapred.reduce.slowstart.completed.maps を変更し、時間を長くします。詳細については、「(オ プション)追加のソフトウェアをインストールするためのブートストラップアクションの作 成 (p. 121)」を参照してください。 • リデューサーのカウントをクラスターのリデューサー能力の合計に合わせます。この場合、ジョブ の Hadoop 設定の mapred.reduce.tasks を調整します。 • コンバイナクラスコードを使用し、フェッチする必要がある出力の量を最小限に抑えます。 • クラスターのネットワークパフォーマンスに影響を与える Amazon EC2 サービスに問題がないこと を確認します。これはサービス状態ダッシュボードを利用して確認できます。 • クラスターのインスタンスの CPU とメモリリソースをチェックし、データ処理がノードのリソー スに過度の負担を与えていないことを確認します。詳細については、「インスタンスの数とタイプ を選択する (p. 33)」を参照してください。 • Amazon EMR クラスターで使用する Amazon マシンイメージ(AMI)のバージョンを確認します。 バージョンが 2.3.0~2.4.4 の場合は、より新しいバージョンに更新してください。このバージョン の範囲に該当する AMI で使用される Jetty のバージョンでは、マップフェーズからの出力の配信に 失敗する可能性があります。リデューサーがマップフェーズからの出力を取得できない場合は、 フェッチエラーが発生します。 Jetty はオープンソースの HTTP サーバーで、Hadoop クラスター内でのマシン間の通信に使用され ます。 536 Amazon EMR 開発者ガイド リソースエラー [File could only be replicated to 0 nodes instead of 1] エラーが 表示されていますか? ファイルが HDFS に書き込まれるとき、複数のコアノードに複製されます。このエラーが表示される とき、HDFS にデータを書き込むための DataNode インスタンスが NameNode デーモンにないこと を意味します。言い換えれば、ブロックレプリケーションが行われていません。このエラーは次のよ うなさまざまな問題から発生する場合があります。 • HDFS ファイルシステムに容量不足が発生している可能性があります。これが最も一般的な原因で す。 • ジョブの実行時に DataNode インスタンスを利用できなかった可能性があります。 • DataNode インスタンスとマスターノードとの通信がブロックされた可能性があります。 • コアインスタンスグループのインスタンスが利用できない可能性があります。 • 権限が不足している可能性があります。例えば、JobTracker デーモンにジョブトラッカー情報を作 成する権限がなかった可能性があります。 • DataNode インスタンスの予約容量設定が十分でない可能性があります。これに該当するかどうか は、dfs.datanode.du.reserved 設定で確認します。 この問題が HDFS のディスク容量不足により引き起こされているかどうかを確認するに は、CloudWatch の HDFSUtilization 指標を調べます。この値が高すぎる場合、クラスターにコア ノードを追加できます。クラスターにコアノードを追加できても削除はできないことに留意してくだ さい。HDFS ディスク容量が不足していると考えられるクラスターがある場合、HDFSUtilization の値が一定のレベルを超えたときに警告を発するように CloudWatch にアラームを設定できます。詳 細については、「実行中のクラスターのサイズを手動で変更する (p. 494)」および「CloudWatch でメ トリクスをモニタリングする (p. 436)」を参照してください。 HDFS の容量不足が原因ではない場合、DataNode ログ、NameNode ログ、ネットワーク接続を チェックし、HDFS のデータ複製を阻害している問題が他にないか確認します。詳細については、 「ログファイルを表示する (p. 426)」を参照してください。 TaskTracker ノードがブラックリストに記載されていますか? TaskTracker は、マッパータスクとリデューサータスクを受け取るクラスターのノードです。 JobTracker デーモンにより割り当てられます。JobTracker はハートビートを利用して TaskTracker ノードを監視します。 JobTracker デーモンが TaskTacker ノードをブラックリストに記載するような状況がある場合、タス ク処理に利用できるノードのプールからそれを取り除きます。 • TaskTracker ノードが過去 10 分間(60000 ミリ秒間)JobTracker にハートビートを送信していま せん。この時間は mapred.tasktracker.expiry.interval 設定で設定できます。Hadoop 設定 の変更に関する詳細については、「(オプション)追加のソフトウェアをインストールするための ブートストラップアクションの作成 (p. 121)」を参照してください。 • TaskTracker ノードが 4 つ以上のタスクを失敗しています。modify mapred.max.tracker.failures 設定パラメーターを利用し、この値を増やすことがで きます。他には、タスクを失敗と判定するまでに試行する回数を制御する設定を変更できま す。マップタスクの場合は mapred.map.max.attempts を、リデューサータスクの場合は mapreduce.reduce.maxattempts を変更します。Hadoop 設定の変更に関する詳細については、 「(オプション)追加のソフトウェアをインストールするためのブートストラップアクションの作 成 (p. 121)」を参照してください。 CloudWatch CLI を利用し、ブラックリストに記載されている TaskTracker ノードの数を表示で きます。そのためのコマンドを次の例に示します。詳細については、『Amazon CloudWatch CLI Reference』を参照してください。 537 Amazon EMR 開発者ガイド ストリーミングクラスターエラー mon-get-stats NoOfBlackListedTaskTrackers --dimensions JobFlowId=JobFlowID -statistics Maximum --namespace AWS/ElasticMapReduce 次の例は、クラスターを起動し、ブートストラップアクションを利用して mapred.max.tracker.failures の値をデフォルトの 4 ではなく、7 に設定する方法を示したもの です。 AWS CLI を使用して次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 aws emr create-cluster --name "Test cluster" --ami-version 2.4 --applications Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="Modified mapred.max.tracker.failures",Args=["m","mapred.max.tracker.failures=7"] Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 前の例を利用してクラスターを起動するとき、マスターノードに接続し、/home/hadoop/conf/ mapred-site.xml で変更された設定を確認できます。変更された行は、次の例のように表示されま す。 <property><name>mapred.max.tracker.failures</name><value>7</value></property> ストリーミングクラスターエラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 ストリーミングエラーの原因は、通常、syslog ファイルで確認できます。ここには、[Steps] ペイン で接続します。 ストリーミングクラスターの一般的なエラーを以下に示します。 トピック • データは間違った形式でマッパーに送信されていませんか? (p. 539) • スクリプトがタイムアウトしていませんか? (p. 539) • 無効なストリーミング引数を渡していませんか? (p. 539) • スクリプトがエラーで終了しましたか? (p. 539) 538 Amazon EMR 開発者ガイド カスタム JAR クラスターエラー データは間違った形式でマッパーに送信されていませんか? これに該当するかを確認するには、タスク試行ログの失敗したタスク試行の syslog ファイルでエ ラーメッセージを検索します。詳細については、「ログファイルを表示する (p. 426)」を参照してく ださい。 スクリプトがタイムアウトしていませんか? マッパーまたはリデューサースクリプトに対するデフォルトのタイムアウトは 600 秒です。スクリプ トにこれ以上時間がかかる場合、タスクの試行は失敗します。タスク試行ログで失敗したタスク試行 の syslog ファイルを確認して、これに該当するかを確認できます。詳細については、「ログファイ ルを表示する (p. 426)」を参照してください。 mapred.task.timeout 設定に新しい値を設定して、制限時間を変更できます。この設定は、入 力の読み取り、出力の書き込み、またはステータス文字列の更新がされなくなってから何ミリ秒 後に、Amazon EMR がタスクを終了するかを指定します。追加のストリーミング引数 -jobconf mapred.task.timeout=800000 を渡して、この値を更新できます。 無効なストリーミング引数を渡していませんか? Hadoop ストリーミングでは、次の引数のみがサポートされています。ここに示されていない引数を 渡すと、クラスターは失敗します。 -blockAutoGenerateCacheFiles -cacheArchive -cacheFile -cmdenv -combiner -debug -input -inputformat -inputreader -jobconf -mapper -numReduceTasks -output -outputformat -partitioner -reducer -verbose さらに、Hadoop ストリーミングでは、Java 構文を使って渡された引数、つまり先頭にハイフンが 1 つしか付いていない引数しか認識されません。先頭に 2 つのハイフンが付いている引数を渡すと、ク ラスターは失敗します。 スクリプトがエラーで終了しましたか? マッパーまたはリデューサースクリプトがエラーで終了した場合、失敗したタスク試行のタスク試 行ログの stderr ファイルでエラーを検索できます。詳細については、「ログファイルを表示す る (p. 426)」を参照してください。 カスタム JAR クラスターエラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 539 Amazon EMR 開発者ガイド Hive クラスターエラー 次は、カスタム JAR クラスターに共通するエラーです。 トピック • ジョブを作成しようとすると JAR が例外をスローしますか? (p. 540) • JAR はマップタスク内でエラーをスローしますか? (p. 540) ジョブを作成しようとすると JAR が例外をスローしますか? Hadoop ジョブの作成中にカスタム JAR のメインプログラムが例外をスローする場合は、ステップ ログの syslog ファイルを確認することをお勧めします。詳細については、「ログファイルを表示す る (p. 426)」を参照してください。 JAR はマップタスク内でエラーをスローしますか? 入力データの処理中にカスタム JAR およびマッパーが例外をスローする場合は、タスク試行ログ の syslog ファイルを確認することをお勧めします。詳細については、「ログファイルを表示す る (p. 426)」を参照してください。 Hive クラスターエラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hive エラーの原因は、通常、syslog ファイルで確認できます。ここには、[Steps] ペインから接続し ます。このファイルで問題を特定できない場合は、Hadoop タスク試行のエラーメッセージを確認し てください。ここには、[Task Attempts] ペインから接続します。 次は、Hive クラスターに共通するエラーです。 トピック • 最新バージョンの Hive を使用していますか? (p. 540) • Hive スクリプトに構文エラーがありましたか? (p. 540) • インタラクティブに実行しているとき、ジョブに障害が発生しましたか? (p. 541) • Amazon S3 と Hive の間でデータをロードするときに問題が発生しますか? (p. 541) 最新バージョンの Hive を使用していますか? Hive の最新バージョンには現行のパッチとバグ修正プログラムがすべて含まれているので、問題を解 決できる場合があります。詳細については、「サポートされる Hive のバージョン (p. 258)」を参照し てください。 Hive スクリプトに構文エラーがありましたか? ステップに障害が発生した場合、Hive スクリプトを実行したステップのログの stdout ファイルを確 認してください。エラーがそこにない場合、障害が発生したタスク試行のタスク試行ログの syslog ファイルを確認してください。詳細については、「ログファイルを表示する (p. 426)」を参照してく ださい。 540 Amazon EMR 開発者ガイド VPCエラー インタラクティブに実行しているとき、ジョブに障害が発生し ましたか? マスターノードで Hive をインタラクティブに実行しているときにクラスターに障害が発生した場合、 障害が発生したタスク試行のタスク試行ログの syslog エントリを確認してください。詳細について は、「ログファイルを表示する (p. 426)」を参照してください。 Amazon S3 と Hive の間でデータをロードするときに問題が発 生しますか? Amazon S3 のデータにアクセスするときに問題が発生する場合、最初に Amazon S3 との間でデータ をロードする際に問題が発生しますか? (p. 531) で考えられる原因を確認します。そのいずれも原因 として考えられない場合、Hive に固有の次の原因について考慮します。 • Hive の最新バージョンを利用していることを確認してください。Hive の最新バージョンには現行の パッチとバグ修正プログラムがすべて含まれているので、問題を解決できる場合があります。詳細 については、サポートされる Hive のバージョン (p. 258) を参照してください。 • INSERT OVERWRITE を使用するには、Amazon S3 バケットまたはフォルダーの内容をリストアッ プする必要があります。これはコストがかかるオペレーションです。可能であれば、Hive で既存の オブジェクトをリストアップし、削除する代わりに、パスを手動で取り除きます。 • ローカルのクラスターに Amazon S3 リストオペレーションの結果を事前キャッシュします。この 作業は、HiveQL でコマンド set hive.optimize.s3.query=true; を利用して行います。 • 可能な限り、静的パーティションを利用します。 • 一部のバージョンの Hive および Amazon EMR では、ALTER TABLES の使用が失敗する可能性が あります。これは、テーブルが Hive によって予期されているのとは異なる場所に保存されているた めです。この問題を解決するには、/home/hadoop/conf/core-site.xml で <property> <name>fs.s3n.endpoint</name> <value>s3.amazonaws.com</value> </property> を追加または更新します。 VPCエラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 以下のエラーは、Amazon EMR での VPC 設定で一般的です。 トピック • 無効なサブネット設定 (p. 541) • 不明な DHCP オプション設定 (p. 542) • 権限エラー (p. 542) • START_FAILED となるエラー (p. 543) 無効なサブネット設定 [Cluster Details] ページの [Status] フィールドに、次のようなエラーが表示されます。 541 Amazon EMR 開発者ガイド VPCエラー The subnet configuration was invalid: Cannot find route to InternetGateway in main RouteTable rtb-id for vpc vpc-id. この問題を解決するには、インターネットゲートウェイを作成し、VPC に接続する必要があります。 詳細については、「Adding an Internet Gateway to Your VPC」を参照してください。 または、[Enable DNS resolution] および [Enable DNS hostname support] を有効にした状態で、VPC を設定したことを確認します。詳細については、「Using DNS with Your VPC」を参照してくださ い。 不明な DHCP オプション設定 クラスターのシステムログ(syslog)に次のようなエラーとともにステップの失敗が表示されます。 ERROR org.apache.hadoop.security.UserGroupInformation (main): PriviledgedActionException as:hadoop (auth:SIMPLE) cause:java.io.IOException: org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id 'application_id' doesn't exist in RM. または ERROR org.apache.hadoop.streaming.StreamJob (main): Error Launching job : org.apache.hadoop.yarn.exceptions.ApplicationNotFoundException: Application with id 'application_id' doesn't exist in RM. この問題を解決するには、パラメーターが以下の値に設定されている DHCP オプション設定を含む VPC を設定する必要があります。 Note AWS GovCloud (US) リージョンを使用する場合、ドメイン名は次の例で使用されているもの ではなく、us-gov-west-1.compute.internal に設定します。 • domain-name = ec2.internal リージョンが 米国東部(バージニア北部) である場合は、ec2.internal を使用します。その他 のリージョンについては、region-name.compute.internal を使用します。例えば、us-west-2 では、domain-name=us-west-2.compute.internal を使用します。 • domain-name-servers = AmazonProvidedDNS 詳細については、「DHCP Options Sets」を参照してください。 権限エラー ステップの stderr ログ内のエラーは、Amazon S3 リソースに適切な権限がないことを示します。こ れは 403 エラーで、エラーは以下のようになっています。 Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: REQUEST_ID ActionOnFailure を TERMINATE_JOB_FLOW に設定した場合、クラスターが SHUTDOWN_COMPLETED_WITH_ERRORS の状態で終了します。 この問題をトラブルシューティングする方法には、次のようなものがあります。 • VPC 内で Amazon S3 バケットポリシーを使用している場合、すべてのバケットへのアクセスを許 可する必要があります。このためには、VPC エンドポイントを作成し、その作成時に [Policy] オプ ションで [Allow all] を選択します。 542 Amazon EMR 開発者ガイド AWS GovCloud (US) エラー • S3 リソースに関連付けられたすべてのポリシーに、クラスターを起動する VPC が含まれているこ とを確認します。 • クラスターから次のコマンドを実行して、バケットにアクセスできることを確認します。 hadoop fs -copyToLocal s3://path-to-bucket /tmp/ • より詳しいデバッグ情報を取得するには、log4j.logger.org.apache.http.wire パラメーター をクラスターの /home/hadoop/conf/log4j.properties ファイルの DEBUG に設定します。 クラスターからバケットへのアクセスを試行してから、stderr ログファイルを確認します。ログ ファイルで詳細情報を確認できます。 Access denied for getting the prefix for bucket - us-west-2.elasticmapreduce with path samples/wordcount/input/ 15/03/25 23:46:20 DEBUG http.wire: >> "GET /?prefix=samples%2Fwordcount %2Finput%2F&delimiter=%2F&max-keys=1 HTTP/1.1[\r][\n]" 15/03/25 23:46:20 DEBUG http.wire: >> "Host: uswest-2.elasticmapreduce.s3.amazonaws.com[\r][\n]" START_FAILED となるエラー AMI 3.7.0 以前では、ホスト名が指定された Amazon EC2 インスタンスである VPC の場合、Amazon EMR Amazon EMR はサブネットの内部ホスト名を以下のようにカスタムドメインアドレスでマッ ピングします。 ip-X.X.X.X.customdomain.com.tldたとえば、ホスト名が ip-10.0.0.10 で、VPC のドメイン名オプションが customdomain.com に設定されている場合、ホスト名は Amazon EMR でマッピングされて ip-10.0.1.0.customdomain.com になります。エントリは /etc/hosts に追加され、ホスト名を解決して 10.0.0.10 にします。この動作は、AMI 3.7.0 で変更され、Amazon EMR は VPC の DHCP 設定を完全に優先します。以前は、お客様は、ホスト名のマッピングを指定す るブートストラップアクションも使用できました。 この動作を維持するには、DNS を提供し、カスタムドメインに必要な解決セットアップを転送する必 要があります。 AWS GovCloud (US) エラー このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 AWS GovCloud (US) リージョンは、セキュリティ、設定、およびデフォルト設定において他のリー ジョンと異なります。その結果、より一般的なトラブルシューティングの推奨事項に従う前に、次の チェックリストを使用して、AWS GovCloud (US) リージョンに固有の Amazon EMR エラーをトラブ ルシューティングします。 • IAM ロールが正しく設定されていることを確認します。詳細については、「IAM およびアプリケー ションの Amazon EMR ロールを設定する (p. 186)」を参照してください。 • VPC 設定により DNS 解決/ホスト名サポート、インターネットゲートウェイ、および DHCP オプ ション設定パラメーターが正しく設定されていることを確認します。詳細については、「VPCエ ラー (p. 541)」を参照してください。 これらのステップで問題が解決されない場合は、一般的な Amazon EMR エラーをトラブルシュー ティングするステップを続行します。詳細については、「Amazon EMR の共通エラー (p. 530)」を 参照してください。 543 Amazon EMR 開発者ガイド その他の問題 その他の問題 必要なクラスターが、[Cluster List] ページまたは ListClusters API によって返される結果に表示されない場合 以下を確認してください。 • クラスターの期間が 2 か月を超えていないこと。Amazon EMR では、完了したクラスターに関する メタデータ情報を参照用に 2 か月間無料で保管します。完了したクラスターをコンソールから削除 することはできません。クラスターは 2 か月経つと自動的に削除されます。 • クラスターを表示するアクセス権限を持っていること。VisibleToAllUsers プロパティが false に設定されると、同じ IAM アカウントの他のユーザーはクラスターを表示できなくなります。 • 正しいリージョンを表示していること。 544 Amazon EMR 開発者ガイド エンドツーエンド Amazon EMR Java ソースコード例 クラスターを起動し管理するアプリ ケーションの作成 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 このドキュメントは、Amazon EMR の バージョン 4.x および 5.x を対象としています。Amazon EMR AMI バージョン 2.x および 3.x については、Amazon EMR 開発者ガイド (PDF) を参照してく ださい。 トピック • エンドツーエンド Amazon EMR Java ソースコード例 (p. 545) • API 呼び出しの一般的な考え方 (p. 549) • SDK を使用して Amazon EMR API を呼び出す (p. 551) いずれかの AWS SDK でラッパー関数を呼び出し、Amazon EMR API によって提供される機能にアク セスできます。 AWS SDK には、ウェブサービスの API をラップし、接続の詳細の多くをユーザーに 代わって処理することでウェブサービスへの接続を簡素化できる、言語固有の関数が用意されていま す。いずれかの SDK を使用して Amazon EMR を呼び出すことの詳細については、「SDK を使用し て Amazon EMR API を呼び出す (p. 551)」を参照してください。 Important Amazon EMR の最大要求率は、10 秒に 1 件です。 エンドツーエンド Amazon EMR Java ソースコー ド例 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 545 Amazon EMR 開発者ガイド エンドツーエンド Amazon EMR Java ソースコード例 開発者は、カスタム Java コードを使用して、Amazon EMR API を呼び出し、Amazon EMR コンソー ルまたは CLI で可能なことと同じことを実行できます。このセクションでは、AWS Toolkit for Eclipse をインストールし、Amazon EMR クラスターにステップを追加する、完全な機能を持つ Java ソース コード例を実行するために必要な、エンドツーエンドのステップを説明します。 Note この例では Java に焦点を当てますが、Amazon EMR も Amazon EMR SDK のコレクション により複数のプログラミング言語をサポートします。詳細については、「SDK を使用して Amazon EMR API を呼び出す (p. 551)」を参照してください。 この Java ソースコード例は、Amazon EMR API を使用して、以下のタスクを実行する方法を示しま す。 • AWS 認証情報を取得し、API 呼び出しを行うために Amazon EMR に送信する • 新しいカスタムステップと事前定義されたステップを設定する • 既存の Amazon EMR クラスターに新しいステップを追加する • 実行中のクラスターからクラスターステップ ID を取得する Note このサンプルは、既存のクラスターにステップを追加する方法を示すので、アカウントにア クティブなクラスターがある必要があります。 開始する前に、コンピューターのプラットフォームに適合するバージョンの Eclipse IDE for Java EE Developers をインストールします。詳細については、「Eclipse Downloads」を参照してください。 次に、Eclipse 用 Database Development プラグインをインストールします。 Database Development Eclipse プラグインをインストールするには 1. Eclipse IDE を開きます。 2. [Help] を選択し、[Install New Software] をクリックします。 3. [Work with:] フィールドに「http://download.eclipse.org/releases/kepler」または Eclipse IDE のバージョン番号と一致するパスを入力します。 4. 項目リストで、[Database Development] を選択し、[Finish] をクリックします。 5. 指示が表示されたら、Eclipse を再起動します。 次に、Toolkit for Eclipse をインストールして、役立つように事前設定されたソースコードプロジェク トテンプレートを利用できるようにします。 Toolkit for Eclipse をインストールするには 1. Eclipse IDE を開きます。 2. [Help] を選択し、[Install New Software] をクリックします。 3. [Work with:] フィールドに https://aws.amazon.com//eclipse と入力します。 4. 項目リストで、[AWS Toolkit for Eclipse] を選択し、[Finish] をクリックします。 5. 指示が表示されたら、Eclipse を再起動します。 次に、新しい AWS Java プロジェクトを作成し、サンプル Java ソースコードを実行します。 546 Amazon EMR 開発者ガイド エンドツーエンド Amazon EMR Java ソースコード例 新しい AWS Java プロジェクトを作成するには 1. Eclipse IDE を開きます。 2. [File]、[New]、[Other] の順にをクリックします。 3. [Select a wizard] ダイアログで、[AWS Java Project] を選択し、[Next] をクリックします。 4. [New AWS Java Project] ダイアログの、[Project name:] フィールドで、新しいプロジェクトの 名前を入力します(例: EMR-sample-code)。 5. [Configure AWS accounts…] をクリックして、パブリックおよびプライベートアクセスキーを 入力し、[Finish] をクリックします。アクセスキーの作成の詳細については、「How Do I Get Security Credentials?」を参照してください(「Amazon Web Services General Reference」 内)。 Note コードに直接アクセスキーを埋め込むことはできません。 Amazon EMR SDK では、既 知のロケーションにアクセスキーを置くことができるため、コードで保持する必要はあ りません。 6. 新しい Java プロジェクトで、src フォルダーを右クリックし、[New]、[Class] の順にクリックし ます。 547 Amazon EMR 開発者ガイド エンドツーエンド Amazon EMR Java ソースコード例 7. [Java Class] ダイアログの [Name] フィールドに新しいクラスの名前を入力します(例: main)。 8. [Which method stubs would you like to create?] セクションで、[public static void main(String[] args)] を選択し、[Finish] をクリックします。 9. 新しいクラス内に Java ソースコードを入力し、サンプルのクラスと方法に適切な import ステー トメントを追加します。参考までに、完全なソースコードのリストを下に示します。 Note 下のサンプルコードでは、例として示されているクラスター ID (j-1HTE8WKS7SODR) を、アカウント内の有効なクラスター ID に置き換えてください。この値は、AWS マネ ジメントコンソールまたは次の AWS CLI コマンドを使用して確認できます。 aws emr list-clusters --active | grep "Id" また、例 Amazon S3 のパス(s3://mybucket/my-jar-location1)を JAR への有効 なパスで置き換えます。最後に、例のクラス名(com.my.Main1)を JAR にあるクラス の正しい名前で置き換えます(該当する場合)。 import java.io.IOException; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.services.elasticmapreduce.*; import com.amazonaws.services.elasticmapreduce.model.AddJobFlowStepsRequest; import com.amazonaws.services.elasticmapreduce.model.AddJobFlowStepsResult; import com.amazonaws.services.elasticmapreduce.model.HadoopJarStepConfig; import com.amazonaws.services.elasticmapreduce.model.StepConfig; import com.amazonaws.services.elasticmapreduce.util.StepFactory; public class main { public static void main(String[] args) { AWSCredentials credentials = null; try { credentials = new PropertiesCredentials( main.class.getResourceAsStream("AwsCredentials.properties")); 548 Amazon EMR 開発者ガイド API 呼び出しの一般的な考え方 } catch (IOException e1) { System.out.println("Credentials were not properly entered into AwsCredentials.properties."); System.out.println(e1.getMessage()); System.exit(-1); } AmazonElasticMapReduce client = new AmazonElasticMapReduceClient(credentials); // predefined steps. See StepFactory for list of predefined steps StepConfig hive = new StepConfig("Hive", new StepFactory().newInstallHiveStep()); // A custom step HadoopJarStepConfig hadoopConfig1 = new HadoopJarStepConfig() .withJar("s3://mybucket/my-jar-location1") .withMainClass("com.my.Main1") // optional main class, this can be omitted if jar above has a manifest .withArgs("--verbose"); // optional list of arguments StepConfig customStep = new StepConfig("Step1", hadoopConfig1); AddJobFlowStepsResult result = client.addJobFlowSteps(new AddJobFlowStepsRequest() .withJobFlowId("j-1HTE8WKS7SODR") .withSteps(hive, customStep)); System.out.println(result.getStepIds()); } } 10. [Run]、[Run As]、[Java Application] の順にクリックします。 11. サンプルが正しく実行される場合、新しいステップの ID のリストが Eclipse IDE コンソールウィ ンドウに表示されます。正しい出力は次の例のようになります。 [s-39BLQZRJB2E5E, s-1L6A4ZU2SAURC] API 呼び出しの一般的な考え方 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • Amazon EMR におけるエンドポイント (p. 550) • Amazon EMR でクラスターパラメーターを指定する (p. 550) • Amazon EMR におけるアベイラビリティーゾーン (p. 550) • Amazon EMR クラスターで追加のファイルおよびライブラリを使用する方法 (p. 551) • Amazon EMR のサンプルアプリケーション (p. 551) Amazon EMR(Amazon EMR)API を呼び出すアプリケーションの記述において、SDK のラッパー関 数の 1 つを呼び出すときに該当するいくつかの概念があります。 549 Amazon EMR 開発者ガイド Amazon EMR におけるエンドポイント Amazon EMR におけるエンドポイント エンドポイントは、ウェブサービスのエントリポイントとなる URL です。ウェブサービス の各リクエストには、1 つずつエンドポイントが含まれている必要があります。エンドポイ ントは、クラスターが作成、記述、または終了される AWS リージョンを指定します。これ は、elasticmapreduce.regionname.amazonaws.com という形式です。全般的なエンドポイン ト(elasticmapreduce.amazonaws.com)を指定すると、Amazon EMR はリクエストをデフォル トのリージョンのエンドポイントに送信します。2013 年 3 月 8 日以降に作成されたアカウントの場 合、デフォルトのリージョンは us-west-2; です。それ以前のアカウントの場合、デフォルトのリー ジョンは us-east-1 です。 Amazon EMR のエンドポイントの詳細については、アマゾン ウェブ サービス全般のリファレンスの 「リージョンとエンドポイント」を参照してください。 Amazon EMR でクラスターパラメーターを指定す る Instances パラメーターを使用すると、データを処理するために作成する EC2 インスタンスのタ イプと数を設定できます。Hadoop は、データの処理を複数のクラスターノードに分配します。マス ターノードには、コアノードおよびタスクノードが正常であるかどうかを追跡することと、ジョブの 結果ステータスをノードに問い合わせるという責任があります。コアノードとタスクノードが実際 のデータ処理を実行します。クラスターが単一のノードで処理される場合は、そのノードがマスター ノードとコアノードの両方として機能します。 RunJobFlow リクエストにおける KeepJobAlive パラメーターは、実行するクラスターステップが なくなったクラスターを終了するかどうかを決定します。クラスターが予定どおりに実行されている ことが確かである場合は、この値を False に設定します。ジョブフローをトラブルシューティングし ていて、クラスターの実行が中断されている間にステップを追加している場合は、この値を True に 設定します。これにより、ステップを修正した後でクラスターを再開するために繰り返されるだけの 処理である、Amazon Simple Storage Service(Amazon S3)への結果のアップロードにかかる時間や コストを減らすことができます。 KeepJobAlive が true である場合は、クラスターの作業が正常に完了した後で TerminateJobFlows リクエストを送信する必要があります。送信しないと、クラスターが引き続き 実行されて AWS の料金が発生します。 RunJobFlow 独自のパラメーターの詳細については、RunJobFlow を参照してください。リクエスト の一般的なパラメーターの詳細については、「Common Request Parameters」を参照してください。 Amazon EMR におけるアベイラビリティーゾーン Amazon EMR は、クラスターを処理するノードとして EC2 インスタンスを使用します。この EC2 インスタンスには、アベイラビリティーゾーンとリージョンから構成される場所が含まれます。リー ジョンは、独立した地理的領域に分散して存在します。アベイラビリティーゾーンはリージョン内の 特定の場所で、他のアベイラビリティーゾーン内で障害が発生しても影響を受けません。各アベイラ ビリティーゾーンには、同一リージョン内の他のアベイラビリティーゾーンとの間に低コストでレイ テンシーの少ないネットワーク接続が用意されています。Amazon EMR のリージョンとエンドポイン トのリストについては、アマゾン ウェブ サービス全般のリファレンスの「リージョンとエンドポイン ト」を参照してください。 AvailabilityZone パラメーターは、クラスターのおおよその場所を指定します。このパラ メーターはオプションであり、原則として使用しないことをお勧めします。Amazon EMR で AvailabilityZone を指定しないと、クラスターにとって最適な AvailabilityZone 値が自動的 に選択されます。このパラメーターは、インスタンスを既存の実行中のインスタンスやクラスターと 同じ場所に置いて、それらのインスタンスのデータを読み書きする必要がある場合、役立つことがあ 550 Amazon EMR 開発者ガイド Amazon EMR クラスターで追加のファ イルおよびライブラリを使用する方法 ります。詳細については、「Linux インスタンス用 Amazon EC2 ユーザーガイド」を参照してくださ い。 Amazon EMR クラスターで追加のファイルおよび ライブラリを使用する方法 マッパーまたはリデューサーアプリケーションで、追加のファイルや独自のライブラリを使用したい ことがあります。例えば、PDF ファイルをプレーンテキストに変換するライブラリを使用する場合が 考えられます。 Hadoop ストリーミングの使用中にマッパーまたはリデューサー向けのファイルをキャッシュ するには • JAR args フィールドで、以下の引数を追加します。 -cacheFile s3://bucket/path_to_executable#local_path local_path ファイルは、ファイルを参照できるマッパーの作業ディレクトリにあります。 Amazon EMR のサンプルアプリケーション AWS には、必要な要素をすべて備えたアプリケーションを作成する方法を示すチュートリアルが用意 されています。 • Contextual Advertising using Apache Hive and Amazon EMR with High Performance Computing instances • Parsing Logs with Apache Pig and Elastic MapReduce • Finding Similar Items with Amazon EMR, Python, and Hadoop Streaming • ItemSimilarity • ワードカウントの例 Amazon EMR コードサンプルについては、「サンプルコードとライブラリ」を参照してください。 SDK を使用して Amazon EMR API を呼び出す このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • AWS SDK for Java を使用して Amazon EMR クラスターを作成する (p. 552) • .Net 用 AWS SDK を使用して Amazon EMR クラスターを作成する (p. 553) • Java SDK を使用して API リクエストに署名する (p. 555) AWS SDK には、API をラップして、署名の計算、リクエストの再試行の処理、エラー処理など、接 続のさまざまな詳細を処理する関数が用意されています。また SDK には、AWS を呼び出すアプリ ケーションの作成を開始するのに役立つ、サンプルコード、チュートリアルなどのリソースも含まれ ています。SDK のラッパー関数を呼び出すと、AWS アプリケーションを作成するプロセスを大幅に 簡素化できます。 551 Amazon EMR 開発者ガイド AWS SDK for Java を使用して Amazon EMR クラスターを作成する AWS SDK をダウンロードして使用する方法の詳細については、「サンプルコードとライブラリ」を 参照してください。SDK は現在、以下の言語とプラットフォームで利用できます。 • Java • Node.js • PHP • Python • Ruby • Windows および .NET AWS SDK for Java を使用して Amazon EMR クラ スターを作成する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Java 用 AWS SDK は、Amazon EMR (Amazon EMR) 機能を備えた 3 つのパッケージを提供します: • com.amazonaws.services.elasticmapreduce • com.amazonaws.services.elasticmapreduce.model • com.amazonaws.services.elasticmapreduce.util これらのパッケージの詳細については、AWS SDK for Java API Reference を参照してください。 次の例に、Amazon EMR でのプログラミングを SDK によってどのように簡素化できるかを示しま す。このコードサンプルでは、一般的な Amazon EMR ステップタイプを作成するためのヘルパーク ラスである StepFactory オブジェクトを使用して、デバッグを有効にした状態でインタラクティブ な Hive クラスターを作成します。 Note IAM ユーザーの可視性を新しいクラスターに追加する場合、RunJobFlow を呼び出 し、VisibleToAllUsers=true を設定します。そのようにしない場合、IAM ユーザーはク ラスターを表示できません。 AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey); AmazonElasticMapReduceClient emr = new AmazonElasticMapReduceClient(credentials); String COMMAND_RUNNER = "command-runner.jar"; String DEBUGGING_COMMAND = "state-pusher-script"; String DEBUGGING_NAME = "Setup Hadoop Debugging"; StepFactory stepFactory = new StepFactory(); StepConfig enabledebugging = new StepConfig() .withName(DEBUGGING_NAME) .withActionOnFailure(ActionOnFailure.TERMINATE_CLUSTER) .withHadoopJarStep(new HadoopJarStepConfig() .withJar(COMMAND_RUNNER) .withArgs(DEBUGGING_COMMAND)); 552 Amazon EMR 開発者ガイド .Net 用 AWS SDK を使用して Amazon EMR クラスターを作成する RunJobFlowRequest request = new RunJobFlowRequest() .withName("Hive Interactive") .withAmiVersion("3.8") .withSteps(enabledebugging, installHive) .withLogUri("s3://myawsbucket/") .withServiceRole("service_role") .withJobFlowRole("jobflow_role") .withInstances(new JobFlowInstancesConfig() .withEc2KeyName("keypair") .withInstanceCount(5) .withKeepJobFlowAliveWhenNoSteps(true) .withMasterInstanceType("m3.xlarge") .withSlaveInstanceType("m1.large")); RunJobFlowResult result = emr.runJobFlow(request); 少なくとも、それぞれ EMR_DefaultRole と EMR_EC2_DefaultRole に対応するサービスロールとジョ ブフローロールをパスする必要があります。そのためには、同じアカウントで次の AWS CLI コマン ドを実行します。最初に、ロールが既に存在するかどうかを確認します。 aws iam list-roles | grep EMR インスタンスプロファイル(EMR_EC2_DefaultRole)とサービスロール(EMR_DefaultRole)の両方 が表示されます(存在する場合)。 "RoleName": "EMR_DefaultRole", "Arn": "arn:aws:iam::AccountID:role/EMR_DefaultRole" "RoleName": "EMR_EC2_DefaultRole", "Arn": "arn:aws:iam::AccountID:role/EMR_EC2_DefaultRole" デフォルトのロールが存在しない場合は、次の AWS CLI コマンドを使用して作成できます。 aws emr create-default-roles .Net 用 AWS SDK を使用して Amazon EMR クラス ターを作成する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 次の例に、Amazon EMR でのプログラミングを SDK によってどのように簡素化できるかを示しま す。このコードサンプルでは、一般的な Amazon EMR ステップタイプを作成するためのヘルパーク ラスである StepFactory オブジェクトを使用して、デバッグを有効にした状態でインタラクティブ な Hive クラスターを作成します。 Note IAM ユーザーの可視性を新しいクラスターに追加する場合、RunJobFlow を呼び出 し、VisibleToAllUsers=true を設定します。そのようにしない場合、IAM ユーザーはク ラスターを表示できません。 553 Amazon EMR 開発者ガイド .Net 用 AWS SDK を使用して Amazon EMR クラスターを作成する var emrClient =AWSClientFactory.CreateAmazonElasticMapReduceClient(RegionEndpoint.USWest2); var stepFactory = new StepFactory(); var enabledebugging = new StepConfig{ Name = "Enable debugging", ActionOnFailure = "TERMINATE_JOB_FLOW", HadoopJarStep = stepFactory.NewEnableDebuggingStep() }; var installHive = new StepConfig{ Name = "Install Hive", ActionOnFailure = "TERMINATE_JOB_FLOW", HadoopJarStep = stepFactory.NewInstallHiveStep() }; var instanceConfig = new JobFlowInstancesConfig{ Ec2KeyName = "keypair", InstanceCount = 5, KeepJobFlowAliveWhenNoSteps = true, MasterInstanceType = "m1.small", SlaveInstanceType = "m1.small" }; var request = new RunJobFlowRequest{ Name = "Hive Interactive", Steps = {enabledebugging, installHive}, AmiVersion = "3.8.0", LogUri = "s3://myawsbucket", Instances = instanceConfig, ServiceRole = "service_role", JobFlowRole = "jobflow_role" }; var result = emrClient.RunJobFlow(request); 少なくとも、それぞれ EMR_DefaultRole と EMR_EC2_DefaultRole に対応するサービスロールとジョ ブフローロールをパスする必要があります。そのためには、同じアカウントで次の AWS CLI コマン ドを実行します。最初に、ロールが既に存在するかどうかを確認します。 aws iam list-roles | grep EMR インスタンスプロファイル(EMR_EC2_DefaultRole)とサービスロール(EMR_DefaultRole)の両方 が表示されます(存在する場合)。 "RoleName": "EMR_DefaultRole", "Arn": "arn:aws:iam::AccountID:role/EMR_DefaultRole" "RoleName": "EMR_EC2_DefaultRole", "Arn": "arn:aws:iam::AccountID:role/EMR_EC2_DefaultRole" デフォルトのロールが存在しない場合は、次の AWS CLI コマンドを使用して作成できます。 aws emr create-default-roles 554 Amazon EMR 開発者ガイド Java SDK を使用して API リクエストに署名する Java SDK を使用して API リクエストに署名する このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Amazon EMR は Signature Version 4 署名プロセスを使用して、AWS への署名済みリクエストを作成 します。詳細については、『アマゾン ウェブ サービス全般のリファレンス』の「署名バージョン 4 の署名プロセス」を参照してください。 555 Amazon EMR 開発者ガイド JSON の設定ファイル Hadoop 設定のリファレンス このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Apache Hadoop は、クラスターで起動された EC2 インスタンス上で実行されます。Amazon EMR は、クラスターを起動するときにユーザーが指定した Amazon Machine Image (AMI) に基 づいて、Hadoop のデフォルト設定を定義します。サポートされる AMI のバージョンについて は、Amazon マシンイメージ(AMI) (p. 56) を参照してください。 Note Amazon EMR は、最も広範なユースケースのインスタンスタイプごとに最適な構成設定を指 定しようとしますが、アプリケーションのニーズに応じてこれらの設定を手動で調整できる 可能性があります。 以下のセクションでは、Amazon EMR で使用できる各種の設定とメカニズムについて説明します。 トピック • JSON の設定ファイル (p. 556) • hadoop-user-env.sh の設定 (p. 560) • Hadoop 2.2.0 および 2.4.0 のデフォルト設定 (p. 561) • Hadoop 1.0.3 のデフォルト設定 (p. 594) • Hadoop 20.205 のデフォルト設定 (廃止) (p. 609) JSON の設定ファイル このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック 556 Amazon EMR 開発者ガイド ノードの設定 • ノードの設定 (p. 557) • クラスターの設定 (p. 558) Amazon EMR で Hadoop クラスターが作成されると、各ノードには、ノードおよび現在実行中のク ラスターに関する設定情報を含む JSON ファイルのペアが置かれます。これらのファイルは /mnt/ var/lib/info ディレクトリに置かれ、ノードで実行されるスクリプトからアクセス可能です。 ノードの設定 Amazon EMR クラスターノードの設定は、instance.json ファイルに含まれています。 次の表で、instance.json ファイルの内容を説明します。 パラメーター 説明 isMaster マスターノードであることを示します。 タイプ: ブール値 isRunningNameNode このノードが Hadoop ネームノードデーモンを実行中であること を示します。 タイプ: ブール値 isRunningDataNode このノードが Hadoop データノードデーモンを実行中であること を示します。 タイプ: ブール値 isRunningJobTracker このノードが Hadoop ジョブトラッカーデーモンを実行中である ことを示します。 タイプ: ブール値 isRunningTaskTracker このノードが Hadoop タスクトラッカーデーモンを実行中である ことを示します。 タイプ: ブール値 Hadoop 2.2.0 では次のパラメーターが instance.json ファイルに追加されています。 パラメーター 説明 isRunningResourceManager このノードが Hadoop リソースマネージャデーモンを実行中であ ることを示します。 タイプ: ブール値 isRunningNodeManager このノードが Hadoop ノードマネージャデーモンを実行中である ことを示します。 タイプ: ブール値 次の例で、instance.json ファイルの内容を示します。 { "instanceGroupId":"Instance_Group_ID", "isMaster": Boolean, "isRunningNameNode": Boolean, "isRunningDataNode": Boolean, "isRunningJobTracker": Boolean, "isRunningTaskTracker": Boolean 557 Amazon EMR 開発者ガイド クラスターの設定 } AWS CLI を使用して、ブートストラップアクションで instance.json の設定を読み取るには この手順では、run-if ブートストラップアクションを使用してコマンドライン関数 echo を実行 し、instance.json ファイル内の JSON ファイルパラメーター instance.isMaster を評価して 文字列 running on master node を表示する方法を示します。 • instance.json の設定を読み取るには、次のコマンドを入力し、myKey を EC2 キーペアの名前 に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-type m3.xlarge --instance-count 3 \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/runif,Name="Run-if Bootstrap",Args=["instance.isMaster=true", "echo 'Running on master node'"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig --use-default-roles --ec2attributes KeyName=myKey --instance-type m3.xlarge --instance-count 3 --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ run-if,Name="Run-if Bootstrap",Args=["instance.isMaster=true", "echo 'Running on master node'"] --instance-groups パラメーターを使用せずにインスタンス数を指定すると、1 つのマスター ノードが起動され、残りのインスタンスはコアノードとして起動されます。すべてのノードで、 コマンドで指定したインスタンスタイプが使用されます。 Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 クラスターの設定 現在実行中のクラスターに関する情報は、job-flow.json ファイルに含まれています。 次の表で、job-flow.json ファイルの内容を説明します。 パラメーター 説明 JobFlowID クラスターの ID を含みます。 タイプ: 文字列 jobFlowCreationInstant クラスターが作成された日時が含まれます。 タイプ: Long 558 Amazon EMR 開発者ガイド クラスターの設定 パラメーター 説明 instanceCount インスタンスグループ内のノード数。 タイプ: 整数 masterInstanceID マスターノードの ID が含まれます。 型: 文字列 masterPrivateDnsName マスターノードのプライベート DNS 名が含まれます。 型: 文字列 masterInstanceType マスターノードの EC2 インスタンスタイプが含まれます。 型: 文字列 slaveInstanceType スレーブノードの EC2 インスタンスタイプが含まれます。 型: 文字列 HadoopVersion クラスターで実行中の Hadoop のバージョンが含まれます。 型: 文字列 instanceGroups クラスター内の各インスタンスグループを指定するオブジェクト のいリスト instanceGroupId – 1 このインスタンスグループ固有の識別子。 タイプ: 文字列 instanceGroupName ― ユーザー定義のインスタンスグループ名。 タイプ: 文字列 instanceRole ― Master、Core、Task のいずれか。 タイプ: 文字列 instanceType ― "m1.small" などの、Amazon EC2 でのノードタイ プ。 タイプ: 文字列 requestedInstanceCount ― このインスタンスグループのノード数 の目標。 タイプ: Long 次の例で、job-flow.json ファイルの内容を示します。 { "jobFlowId":"JobFlowID", "jobFlowCreationInstant": CreationInstanceID, "instanceCount": Count, "masterInstanceId":"MasterInstanceID", "masterPrivateDnsName":"Name", "masterInstanceType":"Amazon_EC2_Instance_Type", "slaveInstanceType":"Amazon_EC2_Instance_Type", "hadoopVersion":"Version", "instanceGroups": [ { "instanceGroupId":"InstanceGroupID", "instanceGroupName":"Name", "instanceRole":"Master", "marketType":"Type", "instanceType":"AmazonEC2InstanceType", "requestedInstanceCount": Count }, 559 Amazon EMR 開発者ガイド hadoop-user-env.sh の設定 { "instanceGroupId":"InstanceGroupID", "instanceGroupName":"Name", "instanceRole":"Core", "marketType":"Type", "instanceType":"AmazonEC2InstanceType", "requestedInstanceCount": Count }, { "instanceGroupId":"InstanceGroupID", "instanceGroupName":"Name", "instanceRole":"Task", "marketType":"Type", "instanceType":"AmazonEC2InstanceType", "requestedInstanceCount": Count } ] } hadoop-user-env.sh の設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 Hadoop のデーモンまたはジョブを実行すると、初期化プロセスとしていくつかのスクリプトが実行 されます。実行可能ファイル hadoop は、実際は /home/hadoop/bin/hadoop という Bash スクリ プトのエイリアスです。このスクリプトには、Java classpath の設定、Java メモリ設定の設定、実 行する main クラスの決定、および実際の Java プロセスの実行という役目があります。 Hadoop 設定の一部として、hadoop スクリプトは conf/hadoop-env.sh というスクリプトを実行 します。hadoop-env.sh スクリプトは、さまざまな環境変数を設定できます。main の bin/hadoop スクリプトが変更されないように、conf/hadoop-env.sh スクリプトが使用されます。Amazon EMR では、起動されるすべての Hadoop デーモンのメモリ量を設定するために、クラスター内のすべ てのノードで hadoop-env.sh スクリプトが作成されます。 スクリプト conf/hadoop-user-env.sh を作成して、Amazon EMR で設定したデフォルトの Hadoop の設定をオーバーライドできます。 Hadoop 環境変数をオーバーライドするお客様独自の内容は、conf/hadoop-user-env.sh に含めま す。カスタムのオーバーライドには、Java メモリの変更や、classpath に追加する JAR ファイルの 指定などの項目も含まれます。このスクリプトは、メモリを設定したり追加の Java 変数を指定する ためにブートストラップアクションを使用するときに、Amazon EMR がデータを書き込む先でもあり ます。 Note カスタム classpath で元のクラスパスをオーバーライドする場合 HADOOP_USER_CLASSPATH_FIRST で指定した true 値が最初になるように、環境変数 HADOOP_CLASSPATH を hadoop-user-env.sh に設定する必要があります。 hadoop-user-env.sh に指定できる環境変数は、例えば次のとおりです。 • export HADOOP_DATANODE_HEAPSIZE="128" • export HADOOP_JOBTRACKER_HEAPSIZE="768" 560 Amazon EMR 開発者ガイド Hadoop 2.2.0 および 2.4.0 のデフォルト設定 • export HADOOP_NAMENODE_HEAPSIZE="256" • export HADOOP_OPTS="-server" • export HADOOP_TASKTRACKER_HEAPSIZE="512" さらに、Hadoop 2.2.0 では、hadoop-user-env.sh で指定できる次の新しい環境変数が追加されま す。 • YARN_RESOURCEMANAGER_HEAPSIZE="128" • YARN_NODEMANAGER_HEAPSIZE="768" 詳細については、Hadoop Apache ウェブサイトの「Hadoop MapReduce Next Generation - Cluster Setup」のトピックを参照してください。 ブートストラップアクションは、Hadoop の起動前と、各ステップの実行前に実行されます。場合に よっては、Hadoop の起動スクリプトで参照される Hadoop 環境変数を設定することが必要になりま す。 Hadoop の起動時に /home/hadoop/conf/hadoop-user-env.sh スクリプトが存在する と、Amazon EMR はこのスクリプトを実行し、どのオプションも bin/hadoop に引き継がれます。 たとえば、JAR ファイルを Hadoop デーモン classpath の最初に追加するには、以下のようなブー トストラップアクションを使用できます。 echo 'export HADOOP_USER_CLASSPATH_FIRST=true' >> /home/hadoop/conf/hadoopuser-env.sh echo 'export HADOOP_CLASSPATH=/path/to/my.jar:$HADOOP_CLASSPATH' >> /home/ hadoop/conf/hadoop-user-env.sh ブートストラップアクションの使用の詳細については、「(オプション)追加のソフトウェアをイン ストールするためのブートストラップアクションの作成 (p. 121)」を参照してください。 Hadoop 2.2.0 および 2.4.0 のデフォルト設定 このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 トピック • Hadoop 設定(Hadoop 2.2.0、2.4.0) (p. 561) • HDFS 設定(Hadoop 2.2.0) (p. 574) • タスクの設定(Hadoop 2.2.0) (p. 574) • 中間的な圧縮(Hadoop 2.2.0) (p. 592) このセクションでは、Hadoop 2.2.0 で起動される Hadoop クラスターを設定する際に Amazon EMR により使用されるデフォルト設定について説明します。Amazon EMR でサポートされる AMI のバー ジョンの詳細については「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 Hadoop 設定(Hadoop 2.2.0、2.4.0) このドキュメントは、Amazon EMR の AMI バージョン 2.x および 3.x を対象としています。 561 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) 以下の表に、Amazon EMR Hadoop 2.2.0 で起動されるクラスターにおける EC2 の各インスタンスタ イプのデフォルトの設定を示します。Amazon EMR でサポートされる AMI のバージョンの詳細につ いては、Amazon マシンイメージ(AMI) (p. 56) を参照してください。 m1.medium パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 384 YARN_PROXYSERVER_HEAPSIZE 192 YARN_NODEMANAGER_HEAPSIZE 256 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 256 HADOOP_NAMENODE_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 192 m1.large パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 768 YARN_PROXYSERVER_HEAPSIZE 384 YARN_NODEMANAGER_HEAPSIZE 512 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 512 HADOOP_NAMENODE_HEAPSIZE 768 HADOOP_DATANODE_HEAPSIZE 384 m1.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 1024 YARN_PROXYSERVER_HEAPSIZE 512 YARN_NODEMANAGER_HEAPSIZE 768 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1024 HADOOP_NAMENODE_HEAPSIZE 2304 HADOOP_DATANODE_HEAPSIZE 384 m2.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 1536 YARN_PROXYSERVER_HEAPSIZE 1024 562 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) パラメーター 値 YARN_NODEMANAGER_HEAPSIZE 1024 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1024 HADOOP_NAMENODE_HEAPSIZE 3072 HADOOP_DATANODE_HEAPSIZE 384 m2.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE1536 YARN_PROXYSERVER_HEAPSIZE 1024 YARN_NODEMANAGER_HEAPSIZE 1024 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1536 HADOOP_NAMENODE_HEAPSIZE 6144 HADOOP_DATANODE_HEAPSIZE 384 m2.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2048 YARN_PROXYSERVER_HEAPSIZE 1024 YARN_NODEMANAGER_HEAPSIZE 1536 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1536 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_DATANODE_HEAPSIZE 384 m3.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2396 YARN_PROXYSERVER_HEAPSIZE 2396 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2396 HADOOP_NAMENODE_HEAPSIZE 1740 HADOOP_DATANODE_HEAPSIZE 757 563 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) m4.large パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2252 YARN_PROXYSERVER_HEAPSIZE 2252 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2252 HADOOP_NAMENODE_HEAPSIZE 1024 HADOOP_DATANODE_HEAPSIZE 614 m4.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2416 YARN_PROXYSERVER_HEAPSIZE 2416 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2416 HADOOP_NAMENODE_HEAPSIZE 2048 HADOOP_DATANODE_HEAPSIZE 778 m4.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2744 YARN_PROXYSERVER_HEAPSIZE 2744 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2744 HADOOP_NAMENODE_HEAPSIZE 3481 HADOOP_DATANODE_HEAPSIZE 1105 m4.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3399 YARN_PROXYSERVER_HEAPSIZE 3399 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3399 564 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 6758 HADOOP_DATANODE_HEAPSIZE 1761 m4.10xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 5365 YARN_PROXYSERVER_HEAPSIZE 5365 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 5365 HADOOP_NAMENODE_HEAPSIZE 16588 HADOOP_DATANODE_HEAPSIZE 3727 m3.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2703 YARN_PROXYSERVER_HEAPSIZE 2703 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2703 HADOOP_NAMENODE_HEAPSIZE 3276 HADOOP_DATANODE_HEAPSIZE 1064 c1.medium パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 192 YARN_PROXYSERVER_HEAPSIZE 96 YARN_NODEMANAGER_HEAPSIZE 128 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 128 HADOOP_NAMENODE_HEAPSIZE 192 HADOOP_DATANODE_HEAPSIZE 96 565 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) c1.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 768 YARN_PROXYSERVER_HEAPSIZE 384 YARN_NODEMANAGER_HEAPSIZE 512 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 512 HADOOP_NAMENODE_HEAPSIZE 768 HADOOP_DATANODE_HEAPSIZE 384 c3.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2124 YARN_PROXYSERVER_HEAPSIZE 2124 YARN_NODEMANAGER_HEAPSIZE 2124 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2124 HADOOP_NAMENODE_HEAPSIZE 972 HADOOP_DATANODE_HEAPSIZE 588 c3.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2396 YARN_PROXYSERVER_HEAPSIZE 2396 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2396 HADOOP_NAMENODE_HEAPSIZE 1740 HADOOP_DATANODE_HEAPSIZE 757 c3.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2703 YARN_PROXYSERVER_HEAPSIZE 2703 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2703 566 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 3276 HADOOP_DATANODE_HEAPSIZE 1064 c3.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3317 YARN_PROXYSERVER_HEAPSIZE 3317 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3317 HADOOP_NAMENODE_HEAPSIZE 6348 HADOOP_DATANODE_HEAPSIZE 1679 c4.large パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 1152 YARN_PROXYSERVER_HEAPSIZE 1152 YARN_NODEMANAGER_HEAPSIZE 1152 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1152 HADOOP_NAMENODE_HEAPSIZE 576 HADOOP_DATANODE_HEAPSIZE 384 c4.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2124 YARN_PROXYSERVER_HEAPSIZE 2124 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2124 HADOOP_NAMENODE_HEAPSIZE 972 HADOOP_DATANODE_HEAPSIZE 588 567 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) c4.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2396 YARN_PROXYSERVER_HEAPSIZE 2396 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2396 HADOOP_NAMENODE_HEAPSIZE 1740 HADOOP_DATANODE_HEAPSIZE 757 c4.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2703 YARN_PROXYSERVER_HEAPSIZE 2703 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2703 HADOOP_NAMENODE_HEAPSIZE 3276 HADOOP_DATANODE_HEAPSIZE 1064 c4.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3317 YARN_PROXYSERVER_HEAPSIZE 3317 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3317 HADOOP_NAMENODE_HEAPSIZE 6348 HADOOP_DATANODE_HEAPSIZE 1679 cc2.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2048 YARN_PROXYSERVER_HEAPSIZE 1024 YARN_NODEMANAGER_HEAPSIZE 1536 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1536 568 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_DATANODE_HEAPSIZE 384 cg1.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2048 YARN_PROXYSERVER_HEAPSIZE 1024 YARN_NODEMANAGER_HEAPSIZE 1536 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1536 HADOOP_NAMENODE_HEAPSIZE 3840 HADOOP_DATANODE_HEAPSIZE 384 cr1.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 7086 YARN_PROXYSERVER_HEAPSIZE 7086 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 7086 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_DATANODE_HEAPSIZE 4096 d2.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2713 YARN_PROXYSERVER_HEAPSIZE 2713 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2713 HADOOP_NAMENODE_HEAPSIZE 3328 HADOOP_DATANODE_HEAPSIZE 1075 569 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) d2.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3338 YARN_PROXYSERVER_HEAPSIZE 3338 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3338 HADOOP_NAMENODE_HEAPSIZE 6451 HADOOP_DATANODE_HEAPSIZE 1699 d2.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 4587 YARN_PROXYSERVER_HEAPSIZE 4587 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 4587 HADOOP_NAMENODE_HEAPSIZE 12697 HADOOP_DATANODE_HEAPSIZE 2949 d2.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 7089 YARN_PROXYSERVER_HEAPSIZE 7086 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 7086 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_DATANODE_HEAPSIZE 4096 hi1.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3328 YARN_PROXYSERVER_HEAPSIZE 3328 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3328 570 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 6400 HADOOP_DATANODE_HEAPSIZE 1689 hs1.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2048 YARN_PROXYSERVER_HEAPSIZE 1024 YARN_NODEMANAGER_HEAPSIZE 1536 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1536 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_DATANODE_HEAPSIZE 384 i2.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2713 YARN_PROXYSERVER_HEAPSIZE 2713 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2713 HADOOP_NAMENODE_HEAPSIZE 3328 HADOOP_DATANODE_HEAPSIZE 1075 i2.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3338 YARN_PROXYSERVER_HEAPSIZE 3338 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3338 HADOOP_NAMENODE_HEAPSIZE 6451 HADOOP_DATANODE_HEAPSIZE 1699 571 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) i2.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 4587 YARN_PROXYSERVER_HEAPSIZE 4587 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 4587 HADOOP_NAMENODE_HEAPSIZE 12697 HADOOP_DATANODE_HEAPSIZE 2949 i2.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 7086 YARN_PROXYSERVER_HEAPSIZE 7086 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 7086 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_DATANODE_HEAPSIZE 4096 g2.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 1536 YARN_PROXYSERVER_HEAPSIZE 1024 YARN_NODEMANAGER_HEAPSIZE 1024 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 1024 HADOOP_NAMENODE_HEAPSIZE 2304 HADOOP_DATANODE_HEAPSIZE 384 r3.xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 2713 YARN_PROXYSERVER_HEAPSIZE 2713 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 2713 572 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 2.2.0、2.4.0) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 3328 HADOOP_DATANODE_HEAPSIZE 1075 r3.2xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 3338 YARN_PROXYSERVER_HEAPSIZE 3338 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 3338 HADOOP_NAMENODE_HEAPSIZE 6451 HADOOP_DATANODE_HEAPSIZE 1699 r3.4xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 4587 YARN_PROXYSERVER_HEAPSIZE 4587 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 4587 HADOOP_NAMENODE_HEAPSIZE 12697 HADOOP_DATANODE_HEAPSIZE 2949 r3.8xlarge パラメーター 値 YARN_RESOURCEMANAGER_HEAPSIZE 7086 YARN_PROXYSERVER_HEAPSIZE 7086 YARN_NODEMANAGER_HEAPSIZE 2048 HADOOP_JOB_HISTORYSERVER_HEAPSIZE 7086 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_DATANODE_HEAPSIZE 4096 573 Amazon EMR 開発者ガイド HDFS 設定(Hadoop 2.2.0) HDFS 設定(Hadoop 2.2.0) 次の表に、Hadoop Distributed File System(HDFS)のデフォルトのパラメーターとその設定を示し ます。 パラメーター 定義 デフォルト値 dfs.block.size HDFS ブロックのサイズ。HDFS に格納されているデータを 操作するとき、分割サイズは原則として HDFS ブロックのサ イズです。値を大きくするとタスクの粒度は小さくなります が、クラスターへの負荷も低下します。NameNode 134217728(128 MB) dfs.replication 持続性を高めるために、各ブロックのコピーをいくつ作成す るかを決定します。小さなクラスターではこれを 2 個に設 定しています。データが失われた場合にクラスターが小さ いと再起動が容易なためです。この設定は、必要に応じて 1、2、または 3 個に変更できます。Amazon EMR では、ク ラスターのサイズに基づいて自動的にレプリケーション係数 を計算します。デフォルト値を上書きするには、configurehadoop ブートストラップアクションを使用します。 クラスター < 4 ノー ドの場合、1 個 クラスター < 10 ノードの場合、2 個 それ以外のすべて のクラスターの場 合、3 個 タスクの設定(Hadoop 2.2.0) トピック • クラスターのシャットダウンの回避(AMI 3.0.0) (p. 574) MapReduce ジョブのパフォーマンスを調整するための設定変数がいくつかあります。このセクショ ンでは、タスク関連のいくつかの重要な設定について説明します。 クラスターのシャットダウンの回避(AMI 3.0.0) タスク JVM メモリの設定 Hadoop 2 は 2 つのパラメーターを使用してマップとリデュースのメモリを設定します(それぞ れ、mapreduce.map.java.opts および mapreduce.reduce.java.opts)。これらのパラメーターは、以 前の Hadoop バージョンの 1 つの設定オプション(mapreduce.map.java.opts)に置き換わります。 次の表に、インスタンスタイプ別のこれらの設定のデフォルト値を示します。 m1.medium 設定オプション デフォルト値 mapreduce.map.java.opts -Xmx512m mapreduce.reduce.java.opts -Xmx768m mapreduce.map.memory.mb 768 mapreduce.reduce.memory.mb 1024 yarn.app.mapreduce.am.resource.mb 1024 yarn.scheduler.minimum-allocation-mb 256 yarn.scheduler.maximum-allocation-mb 2048 574 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 yarn.nodemanager.resource.memory-mb 2048 m1.large 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx512m -Xmx512m mapreduce.reduce.java.opts -Xmx1024m -Xmx1024m mapreduce.map.memory.mb 768 768 mapreduce.reduce.memory.mb 1536 1536 yarn.app.mapreduce.am.resource.mb 1536 1536 yarn.scheduler.minimum-allocation-mb 256 32 yarn.scheduler.maximum-allocation-mb 5120 2560 yarn.nodemanager.resource.memory-mb 5120 2560 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx512m -Xmx512m mapreduce.reduce.java.opts -Xmx1536m -Xmx1536m mapreduce.map.memory.mb 768 768 mapreduce.reduce.memory.mb 2048 2048 yarn.app.mapreduce.am.resource.mb 2048 2048 yarn.scheduler.minimum-allocation-mb 256 32 yarn.scheduler.maximum-allocation-mb 12288 6144 yarn.nodemanager.resource.memory-mb 12288 6144 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx864m -Xmx864m mapreduce.reduce.java.opts -Xmx1536m -Xmx1536m mapreduce.map.memory.mb 1024 1024 mapreduce.reduce.memory.mb 2048 2048 m1.xlarge m2.xlarge 575 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.app.mapreduce.am.resource.mb 2048 2048 yarn.scheduler.minimum-allocation-mb 256 32 yarn.scheduler.maximum-allocation-mb 14336 7168 yarn.nodemanager.resource.memory-mb 14336 7168 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1280m -Xmx1280m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 2560 2560 yarn.app.mapreduce.am.resource.mb 2560 2560 yarn.scheduler.minimum-allocation-mb 256 32 yarn.scheduler.maximum-allocation-mb 30720 15360 yarn.nodemanager.resource.memory-mb 30720 15360 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1280m -Xmx1280m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 2560 2560 yarn.app.mapreduce.am.resource.mb 2560 2560 yarn.scheduler.minimum-allocation-mb 256 32 yarn.scheduler.maximum-allocation-mb 61440 30720 yarn.nodemanager.resource.memory-mb 61440 30720 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1152m -Xmx1152m m2.2xlarge m2.4xlarge m3.xlarge 576 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1440 1440 mapreduce.reduce.memory.mb 2880 2880 yarn.app.mapreduce.am.resource.mb 2880 2880 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 11520 5760 yarn.nodemanager.resource.memory-mb 11520 5760 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1152m -Xmx1152m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1440 1440 mapreduce.reduce.memory.mb 2880 2880 yarn.app.mapreduce.am.resource.mb 2880 2880 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 23040 11520 yarn.nodemanager.resource.memory-mb 23040 11520 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2458m -Xmx2458m mapreduce.reduce.java.opts -Xmx4916m -Xmx4916m mapreduce.map.memory.mb 3072 3072 mapreduce.reduce.memory.mb 6144 6144 yarn.app.mapreduce.am.resource.mb 6144 6144 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 6144 3072 yarn.nodemanager.resource.memory-mb 6144 3072 m3.2xlarge m4.large 577 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) m4.xlarge 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1229m -Xmx1229m mapreduce.reduce.java.opts -Xmx2548m -Xmx2458m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 3072 3072 yarn.app.mapreduce.am.resource.mb 3072 3072 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 12288 6144 yarn.nodemanager.resource.memory-mb 12288 6144 m4.2xlarge 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1229m -Xmx1229m mapreduce.reduce.java.opts -Xmx2458m -Xmx2458m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 3072 3072 yarn.app.mapreduce.am.resource.mb 3072 3072 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 24576 12288 yarn.nodemanager.resource.memory-mb 24576 12288 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1434m -Xmx1434m mapreduce.reduce.java.opts -Xmx2868m -Xmx2868m mapreduce.map.memory.mb 1792 1792 mapreduce.reduce.memory.mb 3584 3584 yarn.app.mapreduce.am.resource.mb 3584 3584 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 57344 28672 m4.4xlarge 578 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.nodemanager.resource.memory-mb 57344 28672 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1557m -Xmx1557m mapreduce.reduce.java.opts -Xmx3114m -Xmx3114m mapreduce.map.memory.mb 1946 1946 mapreduce.reduce.memory.mb 3892 3892 yarn.app.mapreduce.am.resource.mb 3892 3892 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 155648 124544 yarn.nodemanager.resource.memory-mb 155648 124544 m4.10xlarge m4.16xlarge 設定オプション デフォルト値 mapreduce.map.java.opts -Xmx1587m mapreduce.reduce.java.opts -Xmx3114m mapreduce.map.memory.mb 1984 mapreduce.reduce.memory.mb 3968 yarn.app.mapreduce.am.resource.mb 3968 yarn.scheduler.minimum-allocation-mb 32 yarn.scheduler.maximum-allocation-mb 253952 yarn.nodemanager.resource.memory-mb 253952 c1.medium 設定オプション デフォルト値 io.sort.mb 100 mapreduce.map.java.opts -Xmx288m mapreduce.reduce.java.opts -Xmx288m mapreduce.map.memory.mb 512 mapreduce.reduce.memory.mb 512 579 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 yarn.app.mapreduce.am.resource.mb yarn.scheduler.minimum-allocation-mb 32 yarn.scheduler.maximum-allocation-mb 512 yarn.nodemanager.resource.memory-mb 1024 c1.xlarge 設定オプション デフォルト値 HBase がインストールされ ている場合 io.sort.mb 150 150 mapreduce.map.java.opts -Xmx864m -Xmx864m mapreduce.reduce.java.opts -Xmx1536m -Xmx1536m mapreduce.map.memory.mb 1024 1024 mapreduce.reduce.memory.mb 2048 2048 yarn.app.mapreduce.am.resource.mb 2048 2048 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 5120 2560 yarn.nodemanager.resource.memory-mb 5120 2560 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1126m -Xmx1126m mapreduce.reduce.java.opts -Xmx2252m -Xmx2252m mapreduce.map.memory.mb 1408 1408 mapreduce.reduce.memory.mb 2816 2816 yarn.app.mapreduce.am.resource.mb 2816 2816 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 5632 2816 yarn.nodemanager.resource.memory-mb 5632 2816 c3.xlarge 580 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) c3.2xlarge 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1152m -Xmx1152m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1440 1440 mapreduce.reduce.memory.mb 2880 2880 yarn.app.mapreduce.am.resource.mb 2880 2880 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 11520 5760 yarn.nodemanager.resource.memory-mb 11520 5760 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1152m -Xmx1152m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1440 1440 mapreduce.reduce.memory.mb 2880 2880 yarn.app.mapreduce.am.resource.mb 2880 2880 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 23040 11520 yarn.nodemanager.resource.memory-mb 23040 11520 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1331m -Xmx1331m mapreduce.reduce.java.opts -Xmx2662m -Xmx2662m mapreduce.map.memory.mb 1664 1664 mapreduce.reduce.memory.mb 3328 3328 yarn.app.mapreduce.am.resource.mb 3328 3328 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 53248 26624 c3.4xlarge c3.8xlarge 581 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.nodemanager.resource.memory-mb 53248 26624 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx717m -Xmx717m mapreduce.reduce.java.opts -Xmx1434m -Xmx1434m mapreduce.map.memory.mb 896 896 mapreduce.reduce.memory.mb 1792 1792 yarn.app.mapreduce.am.resource.mb 1792 1792 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 1792 896 yarn.nodemanager.resource.memory-mb 1792 896 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1126m -Xmx1126m mapreduce.reduce.java.opts -Xmx2252m -Xmx2252m mapreduce.map.memory.mb 1408 1408 mapreduce.reduce.memory.mb 2816 2816 yarn.app.mapreduce.am.resource.mb 2816 2816 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 5632 2816 yarn.nodemanager.resource.memory-mb 5632 2816 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1152m -Xmx1152m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1440 1440 mapreduce.reduce.memory.mb 2880 2880 c4.large c4.xlarge c4.2xlarge 582 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.app.mapreduce.am.resource.mb 2880 2880 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 11520 5760 yarn.nodemanager.resource.memory-mb 11520 5760 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1152m -Xmx1152m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1440 1440 mapreduce.reduce.memory.mb 2880 2880 yarn.app.mapreduce.am.resource.mb 2880 2880 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 23040 11520 yarn.nodemanager.resource.memory-mb 23040 11520 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1183m -Xmx1183m mapreduce.reduce.java.opts -Xmx2366m -Xmx2366m mapreduce.map.memory.mb 1479 1479 mapreduce.reduce.memory.mb 2958 2958 yarn.app.mapreduce.am.resource.mb 2958 2958 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 53248 26624 yarn.nodemanager.resource.memory-mb 53248 26624 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1280m -Xmx1280m c4.4xlarge c4.8xlarge cg1.4xlarge 583 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 2560 2560 yarn.app.mapreduce.am.resource.mb 2560 2560 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 20480 10240 yarn.nodemanager.resource.memory-mb 20480 10240 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1280m -Xmx1280m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 2560 2560 yarn.app.mapreduce.am.resource.mb 2560 2560 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 56320 28160 yarn.nodemanager.resource.memory-mb 56320 28160 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx6042m -Xmx6042m mapreduce.reduce.java.opts -Xmx12084m -Xmx12084m mapreduce.map.memory.mb 7552 7552 mapreduce.reduce.memory.mb 15104 15104 yarn.app.mapreduce.am.resource.mb 15104 15104 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 241664 211456 yarn.nodemanager.resource.memory-mb 241664 211456 cc2.8xlarge cr1.8xlarge 584 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) d2.xlarge 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2342m -Xmx2342m mapreduce.reduce.java.opts -Xmx4684m -Xmx4684m mapreduce.map.memory.mb 2928 2928 mapreduce.reduce.memory.mb 5856 5856 yarn.app.mapreduce.am.resource.mb 5856 5856 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 23424 11712 yarn.nodemanager.resource.memory-mb 23424 11712 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2714m -Xmx2714m mapreduce.reduce.java.opts -Xmx5428m -Xmx5428m mapreduce.map.memory.mb 3392 3392 mapreduce.reduce.memory.mb 6784 6784 yarn.app.mapreduce.am.resource.mb 6784 6784 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 54272 27136 yarn.nodemanager.resource.memory-mb 54272 27136 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2918m -Xmx2918m mapreduce.reduce.java.opts -Xmx5836m -Xmx5836m mapreduce.map.memory.mb 3648 3648 mapreduce.reduce.memory.mb 7296 7296 yarn.app.mapreduce.am.resource.mb 7296 7296 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 116736 87552 d2.2xlarge d2.4xlarge 585 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.nodemanager.resource.memory-mb 116736 87552 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2417m -Xmx2417m mapreduce.reduce.java.opts -Xmx4384m -Xmx4834m mapreduce.map.memory.mb 3021 3021 mapreduce.reduce.memory.mb 6042 6042 yarn.app.mapreduce.am.resource.mb 6042 6042 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 241664 211470 yarn.nodemanager.resource.memory-mb 241664 211470 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx512m -Xmx512m mapreduce.reduce.java.opts -Xmx1536m -Xmx1536m mapreduce.map.memory.mb 768 768 mapreduce.reduce.memory.mb 2048 2048 yarn.app.mapreduce.am.resource.mb 2048 2048 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 12288 6144 yarn.nodemanager.resource.memory-mb 12288 6144 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2688m -Xmx2688m mapreduce.reduce.java.opts -Xmx5376m -Xmx5376m mapreduce.map.memory.mb 3360 3360 mapreduce.reduce.memory.mb 6720 6720 d2.8xlarge g2.2xlarge hi1.4xlarge 586 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.app.mapreduce.am.resource.mb 6720 6720 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 53760 26880 yarn.nodemanager.resource.memory-mb 53760 26880 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx1280m -Xmx1280m mapreduce.reduce.java.opts -Xmx2304m -Xmx2304m mapreduce.map.memory.mb 1536 1536 mapreduce.reduce.memory.mb 2560 2560 yarn.app.mapreduce.am.resource.mb 2560 2560 yarn.scheduler.minimum-allocation-mb 256 32 yarn.scheduler.maximum-allocation-mb 8192 28160 yarn.nodemanager.resource.memory-mb 56320 28160 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2342m -Xmx2342m mapreduce.reduce.java.opts -Xmx4684m -Xmx4684m mapreduce.map.memory.mb 2928 2928 mapreduce.reduce.memory.mb 5856 5856 yarn.app.mapreduce.am.resource.mb 5856 5856 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 23424 11712 yarn.nodemanager.resource.memory-mb 23424 11712 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2714m -Xmx2714m hs1.8xlarge i2.xlarge i2.2xlarge 587 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.reduce.java.opts -Xmx5428m -Xmx5428m mapreduce.map.memory.mb 3392 3392 mapreduce.reduce.memory.mb 6784 6784 yarn.app.mapreduce.am.resource.mb 6784 6784 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 54272 27136 yarn.nodemanager.resource.memory-mb 54272 27136 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2918m -Xmx2918m mapreduce.reduce.java.opts -Xmx5836m -Xmx5836m mapreduce.map.memory.mb 3648 3648 mapreduce.reduce.memory.mb 7296 7296 yarn.app.mapreduce.am.resource.mb 7296 7296 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 116736 87552 yarn.nodemanager.resource.memory-mb 116736 87552 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx3021m -Xmx3021m mapreduce.reduce.java.opts -Xmx6042m -Xmx6042m mapreduce.map.memory.mb 3776 3776 mapreduce.reduce.memory.mb 7552 7552 yarn.app.mapreduce.am.resource.mb 7552 7552 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 241664 211456 yarn.nodemanager.resource.memory-mb 241664 211456 i2.4xlarge i2.8xlarge 588 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) r3.xlarge 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2342m -Xmx2342m mapreduce.reduce.java.opts -Xmx4684m -Xmx4684m mapreduce.map.memory.mb 2982 2982 mapreduce.reduce.memory.mb 5856 5856 yarn.app.mapreduce.am.resource.mb 5856 5856 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 23424 11712 yarn.nodemanager.resource.memory-mb 23424 11712 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2714m -Xmx2714m mapreduce.reduce.java.opts -Xmx5428m -Xmx5428m mapreduce.map.memory.mb 3392 3392 mapreduce.reduce.memory.mb 6784 6784 yarn.app.mapreduce.am.resource.mb 6784 6784 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 54272 27136 yarn.nodemanager.resource.memory-mb 54272 27136 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx2918m -Xmx2918m mapreduce.reduce.java.opts -Xmx5836m -Xmx5836m mapreduce.map.memory.mb 3648 3648 mapreduce.reduce.memory.mb 7296 7296 yarn.app.mapreduce.am.resource.mb 7296 7296 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 116736 87552 r3.2xlarge r3.4xlarge 589 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) 設定オプション デフォルト値 HBase がインストールされ ている場合 yarn.nodemanager.resource.memory-mb 116736 87552 設定オプション デフォルト値 HBase がインストールされ ている場合 mapreduce.map.java.opts -Xmx3021m -Xmx3021m mapreduce.reduce.java.opts -Xmx6042m -Xmx6042m mapreduce.map.memory.mb 3776 3776 mapreduce.reduce.memory.mb 7552 7552 yarn.app.mapreduce.am.resource.mb 7552 7552 yarn.scheduler.minimum-allocation-mb 32 32 yarn.scheduler.maximum-allocation-mb 241664 211456 yarn.nodemanager.resource.memory-mb 241664 211456 r3.8xlarge JVM は、タスクごとに新しく起動できます。これにより、タスクの独立性を高めることも、タスク間 で JVM を共有してフレームワークのオーバーヘッドを低下させることもできます。多くの小さいファ イルを処理する場合は、JVM を何回も再利用して起動のコストを分散させることに意味があります。 ただし、各タスクが長時間かかる場合や大量のデータを処理する場合は、後続のタスクのためにすべ てのメモリが確実に解放されるように、JVM を再利用しない選択もできます。 JVM の再利用設定を設定するには、mapred.job.reuse.jvm.num.tasks オプションを使用しま す。 AWS CLI を使用してブートストラップアクションによって JVM 設定を変更するには AWS CLI を使用して JVM 設定を変更するには、--bootstrap-action パラメーターを入力し、引 数リストで設定を指定します。 1. 2. aws emr create-cluster --release-label --instance-type m3.xlarge -instance-count 3 --applications Name=Hadoop --configurations https:// s3.amazonaws.com/mybucket/myfolder/myConfig.json 無限の JVM 再利用を設定するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置 き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ 590 Amazon EMR 開発者ガイド タスクの設定(Hadoop 2.2.0) --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="Configuring infinite JVM reuse",Args=["m","mapred.job.reuse.jvm.num.tasks=-1"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.11.0 --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="Configuring infinite JVM reuse",Args=["m","mapred.job.reuse.jvm.num.tasks=-1"] 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成していない場合 は、「aws emr create-default-roles」と入力してそれらを作成してから、create-cluster サ ブコマンドを入力します。 Note Amazon EMR によって値が mapred.job.reuse.jvm.num.tasks から 20 まで設定されま すが、上書きできます。値を -1 にすると 1 つのジョブ内でいつまでも再利用が行われ、1 に するとタスクは再利用されません。 詳細については、AWS CLI の Amazon EMR コマンドを参照してください。 分散環境では、散発的な遅延、処理速度の遅いハードウェア、欠陥のあるハードウェアなどの問題 が発生し、それらが蓄積してクラスターの速度が低下します。これは、落伍者問題と呼ばれていま す。Hadoop は、この問題の軽減に役立つ投機的実行という機能を備えています。クラスターの進捗 に伴い、一部のマシンでタスクが完了します。Hadoop は、空いたノードにタスクをスケジュールし ます。早く終了した方のタスクが採用され、もう片方は破棄されます。この機能により、ジョブの 実行時間が大幅に削減されます。MapReduce アルゴリズムの一般的な設計では、マップタスクの進 行はべき等になるものとされています。しかし、タスクの実行に副作用がある場合(例えば、外部リ ソースを呼び出すゼロリデューサージョブ)は、投機的実行を無効にする必要があります。 投機的実行は、マッパーとリデューサーそれぞれ別個に有効にすることができます。AMI 2.3 のデ フォルトでは、Amazon EMR によってマッパーまたはリデューサーで有効にされています。この設定 は、ブートストラップアクションでオーバーライドできます。ブートストラップアクションの使用の 詳細については、「(オプション)追加のソフトウェアをインストールするためのブートストラップ アクションの作成 (p. 121)」を参照してください。 投機的実行のパラメーター パラメーター デフォル ト設定 mapred.map.tasks.speculative.execution true mapred.reduce.tasks.speculative.execution true AWS CLI を使用してブートストラップアクションによってリデューサーの投機的実行を無効 にするには AWS CLI を使用してリデューサーの投機的実行を無効にするには、--bootstrap-action パラメー ターを入力し、引数を指定します。 591 Amazon EMR 開発者ガイド 中間的な圧縮(Hadoop 2.2.0) • 次のコマンドを入力して、リデューサーの投機的実行を無効にし、myKey を EC2 キーペアの名 前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="Disable reducer speculative execution",Args=["m","mapred.reduce.tasks.speculative.execution=false"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="Disable reducer speculative execution",Args=["m","mapred.reduce.tasks.speculative.execution=false"] Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http://docs.aws.amazon.com/ cli/latest/reference/emr」を参照してください。 中間的な圧縮(Hadoop 2.2.0) Hadoop は、シャッフルプロセスの際にマッパーとリデューサーの間でデータを送信します。この ネットワーク操作は、多くのクラスターでボトルネックになります。このボトルネックを軽減するた めに、Amazon EMR ではデフォルトで中間的なデータ圧縮が有効にされています。わずかな CPU 負 荷でかなりの量が圧縮されるため、Snappy コーデックを採用しています。 このデフォルトの圧縮設定は、ブートストラップアクションで変更できます。ブートストラップア クションの使用の詳細については、「(オプション)追加のソフトウェアをインストールするための ブートストラップアクションの作成 (p. 121)」を参照してください。 次の表に、中間圧縮に影響するパラメーターのデフォルト値を示します。 パラメーター 値 mapred.compress.map.output true mapred.map.output.compression.codec org.apache.hadoop.io.compress.SnappyCodec 592 Amazon EMR 開発者ガイド 中間的な圧縮(Hadoop 2.2.0) AWS CLI を使用してブートストラップアクションによって中間圧縮を無効にするか圧縮コー デックを変更するには AWS CLI を使用して中間圧縮を無効にするか中間圧縮コーデックを変更するには、--bootstrapaction パラメーターを入力し、引数を指定します。 1. 圧縮を無効にするには、次のコマンドを入力して、myKey を EC2 キーペアの名前に置き換えま す。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrapactions/configure-hadoop,Name="Disable compression",Args=["m","mapred.compress.map.output=false"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 --applications Name=Hue Name=Hive Name=Pig --use-defaultroles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --bootstrap-action Path=s3://elasticmapreduce/bootstrapactions/configure-hadoop,Name="Disable compression",Args=["m","mapred.compress.map.output=false"] Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 2. 中間圧縮コーデックを Snappy から Gzip に変更するには、次のコマンドを入力し、myKey を EC2 キーペアの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 -applications Name=Hue Name=Hive Name=Pig \ --use-default-roles --ec2-attributes KeyName=myKey \ --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge \ --bootstrap-action Path=s3://elasticmapreduce/bootstrap-actions/ configure-hadoop,Name="Change compression codec",Args=["m","mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec"] • Windows ユーザー: aws emr create-cluster --name "Test cluster" --ami-version 3.3 --applications Name=Hue Name=Hive Name=Pig --use-default593 Amazon EMR 開発者ガイド Hadoop 1.0.3 のデフォルト設定 roles --ec2-attributes KeyName=myKey --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m3.xlarge InstanceGroupType=CORE,InstanceCount=2,InstanceType=m3.xlarge --bootstrap-action Path=s3://elasticmapreduce/bootstrapactions/configure-hadoop,Name="Change compression codec",Args=["m","mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec"] Note 以前にデフォルトの EMR サービスロールと EC2 インスタンスプロファイルを作成して いない場合は、「aws emr create-default-roles」と入力してそれらを作成してか ら、create-cluster サブコマンドを入力します。 AWS CLI での Amazon EMR コマンドの使用方法の詳細については、「http:// docs.aws.amazon.com/cli/latest/reference/emr」を参照してください。 Hadoop 1.0.3 のデフォルト設定 このセクションでは、Hadoop 1.0.3 で起動される Hadoop クラスターを設定する際に Amazon EMR により使用されるデフォルト設定について説明します。Amazon EMR でサポートされる AMI のバー ジョンの詳細については「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 トピック • Hadoop 設定(Hadoop 1.0.3) (p. 594) • HDFS 設定(Hadoop 1.0.3) (p. 605) • タスクの設定(Hadoop 1.0.3) (p. 605) • 中間的な圧縮(Hadoop 1.0.3) (p. 609) Hadoop 設定(Hadoop 1.0.3) Amazon EMR AMI 2.3 で起動されるクラスター向けに Amazon EMR によって設定される以下のデ フォルト設定は、ほとんどの作業に適しています。 クラスタータスクがメモリを大量に使用する場合、コアノードごとに使うタスクの数を減らしてジョ ブトラッカーのヒープサイズを減らすと、パフォーマンスを向上させることができます。 以下の表に、Amazon EMR AMI バージョン 2.3 で起動されるクラスターにおける EC2 の各インスタ ンスタイプのデフォルトの設定を示します。Amazon EMR でサポートされる AMI のバージョンの詳 細については、Amazon マシンイメージ(AMI) (p. 56) を参照してください。 m1.small パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 576 HADOOP_NAMENODE_HEAPSIZE 192 HADOOP_TASKTRACKER_HEAPSIZE 192 HADOOP_DATANODE_HEAPSIZE 96 mapred.child.java.opts -Xmx288m 594 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum1 m1.medium パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 1152 HADOOP_NAMENODE_HEAPSIZE 384 HADOOP_TASKTRACKER_HEAPSIZE 192 HADOOP_DATANODE_HEAPSIZE 192 mapred.child.java.opts -Xmx576m mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum1 m1.large パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 2304 HADOOP_NAMENODE_HEAPSIZE 768 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx864m mapred.tasktracker.map.tasks.maximum 3 mapred.tasktracker.reduce.tasks.maximum1 m1.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6912 HADOOP_NAMENODE_HEAPSIZE 2304 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx768m mapred.tasktracker.map.tasks.maximum 8 mapred.tasktracker.reduce.tasks.maximum3 595 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) m2.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 9216 HADOOP_NAMENODE_HEAPSIZE 3072 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx2304m mapred.tasktracker.map.tasks.maximum 3 mapred.tasktracker.reduce.tasks.maximum1 m2.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 18432 HADOOP_NAMENODE_HEAPSIZE 6144 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx2688m mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 m2.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 36864 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx2304m mapred.tasktracker.map.tasks.maximum 14 mapred.tasktracker.reduce.tasks.maximum4 m3.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 3686 596 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 1740 HADOOP_TASKTRACKER_HEAPSIZE 686 HADOOP_DATANODE_HEAPSIZE 757 mapred.child.java.opts -Xmx1440m mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 m3.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6758 HADOOP_NAMENODE_HEAPSIZE 3276 HADOOP_TASKTRACKER_HEAPSIZE 839 HADOOP_DATANODE_HEAPSIZE 1064 mapred.child.java.opts -Xmx1440m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum4 c1.medium パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 576 HADOOP_NAMENODE_HEAPSIZE 192 HADOOP_TASKTRACKER_HEAPSIZE 192 HADOOP_DATANODE_HEAPSIZE 96 mapred.child.java.opts -Xmx288m mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum1 c1.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 2304 HADOOP_NAMENODE_HEAPSIZE 768 HADOOP_TASKTRACKER_HEAPSIZE 384 597 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx384m mapred.tasktracker.map.tasks.maximum 7 mapred.tasktracker.reduce.tasks.maximum2 c3.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 2124 HADOOP_NAMENODE_HEAPSIZE 972 HADOOP_TASKTRACKER_HEAPSIZE 588 HADOOP_DATANODE_HEAPSIZE 588 mapred.child.java.opts -Xmx1408m mapred.tasktracker.map.tasks.maximum 3 mapred.tasktracker.reduce.tasks.maximum1 c3.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 3686 HADOOP_NAMENODE_HEAPSIZE 1740 HADOOP_TASKTRACKER_HEAPSIZE 686 HADOOP_DATANODE_HEAPSIZE 757 mapred.child.java.opts -Xmx1440m mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 c3.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6758 HADOOP_NAMENODE_HEAPSIZE 3276 HADOOP_TASKTRACKER_HEAPSIZE 839 HADOOP_DATANODE_HEAPSIZE 1064 mapred.child.java.opts -Xmx1440m 598 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum4 c3.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 12902 HADOOP_NAMENODE_HEAPSIZE 6348 HADOOP_TASKTRACKER_HEAPSIZE 1146 HADOOP_DATANODE_HEAPSIZE 1679 mapred.child.java.opts -Xmx1664m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum8 cc2.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 30114 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx1536m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum6 cg1.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 7680 HADOOP_NAMENODE_HEAPSIZE 3840 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx864m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum3 599 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) cr1.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 50585 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_TASKTRACKER_HEAPSIZE 2048 HADOOP_DATANODE_HEAPSIZE 4096 mapred.child.java.opts -Xmx7552m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum8 hi1.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 30114 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx1536m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum6 hs1.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 30114 HADOOP_NAMENODE_HEAPSIZE 12288 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx1536m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum6 cg1.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 7680 600 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 3840 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx864m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum3 d2.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6860 HADOOP_NAMENODE_HEAPSIZE 3328 HADOOP_TASKTRACKER_HEAPSIZE 844 HADOOP_DATANODE_HEAPSIZE 1075 mapred.child.java.opts -Xmx2928m mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 d2.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 13107 HADOOP_NAMENODE_HEAPSIZE 6451 HADOOP_TASKTRACKER_HEAPSIZE 1157 HADOOP_DATANODE_HEAPSIZE 1699 mapred.child.java.opts -Xmx3392m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum4 d2.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 25600 HADOOP_NAMENODE_HEAPSIZE 12697 HADOOP_TASKTRACKER_HEAPSIZE 1781 601 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 HADOOP_DATANODE_HEAPSIZE 2949 mapred.child.java.opts -Xmx3648m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum8 d2.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 50585 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_TASKTRACKER_HEAPSIZE 2048 HADOOP_DATANODE_HEAPSIZE 4096 mapred.child.java.opts -Xmx3356m mapred.tasktracker.map.tasks.maximum 54 mapred.tasktracker.reduce.tasks.maximum18 g2.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6912 HADOOP_NAMENODE_HEAPSIZE 2304 HADOOP_TASKTRACKER_HEAPSIZE 384 HADOOP_DATANODE_HEAPSIZE 384 mapred.child.java.opts -Xmx768m mapred.tasktracker.map.tasks.maximum 8 mapred.tasktracker.reduce.tasks.maximum3 i2.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6860 HADOOP_NAMENODE_HEAPSIZE 3328 HADOOP_TASKTRACKER_HEAPSIZE 844 HADOOP_DATANODE_HEAPSIZE 1075 mapred.child.java.opts -Xmx2928m 602 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) パラメーター 値 mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 i2.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 13107 HADOOP_NAMENODE_HEAPSIZE 6451 HADOOP_TASKTRACKER_HEAPSIZE 1157 HADOOP_DATANODE_HEAPSIZE 1699 mapred.child.java.opts -Xmx3392m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum4 i2.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 25600 HADOOP_NAMENODE_HEAPSIZE 12697 HADOOP_TASKTRACKER_HEAPSIZE 1781 HADOOP_DATANODE_HEAPSIZE 2949 mapred.child.java.opts -Xmx3648m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum8 i2.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 50585 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_TASKTRACKER_HEAPSIZE 2048 HADOOP_DATANODE_HEAPSIZE 4096 mapred.child.java.opts -Xmx3776m mapred.tasktracker.map.tasks.maximum 48 mapred.tasktracker.reduce.tasks.maximum16 603 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 1.0.3) r3.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 6860 HADOOP_NAMENODE_HEAPSIZE 3328 HADOOP_TASKTRACKER_HEAPSIZE 844 HADOOP_DATANODE_HEAPSIZE 1075 mapred.child.java.opts -Xmx2928m mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 r3.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 13107 HADOOP_NAMENODE_HEAPSIZE 6451 HADOOP_TASKTRACKER_HEAPSIZE 1157 HADOOP_DATANODE_HEAPSIZE 1699 mapred.child.java.opts -Xmx3392m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum4 r3.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 25600 HADOOP_NAMENODE_HEAPSIZE 12697 HADOOP_TASKTRACKER_HEAPSIZE 1781 HADOOP_DATANODE_HEAPSIZE 2949 mapred.child.java.opts -Xmx7296m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum4 r3.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 50585 604 Amazon EMR 開発者ガイド HDFS 設定(Hadoop 1.0.3) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 25190 HADOOP_TASKTRACKER_HEAPSIZE 2048 HADOOP_DATANODE_HEAPSIZE 4096 mapred.child.java.opts -Xmx7552m mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum8 HDFS 設定(Hadoop 1.0.3) 次の表に、Hadoop Distributed File System(HDFS)のデフォルトのパラメーターとその設定を示し ます。 パラメーター 定義 デフォルト値 dfs.block.size HDFS ブロックのサイズ。HDFS に格納されているデータを 操作するとき、分割サイズは原則として HDFS ブロックのサ イズです。値を大きくするとタスクの粒度は小さくなります が、クラスターへの負荷も低下します。NameNode 134217728(128 MB) dfs.replication 持続性を高めるために、各ブロックのコピーをいくつ作成す るかを決定します。小さなクラスターではこれを 2 個に設 定しています。データが失われた場合にクラスターが小さ いと再起動が容易なためです。この設定は、必要に応じて 1、2、または 3 個に変更できます。Amazon EMR では、ク ラスターのサイズに基づいて自動的にレプリケーション係数 を計算します。デフォルト値を上書きするには、configurehadoop ブートストラップアクションを使用します。 クラスター < 4 ノー ドの場合、1 個 クラスター < 10 ノードの場合、2 個 それ以外のすべて のクラスターの場 合、3 個 タスクの設定(Hadoop 1.0.3) トピック • マシンごとのタスク数 (p. 605) • ジョブごとのタスク数(AMI 2.3) (p. 607) • タスク JVM の設定(AMI 2.3) (p. 607) • クラスターのシャットダウンの回避(AMI 2.3) (p. 608) MapReduce ジョブのパフォーマンスを調整するための設定変数がいくつかあります。このセクショ ンでは、タスク関連のいくつかの重要な設定について説明します。 マシンごとのタスク数 マッパーとリデューサーにそれぞれ対応する 2 つの設定オプションにより、ノードごとに実行される タスクの数が決定されます。具体的には次の 2 つです。 • mapred.tasktracker.map.tasks.maximum • mapred.tasktracker.reduce.tasks.maximum 605 Amazon EMR 開発者ガイド タスクの設定(Hadoop 1.0.3) Amazon EMR には、全面的に EC2 のインスタンスタイプによって決まるデフォルトが用意されてい ます。次の表に、AMI 2.4.6 以降で起動されるクラスターのデフォルト設定を示します。 EC2 インスタンス名 マッパー リデューサー m1.small 2 1 m1.medium 2 1 m1.large 3 1 m1.xlarge 8 3 m2.xlarge 3 1 m2.2xlarge 6 2 m2.4xlarge 14 4 m3.xlarge 6 2 m3.2xlarge 12 4 c1.medium 2 1 c1.xlarge 7 2 c3.xlarge 3 1 c3.2xlarge 6 2 c3.4xlarge 12 4 c3.8xlarge 24 8 cc2.8xlarge 24 6 d2.xlarge 6 2 d2.2xlarge 12 4 d2.4xlarge 24 8 d2.8xlarge 54 18 hi1.4xlarge 24 6 hs1.8xlarge 24 6 cg1.4xlarge 12 3 g2.2xlarge 8 3 i2.xlarge 6 2 i2.2xlarge 12 4 i2.4xlarge 24 8 i2.8xlarge 48 16 r3.xlarge 6 2 r3.2xlarge 12 4 606 Amazon EMR 開発者ガイド タスクの設定(Hadoop 1.0.3) EC2 インスタンス名 マッパー リデューサー r3.4xlarge 12 4 r3.8xlarge 24 8 Note デフォルトのマッパーの数は、各 EC2 インスタンスタイプで使用可能なメモリに基づきま す。マッパーのデフォルトの数を増やす場合は、各タスクに割り振られるメモリ量を減らす ようにタスクの JVM 設定を変更する必要があります。JVM 設定を適切に変更しないと、out of memory エラーが発生する可能性があります。 ジョブごとのタスク数(AMI 2.3) クラスターを実行すると、Hadoop によって多数のマップおよびリデュースタスクが作成されます。 これらによって、クラスター内で同時に実行可能なタスクの数が決まります。実行するタスクの数が 少なすぎるとアイドル状態で待機するノードができ、多すぎるとフレームワークのオーバーヘッドが 大きくなります。 Amazon EMR は、入力データのファイル数に基づいてマップタスクの数を決定します。リデューサー の設定はお客様が設定します。リデューサー設定を調整する設定は、4 つあります。 リデューサー設定のためのパラメーターを次の表で説明します。 パラメーター 説明 mapred.map.tasks 実行するマップタスクの数の目標。実際に作成されるタスクの数は、こ の数値と異なることがあります。 mapred.map.tasksperslot クラスター内のマップスロットの数に対する比率で表される、実行する マップタスクの数の目標。mapred.map.tasks が設定されていない場合 に使用されます。 mapred.reduce.tasks 実行するリデュースタスクの数の目標。 mapred.reduce.tasksperslotクラスター内のリデューススロットの数に対する比率で表される、実行 するリデュースタスクの数。 2 つの tasksperslot パラメーターは、Amazon EMR に固有です。これらは、mapred.*.tasks が定 義されていない場合にのみ有効になります。優先順位は次のとおりです。 1. mapred.map.tasksHadoop ジョブによって設定される 2. mapred.map.tasksマスターノードの mapred-conf.xml で設定される 3. mapred.map.tasksperslotそのどちらも定義されていない場合は タスク JVM の設定(AMI 2.3) タスクのためのヒープスペースの大きさや他の JVM オプションを mapred.child.java.opts で設 定できます。Amazon EMR はデフォルトの -Xmx 値をこの場所に提供します。インスタンスタイプご とのデフォルトを次の表に示します。 607 Amazon EMR 開発者ガイド タスクの設定(Hadoop 1.0.3) Amazon EC2 インス タンス名 デフォルトの JVM 値 m1.small -Xmx288m m1.medium -Xmx576m m1.large -Xmx864m m1.xlarge -Xmx768m c1.medium -Xmx288m c1.xlarge -Xmx384m m2.xlarge -Xmx2304m m2.2xlarge -Xmx2688m m2.4xlarge -Xmx2304m cc2.8xlarge -Xmx1536m hi1.4xlarge -Xmx2048m hs1.8xlarge -Xmx1536m cg1.4xlarge -Xmx864m JVM は、タスクごとに新しく起動できます。これにより、タスクの独立性を高めることも、タスク間 で JVM を共有してフレームワークのオーバーヘッドを低下させることもできます。多くの小さいファ イルを処理する場合は、JVM を何回も再利用して起動のコストを分散させることに意味があります。 しかし、各タスクが長時間かかる場合や大量のデータを処理する場合は、後続のタスクのためにすべ てのメモリが確実に解放されるように、JVM を再利用しないことが考えられます。 JVM の再利用設定を設定するには、mapred.job.reuse.jvm.num.tasks オプションを使用しま す。 Note Amazon EMR は mapred.job.reuse.jvm.num.tasks の値を 20 に設定しますが、これは ブートスラップアクションによってオーバーライドすることができます。値を -1 にすると 1 つのジョブ内でいつまでも再利用が行われ、1 にするとタスクは再利用されません。 クラスターのシャットダウンの回避(AMI 2.3) 分散環境では、散発的な遅延、処理速度の遅いハードウェア、欠陥のあるハードウェアなどの問題 が発生し、それらが蓄積してクラスターの速度が低下します。これは、落伍者問題と呼ばれていま す。Hadoop は、この問題の軽減に役立つ投機的実行という機能を備えています。クラスターの進捗 に伴い、一部のマシンでタスクが完了します。Hadoop は、空いたノードにタスクをスケジュールし ます。早く終了した方のタスクが採用され、もう片方は破棄されます。この機能により、ジョブの 実行時間が大幅に削減されます。MapReduce アルゴリズムの一般的な設計では、マップタスクの進 行はべき等になるものとされています。しかし、タスクの実行に副作用がある場合(例えば、外部リ ソースを呼び出すゼロリデューサージョブ)は、投機的実行を無効にする必要があります。 投機的実行は、マッパーとリデューサーそれぞれ別個に有効にすることができます。AMI 2.3 のデ フォルトでは、Amazon EMR によってマッパーまたはリデューサーで有効にされています。この設定 は、ブートストラップアクションでオーバーライドできます。ブートストラップアクションの使用の 608 Amazon EMR 開発者ガイド 中間的な圧縮(Hadoop 1.0.3) 詳細については、「(オプション)追加のソフトウェアをインストールするためのブートストラップ アクションの作成 (p. 121)」を参照してください。 投機的実行のパラメーター パラメーター デフォル ト設定 mapred.map.tasks.speculative.execution true mapred.reduce.tasks.speculative.execution true 中間的な圧縮(Hadoop 1.0.3) Hadoop は、シャッフルプロセスの際にマッパーとリデューサーの間でデータを送信します。この ネットワーク操作は、多くのクラスターでボトルネックになります。このボトルネックを軽減するた めに、Amazon EMR ではデフォルトで中間的なデータ圧縮が有効にされています。わずかな CPU 負 荷でかなりの量が圧縮されるため、Snappy コーデックを採用しています。 このデフォルトの圧縮設定は、ブートストラップアクションで変更できます。ブートストラップア クションの使用の詳細については、「(オプション)追加のソフトウェアをインストールするための ブートストラップアクションの作成 (p. 121)」を参照してください。 次の表に、中間圧縮に影響するパラメーターのデフォルト値を示します。 パラメーター 値 mapred.compress.map.output true mapred.map.output.compression.codec org.apache.hadoop.io.compress.SnappyCodec Hadoop 20.205 のデフォルト設定 (廃止) トピック • Hadoop 設定(Hadoop 20.205) (p. 609) • HDFS 設定(Hadoop 20.205) (p. 613) • タスクの設定(Hadoop 20.205) (p. 613) • 中間的な圧縮(Hadoop 20.205) (p. 616) このセクションでは、Hadoop 20.205 で起動される Hadoop クラスターを設定する際に Amazon EMR により使用されるデフォルト設定について説明します。Amazon EMR でサポートされる AMI のバー ジョンの詳細については「Amazon マシンイメージ(AMI) (p. 56)」を参照してください。 Hadoop 設定(Hadoop 20.205) Amazon EMR AMI 2.0 または 2.1 で起動されるクラスター向けに Amazon EMR によって設定される 以下のデフォルト設定は、ほとんどの作業に適しています。 クラスタータスクがメモリを大量に使用する場合、コアノードごとに使うタスクの数を減らしてジョ ブトラッカーのヒープサイズを減らすと、パフォーマンスを向上させることができます。 以下の表に、Amazon EMR AMI バージョン 2.0 または 2.1 で起動されるクラスターにおける EC2 の 各インスタンスタイプのデフォルトの設定を示します。Amazon EMR でサポートされる AMI のバー ジョンの詳細については、Amazon マシンイメージ(AMI) (p. 56) を参照してください。 609 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 20.205) m1.small パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 768 HADOOP_NAMENODE_HEAPSIZE 256 HADOOP_TASKTRACKER_HEAPSIZE 256 HADOOP_DATANODE_HEAPSIZE 128 mapred.child.java.opts -Xmx384m mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum1 m1.medium パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 1536 HADOOP_NAMENODE_HEAPSIZE 512 HADOOP_TASKTRACKER_HEAPSIZE 256 HADOOP_DATANODE_HEAPSIZE 256 mapred.child.java.opts -Xmx768m mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum1 m1.large パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 3072 HADOOP_NAMENODE_HEAPSIZE 1024 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx1152m mapred.tasktracker.map.tasks.maximum 3 mapred.tasktracker.reduce.tasks.maximum1 m1.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 9216 610 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 20.205) パラメーター 値 HADOOP_NAMENODE_HEAPSIZE 3072 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx1024m mapred.tasktracker.map.tasks.maximum 8 mapred.tasktracker.reduce.tasks.maximum3 c1.medium パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 768 HADOOP_NAMENODE_HEAPSIZE 256 HADOOP_TASKTRACKER_HEAPSIZE 256 HADOOP_DATANODE_HEAPSIZE 128 mapred.child.java.opts -Xmx384m mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum1 c1.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 3072 HADOOP_NAMENODE_HEAPSIZE 1024 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx512m mapred.tasktracker.map.tasks.maximum 7 mapred.tasktracker.reduce.tasks.maximum2 m2.xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 12288 HADOOP_NAMENODE_HEAPSIZE 4096 HADOOP_TASKTRACKER_HEAPSIZE 512 611 Amazon EMR 開発者ガイド Hadoop 設定(Hadoop 20.205) パラメーター 値 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx3072m mapred.tasktracker.map.tasks.maximum 3 mapred.tasktracker.reduce.tasks.maximum1 m2.2xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 24576 HADOOP_NAMENODE_HEAPSIZE 8192 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx3584m mapred.tasktracker.map.tasks.maximum 6 mapred.tasktracker.reduce.tasks.maximum2 m2.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 49152 HADOOP_NAMENODE_HEAPSIZE 16384 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx3072m mapred.tasktracker.map.tasks.maximum 14 mapred.tasktracker.reduce.tasks.maximum4 cc2.8xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 40152 HADOOP_NAMENODE_HEAPSIZE 16384 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx2048m 612 Amazon EMR 開発者ガイド HDFS 設定(Hadoop 20.205) パラメーター 値 mapred.tasktracker.map.tasks.maximum 24 mapred.tasktracker.reduce.tasks.maximum6 cg1.4xlarge パラメーター 値 HADOOP_JOBTRACKER_HEAPSIZE 10240 HADOOP_NAMENODE_HEAPSIZE 5120 HADOOP_TASKTRACKER_HEAPSIZE 512 HADOOP_DATANODE_HEAPSIZE 512 mapred.child.java.opts -Xmx1152m mapred.tasktracker.map.tasks.maximum 12 mapred.tasktracker.reduce.tasks.maximum3 HDFS 設定(Hadoop 20.205) 次の表に、Hadoop Distributed File System(HDFS)のデフォルトのパラメーターとその設定を示し ます。 パラメーター 定義 デフォルト値 dfs.block.size HDFS ブロックのサイズ。HDFS に格納されているデータを 操作するとき、分割サイズは原則として HDFS ブロックのサ イズです。値を大きくするとタスクの粒度は小さくなります が、クラスターへの負荷も低下します。NameNode 134217728(128 MB) dfs.replication 持続性を高めるために、各ブロックのコピーをいくつ作成す るかを決定します。小さなクラスターではこれを 2 個に設 定しています。データが失われた場合にクラスターが小さ いと再起動が容易なためです。この設定は、必要に応じて 1、2、または 3 個に変更できます。Amazon EMR では、ク ラスターのサイズに基づいて自動的にレプリケーション係数 を計算します。デフォルト値を上書きするには、configurehadoop ブートストラップアクションを使用します。 クラスター < 4 ノー ドの場合、1 個 クラスター < 10 ノードの場合、2 個 それ以外のすべて のクラスターの場 合、3 個 タスクの設定(Hadoop 20.205) トピック • マシンごとのタスク数 (p. 614) • ジョブごとのタスク数(AMI 2.0 および 2.1) (p. 614) • タスク JVM 設定(AMI 2.0 および 2.1) (p. 615) • クラスターのシャットダウンの回避(AMI 2.0 および 2.1) (p. 616) 613 Amazon EMR 開発者ガイド タスクの設定(Hadoop 20.205) MapReduce ジョブのパフォーマンスを調整するための設定変数がいくつかあります。このセクショ ンでは、タスク関連のいくつかの重要な設定について説明します。 マシンごとのタスク数 マッパーとリデューサーにそれぞれ対応する 2 つの設定オプションにより、ノードごとに実行される タスクの数が決定されます。具体的には次の 2 つです。 • mapred.tasktracker.map.tasks.maximum • mapred.tasktracker.reduce.tasks.maximum Amazon EMR には、全面的に EC2 のインスタンスタイプによって決まるデフォルトが用意されてい ます。次の表に、AMI 2.0 または 2.1 で起動されるクラスターのデフォルト設定を示します。 Amazon EC2 インスタンス名 マッパー リデューサー m1.small 2 1 m1.medium 2 1 m1.large 3 1 m1.xlarge 8 3 c1.medium 2 1 c1.xlarge 7 2 m2.xlarge 3 1 m2.2xlarge 6 2 m2.4xlarge 14 4 cc2.8xlarge 24 6 cg1.4xlarge 12 3 Note デフォルトのマッパーの数は、各 EC2 インスタンスタイプで使用可能なメモリに基づきま す。マッパーのデフォルトの数を増やす場合は、各タスクに割り振られるメモリ量を減らす ようにタスクの JVM 設定を変更する必要があります。JVM 設定を適切に変更しないと、out of memory エラーが発生する可能性があります。 ジョブごとのタスク数(AMI 2.0 および 2.1) クラスターを実行すると、Hadoop によって多数のマップおよびリデュースタスクが作成されます。 これらによって、クラスター内で同時に実行可能なタスクの数が決まります。実行するタスクの数が 少なすぎるとアイドル状態で待機するノードができ、多すぎるとフレームワークのオーバーヘッドが 大きくなります。 Amazon EMR は、入力データのファイル数に基づいてマップタスクの数を決定します。リデューサー の設定はお客様が設定します。リデューサー設定を調整する設定は、4 つあります。 リデューサー設定のためのパラメーターを次の表で説明します。 614 Amazon EMR 開発者ガイド タスクの設定(Hadoop 20.205) パラメーター 説明 mapred.map.tasks 実行するマップタスクの数の目標。実際に作成されるタスクの数は、こ の数値と異なることがあります。 mapred.map.tasksperslot クラスター内のマップスロットの数に対する比率で表される、実行する マップタスクの数の目標。mapred.map.tasks が設定されていない場合 に使用されます。 mapred.reduce.tasks 実行するリデュースタスクの数の目標。 mapred.reduce.tasksperslotクラスター内のリデューススロットの数に対する比率で表される、実行 するリデュースタスクの数。 2 つの tasksperslot パラメーターは、Amazon EMR に固有です。これらは、mapred.*.tasks が定 義されていない場合にのみ有効になります。優先順位は次のとおりです。 1. mapred.map.tasksHadoop ジョブによって設定される 2. mapred.map.tasksマスターノードの mapred-conf.xml で設定される 3. mapred.map.tasksperslot上記のいずれも定義されない場合 タスク JVM 設定(AMI 2.0 および 2.1) タスクのためのヒープスペースの大きさや他の JVM オプションを mapred.child.java.opts で設 定できます。Amazon EMR はデフォルトの -Xmx 値をこの場所に提供します。インスタンスタイプご とのデフォルトを次の表に示します。 Amazon EC2 インス タンス名 デフォルトの JVM 値 m1.small -Xmx384m m1.medium -Xmx768m m1.large -Xmx1152m m1.xlarge -Xmx1024m c1.medium -Xmx384m c1.xlarge -Xmx512m m2.xlarge -Xmx3072m m2.2xlarge -Xmx3584m m2.4xlarge -Xmx3072m cc2.8xlarge -Xmx2048m cg1.4xlarge -Xmx1152m JVM は、タスクごとに新しく起動できます。これにより、タスクの独立性を高めることも、タスク間 で JVM を共有してフレームワークのオーバーヘッドを低下させることもできます。多くの小さいファ イルを処理する場合は、JVM を何回も再利用して起動のコストを分散させることに意味があります。 しかし、各タスクが長時間かかる場合や大量のデータを処理する場合は、後続のタスクのためにすべ てのメモリが確実に解放されるように、JVM を再利用しないことが考えられます。 615 Amazon EMR 開発者ガイド 中間的な圧縮(Hadoop 20.205) JVM の再利用設定を設定するには、mapred.job.reuse.jvm.num.tasks オプションを使用しま す。 Note Amazon EMR は mapred.job.reuse.jvm.num.tasks の値を 20 に設定しますが、これは ブートスラップアクションによってオーバーライドすることができます。値を -1 にすると 1 つのジョブ内でいつまでも再利用が行われ、1 にするとタスクは再利用されません。 クラスターのシャットダウンの回避(AMI 2.0 および 2.1) 分散環境では、散発的な遅延、処理速度の遅いハードウェア、欠陥のあるハードウェアなどの問題 が発生し、それらが蓄積してクラスターの速度が低下します。これは、落伍者問題と呼ばれていま す。Hadoop は、この問題の軽減に役立つ投機的実行という機能を備えています。クラスターの進捗 に伴い、一部のマシンでタスクが完了します。Hadoop は、空いたノードにタスクをスケジュールし ます。早く終了した方のタスクが採用され、もう片方は破棄されます。この機能により、ジョブの 実行時間が大幅に削減されます。MapReduce アルゴリズムの一般的な設計では、マップタスクの進 行はべき等になるものとされています。しかし、タスクの実行に副作用がある場合(例えば、外部リ ソースを呼び出すゼロリデューサージョブ)は、投機的実行を無効にする必要があります。 投機的実行は、マッパーとリデューサーそれぞれ別個に有効にすることができます。AMI 2.0 または 2.1 のデフォルトでは、Amazon EMR によってマッパーまたはリデューサーで有効にされています。 この設定は、ブートストラップアクションでオーバーライドできます。ブートストラップアクション の使用の詳細については、「(オプション)追加のソフトウェアをインストールするためのブートス トラップアクションの作成 (p. 121)」を参照してください。 投機的実行のパラメーター パラメーター デフォル ト設定 mapred.map.tasks.speculative.execution true mapred.reduce.tasks.speculative.execution true 中間的な圧縮(Hadoop 20.205) Hadoop は、シャッフルプロセスの際にマッパーとリデューサーの間でデータを送信します。この ネットワーク操作は、多くのクラスターでボトルネックになります。このボトルネックを軽減するた めに、Amazon EMR ではデフォルトで中間的なデータ圧縮が有効にされています。わずかな CPU 負 荷でかなりの量が圧縮されるため、Snappy コーデックを採用しています。 このデフォルトの圧縮設定は、ブートストラップアクションで変更できます。ブートストラップア クションの使用の詳細については、「(オプション)追加のソフトウェアをインストールするための ブートストラップアクションの作成 (p. 121)」を参照してください。 次の表に、中間圧縮に影響するパラメーターのデフォルト値を示します。 パラメーター 値 mapred.compress.map.output true mapred.map.output.compression.codec org.apache.hadoop.io.compress.SnappyCodec 616 Amazon EMR 開発者ガイド AWS CLI での Amazon EMR 用パラメーター値の指定 Amazon EMR のコマンドラインイ ンターフェイスリファレンス Amazon EMR コマンドラインインターフェイス(CLI)とは、コマンドラインからクラスターを起動 して管理できるようにするツールです。 Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 AWS Command Line Interface バージョン 1.4 では、Amazon EMR がサポートされます。Amazon EMR CLI を使用する代わりに、AWS CLI をダウンロードしてインストールすることをお勧めしま す。詳細については、「http://aws.amazon.com/cli/」を参照してください。 トピック • AWS CLI での Amazon EMR 用パラメーター値の指定 (p. 617) • Amazon EMR コマンドラインインターフェイスのインストール (廃止) (p. 619) • コマンドラインインターフェイスの呼び出し方法 (廃止) (p. 624) • AWS EMR コマンドラインインターフェイスのオプション(廃止) (p. 625) • AWS EMR コマンドラインインターフェイスのリリース(廃止) (p. 680) AWS CLI での Amazon EMR 用パラメーター値の 指定 Amazon EMR サブコマンドの create-cluster、ssh、get、put、socks に渡すパラメーターの値を指 定することができます。パラメーターの値を設定するには、aws configure を使うか、~/.aws/ config または C:\Users\USERNAME\.aws\config ファイルで値を設定します。次の表に、サブコマンド と設定できるパラメーターを示します。 617 Amazon EMR 開発者ガイド コマンドラインを使ったパラメーターの設定 create-cluster パラメーター 説明 instance_profile クラスターの Amazon EC2 インスタンスでアプ リケーションを実行するときに Amazon EMR が 使用するインスタンスプロファイル。 service_role Amazon EMR サービスで使用するサービスロー ル。 log_uri Amazon EMR がクラスターログを置く Amazon S3 URI。 key_name EMR クラスターにアクセスするときに使用する EC2 キーペア名。 enable_debugging クラスターの作成時にデバッグ機能を有効にす るかを示すブール値。 ssh、get、put、socks パラメーター 説明 key_pair_file EMR クラスターに接続するときに使用するプラ イベートキーペアファイルのパス。 コマンドラインを使ったパラメーターの設定 パラメーターを設定するときは、コマンド aws configure set emr.parameter_name value を使用できます。たとえば、key_name の値を myKeyName に設定するには、次のコマンドを使用し ます。 % aws configure set emr.key_name myKeyName コマンドラインを使ったパラメーター値の表示 aws configure get emr.parameter_name value を使って、所定のパラメーターの値を表示す ることもできます。たとえば、設定したばかりの key_name の値を取得するには、次のコマンドを使 用すると、myKeyName が表示されます。 % aws configure get emr.key_name myKeyName 設定ファイルを使ったパラメーターの設定 設定ファイルを使用してパラメーターを設定するには、AWS CLI 設定ファイルでサービス、および キー値の割り当てを指定します。設定ファイルは、Linux、Unix、OS X システムの場合は ~/.aws/ config、Windows システムの場合は C:\Users\USERNAME\.aws\config にあります。サンプル設定ファ イルを次に示します。 [default] 618 Amazon EMR 開発者ガイド Amazon EMR コマンドラインイン ターフェイスのインストール (廃止) region = us-east-1 emr = service_role = EMR_DefaultRole instance_profile = EMR_EC2_DefaultRole log_uri = s3://myBucket/logs enable_debugging = True key_name = myKeyName key_pair_file = /home/myUser/myKeyName.pem Note aws emr create-default-roles を使って Amazon EMR 用のロールを作成する場合、 ロールは設定ファイルに自動的に登録されます。 Amazon EMR コマンドラインインターフェイス のインストール (廃止) Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 AWS Command Line Interface バージョン 1.4 では、Amazon EMR がサポートされます。Amazon EMR CLI を使用する代わりに、AWS CLI をダウンロードしてインストールすることをお勧めしま す。詳細については、「http://aws.amazon.com/cli/」を参照してください。 Amazon EMR コマンドラインインターフェイスをインストールするには、次のタスクを実行します。 トピック • Ruby のインストール (p. 619) • RubyGems パッケージ管理フレームワークの確認 (p. 620) • Amazon EMR コマンドラインインターフェイスのインストール (p. 620) • 認証情報の設定 (p. 621) • SSH 認証情報 (p. 623) Ruby のインストール Amazon EMR CLI は、バージョン 1.8.7、1.9.3、および 2.0 で動作します。マシンに Ruby がインス トールされていない場合は、これらのバージョンのいずれかをダウンロードして CLI を使用します。 Ruby をインストールするには 1. Ruby をダウンロードしてインストールします。 • Linux および UNIX ユーザーは、Ruby 1.8.7 を http://www.ruby-lang.org/en/news/2010/06/ 23/ruby-1-8-7-p299-released/ からダウンロードし、Ruby 1.9.3 を https://www.ruby-lang.org/ en/news/2014/02/24/ruby-1-9-3-p545-is-released/ からダウンロードし、Ruby 2.0 を https:// www.ruby-lang.org/en/news/2014/02/24/ruby-2-0-0-p451-is-released/ からダウンロードできま す。 • Windows ユーザーは、Ruby の各バージョンを http://rubyinstaller.org/downloads/ からインス トールできます。インストールの過程で、Ruby 実行可能ファイルを PATH 環境変数に追加 し、.rb ファイルをこの Ruby インストールに関連付けるチェックボックスをオンにします。 619 Amazon EMR 開発者ガイド RubyGems パッケージ管理フレームワークの確認 • Mac OS X にはあらかじめ Ruby がインストールされています。以下の手順でバージョンを確 認することができます。 2. コマンドプロンプトに以下をタイプして、Ruby が実行中であることを確認してください。 ruby -v Ruby のバージョンが表示され、Ruby がインストール済みであることが確認できます。出力は次 の例のようになります: ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0] RubyGems パッケージ管理フレームワークの確認 Amazon EMR CLI では RubyGems バージョン 1.8 以降が必要です。 RubyGems のインストールとバージョンを確認するには • RubyGems がインストールされているかどうか確認するには、ターミナルウィンドウから次のコ マンドを実行します。RubyGems がインストールされている場合、このコマンドはそのバージョ ン情報を表示します。 gem -v RubyGems をインストールしていない場合は、Amazon EMR CLI をインストールする前 に、RubyGems をダウンロードしてインストールする必要があります。 Linux/Unix/Mac OS に RubyGems をインストールするには 1. RubyGems バージョン 1.8 以降を RubyGems.org からダウンロードし、展開します。 2. 次のコマンドを使用して RubyGems をインストールします。 sudo ruby setup.rb Amazon EMR コマンドラインインターフェイスの インストール Amazon EMR CLI のダウンロード方法 1. Amazon EMR CLI をインストールするためのディレクトリを新しく作成します。コマンドライン プロンプトから、以下のとおり入力します: mkdir elastic-mapreduce-cli 2. Amazon EMR のファイルをダウンロードします。 a. https://aws.amazon.com/developertools/2264 に移動します。 b. [Download] をクリックします。 c. 作成しておいたディレクトリにファイルを保存します。 620 Amazon EMR 開発者ガイド 認証情報の設定 Amazon EMR CLI のインストール方法 1. elastic-mapreduce-cli ディレクトリに移動します。 2. 圧縮ファイルを解凍します: • Linux、Unix、Mac OS X のユーザーは、コマンドラインプロンプトから、以下のとおり入力し ます: unzip elastic-mapreduce-ruby.zip • Windows ユーザーは、エクスプローラから elastic-mapreduce-ruby.zip ファイルを開 き、[ファイルをすべて展開] を選択します。 認証情報の設定 Amazon EMR 認証情報ファイルは、多くのコマンドに必要な情報を提供します。このファイルに各 種コマンドパラメーターを保存しておけば、クラスターを作成するたびにコマンドラインでパラメー ターを入力し直す手間が省けます。 認証情報は、ユーザーが行うすべてのリクエストに対して署名値を計算するために使い ます。Amazon EMR はファイル credentials.json 内から認証情報を自動的に探しま す。credentials.jsonファイルを編集して AWS 証明書に含めることができるので便利です。AWS キーのペアは、パスワードに似たセキュリティ証明書です。これはお客様が、実行時のインスタンス に安全に接続するために使用するものです。新しいキーペアを作成して、本ガイドと共に使用するこ とを推奨します。 認証情報ファイルを作成するには 1. 2. Amazon EMR CLI を解凍したディレクトリ内に credentials.json という名前のファイルを作 成します。 以下の行を、認証情報ファイルに追加します。 { "access_id": "Your AWS Access Key ID", "private_key": "Your AWS Secret Access Key", "key-pair": "Your key pair name", "key-pair-file": "The path and name of your PEM file", "log_uri": "A path to a bucket you own on Amazon S3, such as, s3n://myloguri/", "region": "The region of your cluster, either us-east-1, us-west-2, uswest-1, eu-west-1, eu-central-1, ap-northeast-1, ap-southeast-1, apsoutheast-2, or sa-east-1" } リージョン名をメモします。このリージョンは、Amazon EC2 のキーペアと Amazon S3 バケッ トを作成するときに使用します。Amazon EMR でサポートされるリージョンの詳細について は、アマゾン ウェブ サービス全般のリファレンスの「リージョンとエンドポイント」を参照して ください。 次のセクションでは、認証情報の作成および検索方法について説明します。 AWS セキュリティの認証情報 AWS では、セキュリティ認証情報を使用してデータを保護します。本セクションでは、セキュリティ 認証情報の閲覧方法を提示し、それらを credentials.json ファイルに追加できるようにします。 621 Amazon EMR 開発者ガイド 認証情報の設定 For CLI access, you need an access key ID and secret access key. Use IAM user access keys instead of AWS root account access keys. IAM lets you securely control access to AWS services and resources in your AWS account. For more information about creating access keys, see How Do I Get Security Credentials? in the AWS General Reference. access_id パラメーターをアクセスキー ID の値に設定し、private_key パラメーターをシーク レットアクセスキーの値に設定します。 Amazon EC2 キーペアを作成するには 1. AWS マネジメントコンソールにサインインをしたあと、https://console.aws.amazon.com/ec2/ に ある Amazon EC2 コンソールを開きます。 2. [EC2 Dashboard] で、credentials.json ファイルで使用されている [Region] を選択してから、[Key Pair] をクリックします。 3. [Key Pairs] ページで、[Create Key Pair] をクリックします。 4. キーペア名を入力します(例: mykeypair)。 5. 6. [Create] をクリックします。 作成された PEM ファイルを、安全な場所に保存します。 credentials.json ファイルの中の key-pair パラメーターを Amazon EC2 キーペア名に変更 し、key-pair-file パラメーターを PEM ファイルの場所と名前に変更してください。この PEM ファイルは、CLI でクラスターを起動したときに作成される EC2 インスタンスに対する Amazon EC2 キーペアのデフォルトとなります。 Amazon S3 バケット log-uri パラメーターでは、Amazon S3 内のどのロケーションにクラスターでの Amazon EMR の 結果とログファイルを出力するかを指定します。log-uri パラメーターの値は、この目的で作成した Amazon S3 バケットです。 Amazon S3 バケットを作成するには 1. 2. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 [Create Bucket] をクリックします。 3. [Create a Bucket] ダイアログボックスにバケット名(例えば mylog-uri)を入力します。 この名前は、グローバルに一意である必要があります。また、他のバケットで使用されている名 前を使用することはできません。有効なバケット名の詳細については、Amazon Simple Storage Service 開発者ガイドの「バケットの制約」を参照してください。 4. [Region] では、バケットのリージョンを選択します。 Amazon EMR リージョン Amazon S3 リージョン 米国東部(バージニア北部) US Standard 米国西部 (オレゴン) Oregon 米国西部 (北カリフォルニア) Northern California 欧州 (アイルランド) Ireland 欧州 (フランクフルト) フランクフルト アジアパシフィック (東京) 日本 アジアパシフィック (シンガポール) シンガポール 622 Amazon EMR 開発者ガイド SSH 認証情報 Amazon EMR リージョン Amazon S3 リージョン アジアパシフィック (シドニー) シドニー 南米 (サンパウロ) Sao Paulo AWS GovCloud (US) GovCloud Note AWS GovCloud (US) リージョンを使用する場合は、お客様の AWS ビジネス担当者にお 問い合わせください。AWS ウェブサイトに AWS GovCloud (US) アカウントを作成する ことはできません。直接 AWS に問い合わせて、AWS GovCloud (US) エンタープライズ 契約を結ぶ必要があります。詳細については、AWS GovCloud (US) 製品ページを参照し てください。 5. [Create] をクリックします。 Note [Create a Bucket] ウィザードでロギングを有効にした場合、有効になるのはバケットア クセスログのみです。Amazon EMR クラスターログは有効にはなりません。 URI s3://mylog-uri/ でバケットを作成しました。 バケットを作成後、それに対する適切な権限を設定してください。一般的に、お客様自身(オー ナー)に読み書きのアクセス、認証されたユーザーに対しては読み込みアクセスを付与します。 Amazon S3 バケットに対する権限を設定するには 1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール(https:// console.aws.amazon.com/s3/)を開きます。 2. [Buckets] ペインで、作成したバケットを右クリックします。 3. [Properties] を選択します。 4. [Properties] ペインで、[Permissions] タブを選択します。 5. [Add more permissions] をクリックします。 6. [Grantee] フィールドで、[Authenticated Users] を選択します。 7. [Grantee] フィールドの右側で、[List] を選択します。 8. [Save] をクリックします。 これで、バケットを作成し、それに権限を割り当てることができました。log-uri パラメーターをこ のバケットの URI に設定します。これは、Amazon EMR のログと結果がアップロードされる場所で す。 SSH 認証情報 SSH または PuTTY で使用する SSH 認証情報を設定します。このステップは必須です。 SSH 認証情報を設定するには • SSH を使用するようにコンピューターを設定します。 • Linux、UNIX、および Mac OS X ユーザーは、Amazon EC2 キーペアの PEM ファイルに対し てアクセス許可を設定します。例えば、ファイルを mykeypair.pem として保存した場合、コ マンドは次のようになります。 623 Amazon EMR 開発者ガイド コマンドラインインターフェイスの呼び出し方法 (廃止) chmod og-rwx mykeypair.pem • Windows ユーザー a. Windows ユーザーは PuTTY を使ってマスターノードに接続します。 PuTTYgen.exe を http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html からコンピュータにダウ ンロードします。 b. PuTTYgen を起動します。 c. [Load] をクリックします。先に作成した PEM ファイルを選択します。 d. [Open] をクリックします。 e. キーのインポートが適切に行われたことを示す PuTTYgen 通知で [OK] をクリックします。 f. [Save private key] をクリックして、キーを PPK フォーマットで保存します。 g. パスフレーズなしでキーを保存するよう求めるメッセージが表示されたら、[Yes] をクリッ クします。 h. PuTTY プライベートキーの名前を入力します(mykeypair.ppk など)。 i. [Save] をクリックします。 j. PuTTYgen アプリケーションを終了します。 Amazon EMR CLI のインストールを検証する • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --version • Windows ユーザー: ruby elastic-mapreduce --version CLI が正しくインストールされ、認証情報が適切に設定されていれば、CLI のバージョン番号が 日付形式で表示されます。出力は次の例のようになります: Version 2012-12-17 コマンドラインインターフェイスの呼び出し方法 (廃止) Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 コマンドラインインターフェイス(CLI)の実行に使用するシンタックスは、ご使用のオペレーティ ングシステムによって若干異なります。以下の例では、コマンドがターミナル(Linux、UNIX、お よび Mac OS X)またはコマンド(Windows)のインターフェイスに発行されます。どちらの例 も、Amazon EMR CLI を解凍したディレクトリからコマンドが実行されていることを前提としていま す。 624 Amazon EMR 開発者ガイド AWS EMR コマンドラインイン ターフェイスのオプション(廃止) Linux/UNIX/Mac OS X バージョンの CLI 呼び出しでは、ピリオドとスラッシュ(./)を使用して、ス クリプトがカレントディレクトリにあることを指定します。オペレーティングシステムは自動的に スクリプトが Ruby スクリプトであると認識し、適切なライブラリを使用してスクリプトを解釈しま す。Windows バージョンの呼び出しでは、暗黙でカレントディレクトリが使用されますが、呼び出し の頭に "ruby" を付けることによって、使用するスクリプトエンジンを明示する必要があります。 先述の CLI Ruby スクリプトの呼び出し方法に関わるオペレーティングシステム固有の相違を除け ば、オプションを CLI に渡す方法は同じです。Amazon EMR CLI をインストールしたディレクトリ で、お使いのオペレーティングシステムに応じて以下の形式でコマンドを発行します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce Options • Windows ユーザー: ruby elastic-mapreduce Options AWS EMR コマンドラインインターフェイスのオ プション(廃止) Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 Amazon EMR コマンドラインインターフェイス(CLI)は、機能に基づいて示されている次のオプ ションをサポートします。複数のカテゴリに対応するオプションは、複数回示されています。 トピック • 一般的なオプション (p. 626) • 一般的ではないオプション (p. 627) • すべてのステップタイプで共通するオプション (p. 628) • インスタンスグループを追加および変更する (p. 628) • ジョブフローに JAR ステップを追加する (p. 630) • ジョブフローに JSON ステップを追加する (p. 632) • ジョブフローにストリーミングステップを追加する (p. 632) • マスターノードに Elastic IP アドレス を割り当てる (p. 635) • マスターノードへの接続 (p. 636) • ジョブフローを作成する (p. 637) • HBase オプションの使用 (p. 644) • Hive オプションの使用 (p. 653) • Impala オプションの使用 (p. 657) • ジョブフローの一覧とその説明を表示する (p. 658) • ステップへ引数を渡す (p. 661) • Pig オプションの使用 (p. 663) • ステップアクションの指定 (p. 665) • ブートストラップアクションを指定する (p. 667) 625 Amazon EMR 開発者ガイド 一般的なオプション • タグ付け (p. 672) • ジョブフローの終了 (p. 674) • S3DistCp の使用 (p. 676) 一般的なオプション --access-id ACCESS_ID AWS アクセス識別子を設定します。 ショートカット: -a ACCESS_ID --credentials CREDENTIALS_FILE Amazon EMR に接続するときに使用する AWS アクセス識別子と AWS プライベートキーを含む 認証情報ファイルを指定します。 ショートカット: -c CREDENTIALS_FILE For CLI access, you need an access key ID and secret access key. Use IAM user access keys instead of AWS root account access keys. IAM lets you securely control access to AWS services and resources in your AWS account. For more information about creating access keys, see How Do I Get Security Credentials? in the AWS General Reference. --help CLI からのヘルプ情報を表示します。 ショートカット: -h --http-proxy HTTP_PROXY HTTP プロキシサーバーアドレス(host[:port])。 --http-proxy-user USER HTTP プロキシに対して指定するユーザー名。 --http-proxy-pass PASS HTTP プロキシに対して指定するパスワード。 --jobflow JOB_FLOW_IDENTIFIER 特定のクラスター識別子でクラスターを指定します。 ショートカット: -j JOB_FLOW_IDENTIFIER --log-uri ログファイルを受け取る Amazon S3 バケットを指定します。--create とともに使用されます。 --private-key PRIVATE_KEY Amazon EMR に接続するときに使用する AWS プライベートキーを指定します。 ショートカット: -p PRIVATE_KEY --trace ウェブサービスに指示されたコマンドを追跡します。 --verbose プログラムインタラクションの Verbose ログ出力をオンにします。 --version CLI のバージョンを表示します。 ショートカット: -v Amazon S3 にログファイルをアーカイブするには • クラスターを起動するときに --log-uri 引数を設定し、Amazon S3 内の場所を指定します。 あるいは、CLI 用に構成した credentials.json ファイルに、この値を設定してもかまいま 626 Amazon EMR 開発者ガイド 一般的ではないオプション せん。これにより、CLI を使用して起動したクラスターはすべて、指定された Amazon S3 バ ケットにログファイルをアーカイブするようになります。credentials.json の詳細につい ては、「Amazon EMR コマンドラインインターフェイスのインストール (廃止) (p. 619)」の 「Configuring Credentials」を参照してください。次の例に、ログファイルを Amazon S3 にアー カイブするクラスターの作成について示します。mybucket をバケットの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --log-uri s3://mybucket • Windows ユーザー: ruby elastic-mapreduce --create --log-uri s3://mybucket ログを Amazon S3 に集約するには • Hadoop 2.x のログ集計では、個々のアプリケーションのすべてのコンテナのログが 1 つのファ イルにコンパイルされます。このオプションは、Hadoop 2.x AMI でのみ利用できます。Amazon EMR CLI を使用して Amazon S3 へのログの集計を有効にするには、クラスターの起動時にブー トストラップアクションを使用して、ログの集計を有効にし、ログを格納するバケットを指定し ます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --master-instance-type m1.xlarge -slave-instance-type m1.xlarge \ --num-instances 1 --ami-version 3.3 --bootstrap-action \ s3://elasticmapreduce/bootstrap-actions/configure-hadoop --args \ "-y,yarn.log-aggregation-enable=true,-y,yarn.logaggregation.retain-seconds=-1,-y,yarn.log-aggregation.retain-checkinterval-seconds=3000,\ -y,yarn.nodemanager.remote-app-log-dir=s3://mybucket/logs" \ --ssh --name "log aggregation sub-bucket name" • Windows ユーザー: ruby elastic-mapreduce --create --alive --master-instance-type m1.xlarge --slave-instance-type m1.xlarge --num-instances 1 --ami-version 3.3 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop --args "-y,yarn.log-aggregation-enable=true,-y,yarn.logaggregation.retain-seconds=-1,-y,yarn.log-aggregation.retain-checkinterval-seconds=3000,-y,yarn.nodemanager.remote-app-log-dir=s3:// mybucket/logs" --ssh --name "log aggregation sub-bucket name" 一般的ではないオプション --apps-path APPLICATION_PATH 使用する Amazon EMR バケットのベースに Amazon S3 パスを指定します(例: s3:// elasticmapreduce)。 --endpoint ENDPOINT 接続する Amazon EMR エンドポイントを指定します。 --debug 例外が発生したときにスタックトレースを印刷します。 627 Amazon EMR 開発者ガイド すべてのステップタイプで共通するオプション すべてのステップタイプで共通するオプション --no-wait SCP や SSH の実行、または Elastic IP アドレスの割り当てを行うときに、マスターノードが起動 するのを待機しません。 --key-pair-file FILE_PATH クラスターの起動時に接続承認情報として設定される Amazon EC2 キーペアのローカル PEM ファイルのパスです。 インスタンスグループを追加および変更する --add-instance-group INSTANCE_ROLE インスタンスグループを既存のクラスターに追加します。ロールは task のみの場合がありま す。 --modify-instance-group INSTANCE_GROUP_ID 既存のインスタンスグループを変更します。 --add-instance-group INSTANCE_ROLE インスタンスグループを既存のクラスターに追加します。ロールは task のみの場合がありま す。 Amazon EMR CLI を使用してスポットインスタンスでクラスター全体を起動するには インスタンスグループがスポットインスタンスとして起動されるように指定するには、--bid-price パラメーターを使用します。次の例は、マスター、コア、およびタスクインスタンスグループすべて がスポットインスタンスとして実行されているクラスターを作成する方法を示しています。次のコー ドでは、マスターインスタンスとコアインスタンスのリクエストが完全に満たされた場合にのみクラ スターを起動します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Spot Cluster" \ --instance-group master --instance-type m1.large --instance-count 1 -bid-price 0.25 \ --instance-group core --instance-type m1.large --instance-count 4 --bidprice 0.03 \ --instance-group task --instance-type c1.medium --instance-count 2 -bid-price 0.10 • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Spot Cluster" -instance-group master --instance-type m1.large --instance-count 1 --bidprice 0.25 --instance-group core --instance-type m1.large --instancecount 4 --bid-price 0.03 --instance-group task --instance-type c1.medium --instance-count 2 --bid-price 0.10 スポットインスタンスでタスクインスタンスグループを起動するには --bid-price パラメーターを使用してスポットインスタンスでタスクインスタンスグループを起動 できますが、複数のタスクグループはサポートされません。次の例は、タスクインスタンスグループ のみがスポットインスタンスを使用するクラスターを作成する方法を示しています。コマンドは、ス 628 Amazon EMR 開発者ガイド インスタンスグループを追加および変更する ポットインスタンスのリクエストが満たされなくてもクラスターを起動します。この場合、スポット 価格が入札価格を下回っており、クラスターがまだ実行中であれば、タスクノードがクラスターに追 加されます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Spot Task Group" \ --instance-group master --instance-type m1.large \ --instance-count 1 \ --instance-group core --instance-type m1.large \ --instance-count 2 \ --instance-group task --instance-type m1.large \ --instance-count 4 --bid-price 0.03 • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Spot Task Group" -instance-group master --instance-type m1.large --instance-count 1 -instance-group core --instance-type m1.large --instance-count 2 -instance-group task --instance-type m1.small --instance-count 4 --bidprice 0.03 スポットインスタンスのタスクインスタンスグループをクラスターに追加するには Amazon EMR CLI を使用して、スポットインスタンスのタスクインスタンスグループを追加すること ができますが、複数のタスクグループを追加することはできません。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow JobFlowId \ --add-instance-group task --instance-type m1.small \ --instance-count 5 --bid-price 0.05 • Windows ユーザー: ruby elastic-mapreduce --jobflow JobFlowId --add-instance-group task instance-type m1.small --instance-count 5 --bid-price 0.05 -- インスタンスグループのスポットインスタンスの数を変更するには --modify-instance-group および --instance-count コマンドを使用して、クラスター内のリ クエストされたスポットインスタンスの数を変更できます。タスクインスタンスの数は追加または削 除できますが、クラスターのコアインスタンスは追加しかできません。タスクインスタンスの数をゼ ロに設定すると、すべてのスポットインスタンスが削除されます(インスタンスグループは削除され ません)。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: 629 Amazon EMR 開発者ガイド ジョブフローに JAR ステップを追加する ./elastic-mapreduce --jobflow JobFlowId \ --modify-instance-group task --instance-count 5 • Windows ユーザー: ruby elastic-mapreduce --jobflow JobFlowId --modify-instance-group task --instance-count 5 ジョブフローに JAR ステップを追加する --jar JAR_FILE_LOCATION Java アーカイブ(JAR)ファイルの場所を指定します。通常、JAR ファイルは Amazon S3 バ ケットに格納されます。 --main-class JAR ファイルのメインクラスを指定します。JAR ファイルにマニフェストがある場合、このパラ メーターは必要ありません。 --args "arg1,arg2" ステップの引数を指定します。 クラスターを作成してカスタム JAR ステップを送信するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --name "Test custom JAR" \ --jar s3://elasticmapreduce/samples/cloudburst/cloudburst.jar \ --arg s3://elasticmapreduce/samples/cloudburst/input/s_suis.br \ --arg s3://elasticmapreduce/samples/cloudburst/input/100k.br \ --arg s3://mybucket/cloudburst \ --arg 36 --arg 3 --arg 0 --arg 1 --arg 240 --arg 48 --arg 24 \ --arg 24 --arg 128 --arg 16 • Windows ユーザー: ruby elastic-mapreduce --create --name "Test custom JAR" --jar s3:// elasticmapreduce/samples/cloudburst/cloudburst.jar --arg s3:// elasticmapreduce/samples/cloudburst/input/s_suis.br --arg s3:// elasticmapreduce/samples/cloudburst/input/100k.br --arg s3://mybucket/ cloudburst/output --arg 36 --arg 3 --arg 0 --arg 1 --arg 240 --arg 48 -arg 24 --arg 24 --arg 128 --arg 16 Note 上の個々の --arg 値は、--args にコンマ区切りのリストを続けて表すこともできます。 デフォルトでは、このコマンドによりクラスターが起動し、Amazon EC2 の m1.small インスタンス を使用して単一ノードクラスターで実行されます。後で小さなサンプルデータセットでステップが適 切に実行されると、クラスターを起動して、複数のノードで実行することができます。ノード数とイ ンスタンスタイプを指定するには、--num-instances パラメーターと --instance-type パラメー ターをそれぞれ指定して実行します。 630 Amazon EMR 開発者ガイド ジョブフローに JAR ステップを追加する クラスターを作成して Cascading ステップを送信するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --name "Test Cascading" \ --bootstrap-action s3://files.cascading.org/sdk/2.1/install-cascadingsdk.sh \ --JAR elasticmapreduce/samples/cloudfront/logprocessor.jar \ --args "-input,s3://elasticmapreduce/samples/cloudfront/input,start,any,-end,2010-12-27-02 300,-output,s3://mybucket/cloudfront/ output/2010-12-27-02,-overallVolumeReport,-objectPopularityReport,clientIPReport,-edgeLocationReport" • Windows ユーザー: ruby elastic-mapreduce --create --name "Test Cascading" --bootstrapaction s3://files.cascading.org/sdk/2.1/install-cascading-sdk.sh --JAR elasticmapreduce/samples/cloudfront/logprocessor.jar -args "-input,s3://elasticmapreduce/samples/cloudfront/input,start,any,-end,2010-12-27-02 300,-output,s3://mybucket/cloudfront/ output/2010-12-27-02,-overallVolumeReport,-objectPopularityReport,clientIPReport,-edgeLocationReport" Note ブートストラップアクションによって、Amazon EMR に Cascading Software Development Kit がプリインストールされます。Cascading SDK には、Cascading と、Multitool や Load などの Cascading ベースのツールが含まれています。ブートスト ラップアクションによって SDK が抽出され、使用できるツールがデフォルトの PATH に 追加されます。詳細については、http://www.cascading.org/sdk/ を参照してください。 Cascading Multitool でクラスターを作成するには • Cascading Multitool JAR ファイルを参照するクラスターを作成し、次のように適切な Multitool 引 数を指定します。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create \ --jar s3://elasticmapreduce/samples/multitool/multitool-aws-03-31-09.jar \ --args [args] • Windows ユーザー: ruby elastic-mapreduce --create --jar s3://elasticmapreduce/samples/ multitool/multitool-aws-03-31-09.jar --args [args] 631 Amazon EMR 開発者ガイド ジョブフローに JSON ステップを追加する ジョブフローに JSON ステップを追加する --json JSON_FILE 指定された JSON ファイルに保存されているシーケンスステップをクラスターに追加します。 --param VARIABLE=VALUE ARGS JSON ファイル内で、文字列 VARIABLE を文字列 VALUE に置き換えます。 ジョブフローにストリーミングステップを追加する --cache FILE_LOCATION#NAME_OF_FILE_IN_CACHE 個別のファイルを分散キャッシュに追加します。 --cache-archive LOCATION#NAME_OF_ARCHIVE アーカイブファイルを分散キャッシュに追加します。 --ec2-instance-ids-to-terminate INSTANCE_ID --terminate および --modify-instance-group と共に使用し、コアインスタンスグループ やタスクインスタンスグループ内のインスタンスを指定して、終了させます。このように操作す ると、Amazon EMR によって選択されたインスタンスではなく、選択した特定のインスタンスが 終了し、コアインスタンスの数を減らすことができます。 --input LOCATION_OF_INPUT_DATA クラスターの入力場所を指定します。 --instance-count INSTANCE_COUNT インスタンスグループのノード数を設定します。 --instance-type INSTANCE_TYPE インスタンスグループのノードを作成するために、EC2 インスタンスのタイプを設定します。 --jobconf KEY=VALUE ストリーミングクラスターに渡す jobconf 引数を指定します(例: mapred.task.timeout=800000)。 --mapper LOCATION_OF_MAPPER_CODE Hadoop がビルドインされたクラスの名前、またはマッパースクリプトの場所です。 --output LOCATION_OF_JOB_FLOW_OUTPUT クラスターの出力場所を指定します。 --reducer REDUCER Hadoop がビルドインされたクラスの名前、またはリデューサースクリプトの場所です。 --stream --create および --arg とともに使用され、ストリーミングクラスターを起動します。 Note --arg オプションは --stream オプションの直後に実行する必要があります。 クラスターを作成してストリーミングステップを送信するには • Amazon EMR CLI をインストールしたディレクトリで、次のいずれかのコマンドを入力します。 Note Amazon EMR CLI を使用する場合、Hadoop ストリーミングの構文は Hadoop 1.x と Hadoop 2.x で異なります。 Hadoop 2.x の場合は、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: 632 Amazon EMR 開発者ガイド ジョブフローにストリーミングステップを追加する ./elastic-mapreduce --create --stream --ami-version 3.3 \ --instance-type m1.large --arg "-files" --arg "s3://elasticmapreduce/ samples/wordcount/wordSplitter.py" \ --input s3://elasticmapreduce/samples/wordcount/input -mapper wordSplitter.py --reducer aggregate \ --output s3://mybucket/output/2014-01-16 • Windows ユーザー: ruby elastic-mapreduce --create --stream --ami-version 3.3 --instancetype m1.large --arg "-files" --arg "s3://elasticmapreduce/samples/ wordcount/wordSplitter.py" --input s3://elasticmapreduce/samples/ wordcount/input --mapper wordSplitter.py --reducer aggregate -output s3://mybucket/output/2014-01-16 Hadoop 1.x には、次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --stream \ --input s3://elasticmapreduce/samples/wordcount/input \ --mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py \ --reducer aggregate \ --output s3://mybucket/output/2014-01-16 • Windows ユーザー: ruby elastic-mapreduce --create --stream --input s3://elasticmapreduce/ samples/wordcount/input --mapper s3://elasticmapreduce/samples/ wordcount/wordSplitter.py --reducer aggregate --output s3://mybucket/ output/2014-01-16 デフォルトでは、このコマンドは単一のノード クラスター上で実行するクラスターを起動し ます。後で小さなサンプルデータセットでステップが適切に実行されると、クラスターを起動 して、複数のノードで実行することができます。ノード数とインスタンスタイプを指定するに は、--num-instances パラメーターと --instance-type パラメーターをそれぞれ指定して実 行します。 分散キャッシュのファイルを指定するには コマンドラインでオプション –-cache または --cache-archive を指定します。 • クラスターを作成して、以下のパラメーターを追加します。ファイルのサイズ(またはアーカイ ブに含まれるファイルのサイズの合計)は、割り当てられているキャッシュサイズ未満でなけれ ばなりません。 アクション 追加するパラメーター 個別のファイルを分散 キャッシュに追加する --cache に続けて、ファイルの名前と場所、ポンド記号(#)、 ファイルをローカルキャッシュに置いたときに付ける名前 633 Amazon EMR 開発者ガイド ジョブフローにストリーミングステップを追加する アクション 追加するパラメーター アーカイブファイルを分 散キャッシュに追加する --cache-archive に続けて、Amazon S3 でのファイルの場所、 ポンド記号(#)、ファイルの集合をローカルキャッシュに置いた ときに付ける名前 クラスターでは、キャッシュの場所にファイルをコピーしてから、ジョブフローステップを処理 します。 Example 例 次のコマンドでは、ストリーミングクラスターを作成し、--cache を使用して 1 つのファイル sample_dataset_cached.dat をキャッシュに追加しています。Hadoop ストリーミングの構文は Hadoop 1.x と Hadoop 2.x で異なります。 Hadoop 2.x には、次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --stream \ --arg "--files" --arg "s3://my_bucket/my_mapper.py,s3://my_bucket/ my_reducer.py" \ --input s3://my_bucket/my_input \ --output s3://my_bucket/my_output \ --mapper my_mapper.py \ --reducer my_reducer.py \ --cache s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat • Windows ユーザー: ruby elastic-mapreduce --create --stream --arg "-files" -arg "s3://my_bucket/my_mapper.py,s3://my_bucket/my_reducer.py" -input s3://my_bucket/my_input --output s3://my_bucket/my_output -mapper my_mapper.py --reducer my_reducer.py --cache s3://my_bucket/ sample_dataset.dat#sample_dataset_cached.dat Hadoop 1.x には、次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --stream \ --input s3://my_bucket/my_input \ --output s3://my_bucket/my_output \ --mapper s3://my_bucket/my_mapper.py \ --reducer s3://my_bucket/my_reducer.py \ --cache s3://my_bucket/sample_dataset.dat#sample_dataset_cached.dat • Windows ユーザー: ruby elastic-mapreduce --create --stream --input s3://my_bucket/ my_input --output s3://my_bucket/my_output --mapper s3://my_bucket/ my_mapper.py --reducer s3://my_bucket/my_reducer.py --cache s3://my_bucket/ sample_dataset.dat#sample_dataset_cached.dat 634 Amazon EMR 開発者ガイド マスターノードに Elastic IP アドレス を割り当てる マスターノードに Elastic IP アドレス を割り当てる --eip ELASTIC_IP Elastic IP アドレスをマスターノードに関連付けます。Elastic IP アドレスが指定されていない場 合、新しい Elastic IP アドレスを割り当て、マスターノードに関連付けます。 Elastic IP アドレスを割り振り、新規または実行中のクラスターに割り当てることができます。Elastic IP アドレスをクラスターに割り当てた後、割り当てられたアドレスからインスタンスを使用できるよ うになるまで、1、2 分かかることがあります。 新しいクラスターに Elastic IP アドレスを割り当てるには • クラスターを作成し、--eip パラメーターを追加します。CLI は、Elastic IP アドレスの割り振り 後、その Elastic IP アドレスが正常にクラスターに割り当てられるまで待機します。この割り当 てには、最大で 2 分かかります。 Note 過去に割り振られていた Elastic IP アドレスを使用するには、--eip パラメーターの後に 割り振り済みの Elastic IP アドレスを指定します。割り振られた Elastic IP アドレスが他 のクラスターで使用されている場合、そのクラスターは Elastic IP アドレスを使用できな くなり、新しい動的な IP アドレスが割り当てられます。 実行中のクラスターに Elastic IP アドレスを割り当てるには 1. 実行中のクラスターがない場合は、クラスターを作成します。 2. クラスターを識別する Elastic IP アドレスを割り当てるには、クラスターにパブリック DNS 名が必要です。通常、クラ スターには、クラスターの起動後 1、2 分でパブリック DNS 名が割り当てられます。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --list • Windows ユーザー: ruby elastic-mapreduce --list 出力は次の例のようになります。 j-SLRI9SCLK7UC STARTING ec2-75-101-168-82.compute-1.amazonaws.com New Job Flow PENDING Streaming Job 応答には、クラスター ID とパブリック DNS 名が含まれます。クラスター ID は、次のステップ を実行するために必要です。 3. クラスターに Elastic IP アドレスを割り振り、割り当てます。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。現在、他の クラスターに関連付けられている Elastic IP アドレスを割り当てると、そのクラスターには新し い動的な IP アドレスが割り当てられます。 635 Amazon EMR 開発者ガイド マスターノードへの接続 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce JobFlowId --eip • Windows ユーザー: ruby elastic-mapreduce JobFlowId --eip これにより、Elastic IP アドレスが割り振られ、指定されたクラスターに関連付けられます。 Note 過去に割り振られていた Elastic IP アドレスを使用するには、その Elastic IP アドレスを Elastic_IP として、次のように指定します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce JobFlowId --eip Elastic_IP • Windows ユーザー: ruby elastic-mapreduce JobFlowId --eip Elastic_IP マスターノードへの接続 --get SOURCE SCP を使用してマスターノードから指定ファイルをコピーします。 --logs 最近実行されたステップのステップログを表示します。 --put SOURCE SCP を使用してマスターノードにファイルをコピーします。 --scp FILE_TO_COPY ローカルディレクトリからクラスターのマスターノードにファイルをコピーします。 --socks SSH を使用して、指定されたクラスターのマスターノードへのトンネルを作成します。その後 で、これを SOCK プロキシとして、マスターノードにホストされたウェブインターフェイスを見 ることができます。 --ssh COMMAND SSH を使用して、指定されたクラスターのマスターノードに接続して、任意でコマンドを実行し ます。このオプションでは、OpenSSH などの SSH クライアントをデスクトップにインストール しておく必要があります。 --to DESTINATION SCP を使用してマスターノードとの間でファイルをコピーする際のコピー先を指定します。 マスターノードに接続するには マスターノードに接続するには、keypair の値がクラスターの起動時に使用したキーペアの名前に なるように credentials.json ファイルを設定する、key-pair-file 値をプライベートキーファ イルへのフルパスに設定する、.pem ファイルに対する適切なアクセス許可を設定する、およびコン ピュータに SSH クライアント(OpenSSH など)をインストールするという作業が必要になります。 636 Amazon EMR 開発者ガイド ジョブフローを作成する 次のコマンドを発行することによって、マスターノードへの SSH 接続を開くことができます。ここで は、CLI をよく使用するユーザー向けの便利なショートカットを紹介します。j-3L7WXXXXXHO4H を クラスター ID に置き換えます。 • • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce -j j-3L7WXXXXXHO4H --ssh • Windows ユーザー: ruby elastic-mapreduce -j j-3L7WXXXXXHO4H --ssh マスターノードへの SSH トンネルを作成するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce -j j-3L7WXXXXXHO4H --socks • Windows ユーザー: ruby elastic-mapreduce -j j-3L7WXXXXXHO4H --socks Note --socks 機能は、CLI バージョン 2012-06-12 以降でのみ使用できます。お持ちの CLI のバージョンを確認するには、コマンドラインで elastic-mapreduce --version を 実行します。CLI の最新バージョンは、http://aws.amazon.com/code/Elastic-MapReduce/ 2264 からダウンロードできます。 ジョブフローを作成する --alive --create とともに使用され、クラスターを起動し、クラスターはすべてのステップが完了した 後も稼働し続けます。インタラクティブなクラスターには、このオプションが必要です。 --ami-version AMI_VERSION --create と共に使用して、クラスターの起動時に使用する AMI のバージョンを指定します。-hadoop-version パラメーターがサポートされなくなったため、この設定によって、インストー ルする Hadoop のバージョンも特定されます。 Amazon EMR CLI で、AMI のバージョン番号の代わりにキーワード latest を使用する場合 (例: --ami-version latest)、AMI は "latest(最新)" の AMI バージョンとして表示され てクラスターが起動されます。現在、AMI のバージョンは 2.4.2 です。この設定は、プロトタ イプの作成やテストに適していて、実稼働環境には推奨されません。このオプションは、AWS CLI、SDK、または API ではサポートされていません。 Amazon EMR CLI バージョン 2012-07-30 以降では、最新の AMI は 2.4.2 で Hadoop は 1.0.3 で す。Amazon EMR CLI バージョン 2011-12-08 から 2012-07-09 までは、最新の AMI は 2.1.3 で Hadoop は 0.20.205 です。Amazon EMR CLI バージョン 2011-12-11 以前では、最新の AMI は 1.0.1 で Hadoop は 0.18 です。 637 Amazon EMR 開発者ガイド ジョブフローを作成する デフォルト AMI は、アジアパシフィック (シドニー) リージョンでは使用できません。代わりに、 (Amazon EMR CLI で)--ami-version latest を使用して完全に AMI を指定するか、メ ジャー - マイナーバージョンを使用します。 --availability-zone AVAILABILITY_ZONE クラスターが起動されるアベイラビリティーゾーンです。Amazon EMR でサポートされるアベイ ラビリティーゾーンの詳細については、アマゾン ウェブ サービス全般のリファレンスの「リー ジョンとエンドポイント」を参照してください。 --bid-price BID_PRICE スポットインスタンスのグループに対する入札価格(米ドル)です。 --create 新しいクラスターを起動します。 --hadoop-version VERSION インストールする Hadoop のバージョンを指定します。 --info INFO クラスターの作成中に追加の情報を指定します。 --instance-group INSTANCE_GROUP_TYPE インスタンスグループタイプを設定します。タイプはマスター、コア、またはタスクです。 --jobflow-role IAM_ROLE_NAME 指定された IAM ロールでクラスターの EC2 インスタンスを起動します。 --service-role IAM_ROLE_NAME 指定された IAM ロールで Amazon EMR サービスを起動します。 --key-pair KEY_PAIR_PEM_FILE クラスターの起動時に接続承認情報として設定される Amazon EC2 キーペアの名前です。 --master-instance-type INSTANCE_TYPE クラスターでマスターノードとして起動する EC2 インスタンスのタイプです。 --name "JOB_FLOW_NAME" クラスターの名前を指定します。これは、ジョブフローの作成時にのみ設定できます。 --num-instances NUMBER_OF_INSTANCES --create および --modify-instance-group とともに使用され、クラスター内の EC2 インス タンスの数を指定します。 実行中のクラスターのタスクインスタンスの数を増減できます。また、実行中のクラスターに単 一のタスクインスタンスグループを追加できます。コアインスタンスの数を増やすこともできま すが、減らすことはできません。 --plain-output 作成ステップからのクラスター識別子をシンプルテキストで返します。 --region REGION クラスターを起動するリージョンを指定します。 --slave-instance-type クラスターでスレーブノードとして起動する EC2 インスタンスのタイプです。 --subnet EC2-SUBNET_ID Amazon VPC サブネットでクラスターを起動します。 --visible-to-all-users BOOLEAN クラスターを起動した AWS アカウントのすべての IAM ユーザーに既存のクラスターのインスタ ンスが表示されるようにします。 --with-supported-products PRODUCT Amazon EMR cluster; にサードパーティソフトウェアをインストールします。例えば、Hadoop のサードパーティディストリビューションをインストールします。サードパーティソフトウェア の読み取りと動作のためのオプションの引数を受け入れます。--create とともに使用され、指 定されたサードパーティアプリケーションを使用できるクラスターを起動します。Amazon EMR CLI の 2013-03-19 以降のバージョンは、--args パラメーターを使用してオプションの引数値を 受け付けます。 638 Amazon EMR 開発者ガイド ジョブフローを作成する --with-termination-protection --create とともに使用され、終了保護を有効にしてクラスターを起動します。 VPC 内にクラスターを起動するには VPC の設定が完了したら、--subnet 引数とサブネットアドレスを使用して、VPC 内で Amazon EMR クラスターを起動できます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --subnet subnet-77XXXX03 • Windows ユーザー: ruby elastic-mapreduce --create --alive --subnet subnet-77XXXX03 長時間稼働クラスターを作成するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Interactive Cluster" \ --num-instances=1 --master-instance-type=m1.large --hive-interactive • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Interactive Cluster" -num-instances=1 --master-instance-type=m1.large --hive-interactive クラスターの作成時に AMI のバージョンを指定するには CLI を使用してクラスターを作成するときに、--ami-version パラメーターを追加します。このパ ラメーターを指定しない場合、または --ami-version latest を指定すると、最新バージョンの AMI が使用されます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Static AMI Version" \ --ami-version 2.4.8 \ --num-instances 5 --instance-type m1.large • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Static AMI Version" -ami-version 2.4.8 --num-instances 5 --instance-type m1.large 639 Amazon EMR 開発者ガイド ジョブフローを作成する 以下の例では、メジャーとマイナーバージョンを使用して AMI を指定します。クラスターは、 この指定に一致し、最新のパッチが適用された AMI 上で起動されます。たとえば、最新の AMI バージョンが 2.4.8 の場合、--ami-version 2.4 を指定すると、AMI 2.4.8 を使用してクラス ターが起動されます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Major-Minor AMI Version" \ --ami-version 2.4 \ --num-instances 5 --instance-type m1.large • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Major-Minor AMI Version" --ami-version 2.4 --num-instances 5 --instance-type m1.large 次の例では、最新の AMI を使用してクラスターを起動します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Latest AMI Version" \ --ami-version latest \ --num-instances 5 --instance-type m1.large • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Latest AMI Version" -ami-version latest --num-instances 5 --instance-type m1.large クラスターの現在の AMI バージョンを表示するには --describe パラメーターを使用して、クラスターの AMI のバージョンを取得します。AMI のバー ジョンが、クラスターに関するその他の情報と共に返されます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --describe -–jobflow JobFlowID • Windows ユーザー: ruby elastic-mapreduce --describe -–jobflow JobFlowID クラスターの可視性を設定するには デフォルトでは、Amazon EMR CLI を使用して作成されたクラスターは、すべてのユーザーに表示さ れません。Amazon EMR CLI を使用して新しいクラスターに IAM ユーザーの可視性を追加する場合 は、次の例に示すように、クラスターの呼び出しに --visible-to-all-users フラグを追加しま す。 640 Amazon EMR 開発者ガイド ジョブフローを作成する • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive / --instance-type m1.xlarge --num-instances 2 / --visible-to-all-users • Windows ユーザー: ruby elastic-mapreduce --create --alive --instance-type m1.xlarge --numinstances 2 --visible-to-all-users IAM ユーザーの可視性を既存のクラスターに追加する場合は、--set-visible-to-all-users オプションを使用し、変更するクラスターの ID を指定します。実行中のクラスターの可視性を変 更できるのは、そのクラスターを作成した IAM ユーザーか、そのクラスターを所有する AWS ア カウントだけです。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --set-visible-to-all-users true --jobflow JobFlowId • Windows ユーザー: ruby elastic-mapreduce --set-visible-to-all-users true -jobflow JobFlowId IAM ロールを作成して使用するには デフォルトのロールが既に存在する場合は、出力は返されません。最初にデフォルトのロールを作成 し、必要に応じてそれらのロールを変更することをお勧めします。デフォルトのロールの詳細につい ては、「Amazon EMR のデフォルトの IAM ロール (p. 187)」を参照してください。 1. Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 : • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create-default-roles • Windows ユーザー: ruby elastic-mapreduce --create-default-roles 2. デフォルトのロールを指定するには、次のコマンドを入力します。このコマンドは、カスタム ロールを指定するために使用することもできます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Test cluster" \ --ami-version 2.4 \ 641 Amazon EMR 開発者ガイド ジョブフローを作成する --num-instances 5 --instance-type m1.large \ --service-role EMR_DefaultRole --jobflow-role EMR_EC2_DefaultRole • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Test cluster" --amiversion 2.4 --num-instances 5 --instance-type m1.large --servicerole EMR_DefaultRole --jobflow-role EMR_EC2_DefaultRole IAM ロールを使用してクラスターを起動するには クラスターを作成するコマンドに --service-role パラメーターと --jobflow-role パラメーター を追加し、クラスターの Amazon EMR インスタンスと EC2 インスタンスに適用する IAM ロールの名 前を指定します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --num-instances 3 \ --instance-type m1.large \ --name "myJobFlowName" \ --hive-interactive --hive-versions 0.8.1.6 \ --ami-version 2.3.0 \ --jobflow-role EMR_EC2_DefaultRole \ --service-role EMR_DefaultRole • Windows ユーザー: ruby elastic-mapreduce --create --alive --num-instances 3 --instancetype m1.small --name "myJobFlowName" --hive-interactive --hive-versions 0.8.1.6 --ami-version 2.3.0 --jobflow-role EMR_EC2_DefaultRole -service-role EMR_DefaultRole デフォルトの IAM ロールを設定するには 特定の IAM ロールでほとんどまたはすべてのクラスターを起動する場合、その IAM ロールを Amazon EMR CLI にデフォルトとして設定すると、コマンドラインで指定する必要がありませ ん。credentials.json に指定した IAM ロールは、前述の手順で示したコマンドラインで別の IAM ロールを指定することによっていつでもオーバーライドできます。 • CLI のインストール時に作成した credentials.json ファイルに jobflow-role フィールドを 追加します。credentials.json の詳細については、「認証情報の設定 (p. 621)」を参照して ください。 以下の例は、CLI で常にユーザー定義の IAM ロール(MyCustomEC2Role と MyCustomEMRRole)を使用してクラスターを起動させる credentials.json ファイルの内容 を示しています。 { "access-id": "AccessKeyID", "private-key": "PrivateKey", "key-pair": "KeyName", "jobflow-role": "MyCustomEC2Role", 642 Amazon EMR 開発者ガイド ジョブフローを作成する "service-role": "MyCustomEMRRole", "key-pair-file": "location of key pair file", "region": "Region", "log-uri": "location of bucket on Amazon S3" } リージョンを指定するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --region eu-west-1 • Windows ユーザー: ruby elastic-mapreduce --create --region eu-west-1 Tip CLI からコマンドを発行するたびに必要なパラメーター数を減らすために、リージョンなどの 情報を credentials.json ファイルに格納できます。credentials.json ファイルの作成 の詳細については、「認証情報の設定 (p. 621)」を参照してください。 MapR でクラスターを起動するには • Amazon EMR CLI をインストールしたディレクトリで、--args オプションで引数を渡し て、MapR エディションとバージョンを指定します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive \ --instance-type m1.large –-num-instances 3 \ --supported-product mapr --name m5 --args "--edition,m5,--version,3.1.1" • Windows ユーザー: ruby elastic-mapreduce --create --alive --instance-type m1.large –-numinstances 3 --supported-product mapr --name m5 --args "--edition,m5,-version,3.1.1" ARRESTED 状態のクラスターをリセットするには --modify-instance-group 状態のクラスターをリセットするには、ARRESTED コマンドを使用し ます。次のように --modify-instance-group コマンドを入力します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --modify-instance-group InstanceGroupID \ 643 Amazon EMR 開発者ガイド HBase オプションの使用 -–instance-count COUNT • Windows ユーザー: ruby elastic-mapreduce --modify-instance-group InstanceGroupID -– instance-count COUNT <InstanceGroupID> は arrested 状態のインスタンスグループの ID であり、<COUNT> はインス タンスグループで必要なノードの数です。 Tip 実行中のクラスターを解放するために最初に設定されているノード数を変更する必要はあり ません。-–instance-count は、最初の設定と同じ数に設定します。 HBase オプションの使用 --backup-dir BACKUP_LOCATION HBase バックアップが存在する、またはバックアップを作成するディレクトリ。 --backup-version VERSION_NUMBER 復元する既存の HBase バックアップのバージョン番号を指定します。 --consistent バックアップ処理中の HBase クラスターに対するすべての書き込みオペレーションを一時停止し て、バックアップの整合性を確保します。 --full-backup-time-interval INTERVAL HBase クラスターの自動完全バックアップが行われてから、次の完全バックアップが行われるま での時間単位の期間を指定する整数。 --full-backup-time-unit TIME_UNIT --full-backup-time-interval とともに使用される時間単位で、自動スケジュールされた HBase バックアップの実行頻度を指定します。minutes、hours、days のいずれかの値を使用 できます。 --hbase HBase クラスターを起動するために使用されます。 --hbase-backup 1 回限りの HBase データのバックアップを、--backup-dir で指定された場所に作成します。 --hbase-restore --backup-dir で指定された場所、および --backup-version で指定されたバージョンから (オプション)バックアップを復元します。 --hbase-schedule-backup HBase データの自動バックアップをスケジュールします。 --incremental-backup-time-interval TIME_INTERVAL HBase クラスターの自動差分バックアップが行われてから、次の差分バックアップが行われる までの時間単位の期間を指定する整数。このパラメーターは --hbase-schedule-backup とと もに使用され、これにより定期的な増分バックアップが作成されます。この期間によって、完全 バックアップと差分バックアップが同じ時刻にスケジュールされた場合は、完全バックアップの みが作成されます。--incremental-backup-time-unit とともに使用されます。 --incremental-backup-time-unit TIME_UNIT --incremental-backup-time-interval とともに使用される時間単位で、自動スケジュール された差分 HBase バックアップの実行頻度を指定します。minutes、hours、days のいずれか の値を使用できます。 644 Amazon EMR 開発者ガイド HBase オプションの使用 --disable-full-backups スケジュールされた完全 HBase バックアップをオフにします。それには、このフラグを、-hbase-schedule-backup が指定された呼び出しに渡します。 --disable-incremental-backups スケジュールされた差分 HBase バックアップをオフにします。それには、このフラグを、-hbase-schedule-backup が指定された呼び出しに渡します。 --start-time START_TIME HBase バックアップスケジュールを開始する時間を指定します。これが設定されていない場合、 最初のバックアップが直ちに開始されます。この値は、ISO 日付/時刻形式で指定する必要があ ります。このパラメーターを使用すると、最初のデータロード処理が完了してから最初のバック アップが実行されるように、または毎日決まった時間にバックアップが行われるように指定でき ます。 クラスターを起動して HBase をインストールするには CLI を使用してクラスターを起動するときに --hbase パラメーターを指定します。 次の例は、HBase を実行するクラスターを CLI から起動する方法を示しています。HBase クラス ターで少なくとも 2 つのインスタンスを実行することをお勧めします。 CLI は、暗黙的に HBase クラスターを起動し、キープアライブおよび終了保護セットを設定します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --hbase --name "HBase Cluster" \ --num-instances 3 \ --instance-type c1.xlarge • Windows ユーザー: ruby elastic-mapreduce --create --hbase --name "HBase Cluster" --numinstances 3 --instance-type c1.xlarge HBase デーモンを設定するには HBase クラスターの起動時に、ブートストラップアクション configure-hbase-daemons を追加しま す。このブートストラップアクションを使用して、1 つ以上のデーモンを設定し、zookeeper-opts お よび hbase-master-opts の値を設定します。この値により、HBase クラスターの zookeeper やマス ターノードコンポーネントで使用されるオプションが設定されます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --hbase --name "My HBase Cluster" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/ configure-hbase-daemons --args "--hbase-zookeeper-opts=-Xmx1024m XX:GCTimeRatio=19,--hbase-master-opts=-Xmx2048m,--hbase-regionserveropts=-Xmx4096m" • Windows ユーザー: 645 Amazon EMR 開発者ガイド HBase オプションの使用 ruby elastic-mapreduce --create --hbase --name "My HBase Cluster" --bootstrap-action s3://elasticmapreduce/bootstrap-actions/ configure-hbase-daemons --args "--hbase-zookeeper-opts=-Xmx1024m XX:GCTimeRatio=19,--hbase-master-opts=-Xmx2048m,--hbase-regionserveropts=-Xmx4096m" Note このブートストラップアクションの引数を指定するときは、シェルによって引数が分割さ れないように、--args パラメーターの値を引用符で囲む必要があります。また、JVM 引 数が複数ある場合は、それぞれをスペース文字で区切る必要があります。上記の例では、Xmx1000M と -XX:GCTimeRatio=19 の間にスペースがあります。 個別の HBase サイト設定を指定するには HBase クラスターの起動時に configure-hbase ブートストラップアクションを設定し、hbasesite.xml 内で変更する値を指定します。次の例は、hbase.hregion.max.filesize 設定を変更す る方法を示しています。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --hbase --name "My HBase Cluster" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehbase \ --args -s,hbase.hregion.max.filesize=52428800 • Windows ユーザー: ruby elastic-mapreduce --create --hbase --name "My HBase Cluster" -bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hbase --args -s,hbase.hregion.max.filesize=52428800 XML ファイルで HBase サイト設定を指定するには 1. カスタムバージョンの hbase-site.xml を作成します。カスタムファイルは有効な XML であ る必要があります。エラーが発生する可能性を少なくするには、/home/hadoop/conf/hbasesite.xml の Amazon EMR HBase マスターノードにある hbase-site.xml のデフォルトのコ ピーから開始し、そのファイルのコピーを編集します。ファイルをゼロから作成する必要はあり ません。新しいファイルに新しい名前を付けるか、hbase-site.xml をそのまま使用します。 2. カスタム hbase-site.xml ファイルを Amazon S3 バケットにアップロードします。クラスター を起動する AWS アカウントがファイルにアクセスできるように、このバケットには権限が設定 されています。さらに、クラスターを起動する AWS アカウントが Amazon S3 バケットを所有し ている場合は、アクセス権が付与されます。 3. HBase クラスターの起動時に configure-hbase ブートストラップアクションを設定し、カスタム hbase-site.xml ファイルの場所を指定します。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: 646 Amazon EMR 開発者ガイド HBase オプションの使用 ./elastic-mapreduce --create --hbase --name "My HBase Cluster" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehbase \ --args --site-config-file s3://bucket/config.xml • Windows ユーザー: ruby elastic-mapreduce --create --hbase --name "My HBase Cluster" -bootstrap-action s3://elasticmapreduce/bootstrap-actions/configure-hbase --args --site-config-file s3://bucket/config.xml Ganglia 用に HBase クラスターを設定するには クラスターを起動し、install-ganglia ブートストラップアクションと configure-hbase-for-ganglia ブー トストラップアクションの両方を指定します。 Note Amazon S3 バケットパスには、HBase クラスターが起動されたリージョンのプレフィッ クスを付けることができます(例えば、s3://region.elasticmapreduce/bootstrap-actions/ configure-hbase-for-ganglia)。Amazon EMR でサポートされるリージョンのリストについて は、「AWS リージョンを選択する (p. 32)」を参照してください。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --hbase --name "My HBase Cluster" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/installganglia \ --bootstrap-action s3://region.elasticmapreduce/bootstrap-actions/ configure-hbase-for-ganglia • Windows ユーザー: ruby elastic-mapreduce --create --hbase --name "My HBase Cluster" -bootstrap-action s3://elasticmapreduce/bootstrap-actions/install-ganglia --bootstrap-action s3://region.elasticmapreduce/bootstrap-actions/ configure-hbase-for-ganglia HBase データを手動でバックアップするには CLI で --hbase-backup を実行し、クラスターと Amazon S3 におけるバックアップの場所を指定し ます。Amazon EMR は、バックアップの起動時間に基づいて付けられた名前でバックアップをタグ付 けします。形式は YYYYMMDDTHHMMSSZ(例: 20120809T031314Z)です。他の名前を使ってバッ クアップにラベルを付けたい場合は、Amazon S3 に場所を作成し(以下の例では backups)、その 場所の名前を、バックアップファイルをタグ付けする手段として使用できます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA --hbase-backup \ 647 Amazon EMR 開発者ガイド HBase オプションの使用 --backup-dir s3://myawsbucket/backups/j-ABABABABABA • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-backup --backupdir s3://myawsbucket/backups/j-ABABABABABA この例では、データをバックアップし、--consistent フラグを使用してバックアップの整合性を確 保しています。このフラグにより、バックアップ中は HBase クラスターへのすべての書き込みが 一時停止します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA --hbase-backup \ --backup-dir s3://myawsbucket/backups/j-ABABABABABA \ --consistent • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-backup --backupdir s3://myawsbucket/backups/j-ABABABABABA --consistent HBase データの自動バックアップをスケジュールするには HBase クラスターで --hbase-schedule-backup を呼び出して、バックアップの間隔と単位を指定 します。開始時間を指定しない場合、最初のバックアップは直ちに開始されます。次の例では、週 1 回行われる完全バックアップを作成しています。最初のバックアップは直ちに開始されます。 次の例では、週 1 回行われる完全バックアップを作成しています。最初のバックアップは 2012 年 6 月 15 日午後 8 時(UTC 時間)に開始されます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --full-backup-time-interval 7 --full-backup-time-unit days \ --backup-dir s3://mybucket/backups/j-ABABABABABA \ --start-time 2012-06-15T20:00Z • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup -full-backup-time-interval 7 --full-backup-time-unit days --backup-dir s3:// mybucket/backups/j-ABABABABABA --start-time 2012-06-15T20:00Z 次の例では、毎日行われる増分バックアップを作成しています。最初の増分バックアップは直ちに開 始されます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --incremental-backup-time-interval 24 \ 648 Amazon EMR 開発者ガイド HBase オプションの使用 --incremental-backup-time-unit hours \ --backup-dir s3://mybucket/backups/j-ABABABABABA • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup -incremental-backup-time-interval 24 --incremental-backup-time-unit hours -backup-dir s3://mybucket/backups/j-ABABABABABA 次の例では、毎日行われる差分バックアップを作成しています。最初のバックアップは 2012 年 6 月 15 日午後 8 時(UTC 時間)に開始されます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --incremental-backup-time-interval 24 \ --incremental-backup-time-unit hours \ --backup-dir s3://mybucket/backups/j-ABABABABABA \ --start-time 2012-06-15T20:00Z • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup --incremental-backup-time-interval 24 --incremental-backup-timeunit hours --backup-dir s3://mybucket/backups/j-ABABABABABA --starttime 2012-06-15T20:00Z 次の例では、週 1 回行われる完全バックアップと毎日行われる差分バックアップの両方を作成してい ます。最初の完全バックアップは直ちに開始されます。完全バックアップと差分バックアップが同じ 時間にスケジュールされるたびに、完全バックアップのみが実行されます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --full-backup-time-interval 7 \ --full-backup-time-unit days \ --incremental-backup-time-interval 24 \ --incremental-backup-time-unit hours \ --backup-dir s3://mybucket/backups/j-ABABABABABA • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup -full-backup-time-interval 7 --full-backup-time-unit days --incrementalbackup-time-interval 24 --incremental-backup-time-unit hours --backupdir s3://mybucket/backups/j-ABABABABABA 次の例では、週 1 回行われる完全バックアップと毎日行われる差分バックアップの両方を作成してい ます。最初の完全バックアップは 2012 年 6 月 15 日に開始されます。完全バックアップと差分バック アップが同じ時間にスケジュールされるたびに、完全バックアップのみが実行されます。 649 Amazon EMR 開発者ガイド HBase オプションの使用 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --full-backup-time-interval 7 \ --full-backup-time-unit days \ --incremental-backup-time-interval 24 \ --incremental-backup-time-unit hours \ --backup-dir s3://mybucket/backups/j-ABABABABABA \ --start-time 2012-06-15T20:00Z • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup -full-backup-time-interval 7 --full-backup-time-unit days --incrementalbackup-time-interval 24 --incremental-backup-time-unit hours --backupdir s3://mybucket/backups/j-ABABABABABA --start-time 2012-06-15T20:00Z 次のコマンドを使用して、週 1 回行われる完全バックアップと毎日行われる差分バックアップの両方 を作成します。最初の完全バックアップは 2012 年 6 月 15 日に開始されます。完全バックアップと差 分バックアップが同じ時間にスケジュールされるたびに、完全バックアップのみが実行されます。-consistent フラグが設定されているので、差分バックアップと完全バックアップの両方について、 データの整合性を確保するために、バックアップ処理の初期段階で書き込みオペレーションが一時停 止されます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --full-backup-time-interval 7 \ --full-backup-time-unit days \ --incremental-backup-time-interval 24 \ --incremental-backup-time-unit hours \ --backup-dir s3://mybucket/backups/j-ABABABABABA \ --start-time 2012-06-15T20:00Z \ --consistent • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup -full-backup-time-interval 7 --full-backup-time-unit days --incrementalbackup-time-interval 24 --incremental-backup-time-unit hours --backupdir s3://mybucket/backups/j-ABABABABABA --start-time 2012-06-15T20:00Z -consistent • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup \ --full-backup-time-interval 7 --full-backup-time-unit days \ --backup-dir s3://mybucket/backups/j-ABABABABABA 650 Amazon EMR 開発者ガイド HBase オプションの使用 • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup --full-backup-time-interval 7 --full-backup-time-unit days --backupdir s3://mybucket/backups/j-ABABABABABA HBase の自動バックアップをオフにするには --hbase-schedule-backup パラメーターを指定してクラスターを呼び出し、--disable-fullbackups または --disable-incremental-backups フラグ、あるいはこの両方のフラグを設定し ます。 1. Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup --disable-full-backups • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup --disable-full-backups 2. 増分バックアップをオフにするには次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup --disable-incremental-backups • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup --disable-incremental-backups 3. 完全バックアップおよび差分バックアップをオフにするには次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA \ --hbase-schedule-backup --disable-full-backups \ --disable-incremental-backups • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-schedule-backup --disable-full-backups --disable-incremental-backups 実行中のクラスターに HBase バックアップデータを復元するには --hbase-restore ステップを実行し、ジョブフロー、Amazon S3 におけるバックアップの場所、お よび(オプションで)バックアップバージョンの名前を指定します。--backup-version の値を設 651 Amazon EMR 開発者ガイド HBase オプションの使用 定しない場合は、バックアップディレクトリにある最後のバージョンがロードされます。これは、辞 書順で最後にくる名前が付いているバージョンになります。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA --hbase-restore \ --backup-dir s3://myawsbucket/backups/j-ABABABABABA • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-restore --backupdir s3://myawsbucket/backups/j-ABABABABABA 次の例では、HBase クラスターを、s3://myawsbucket/backups に格納された指定のバージョ ンのバックアップデータに復元しています。HBase クラスターに格納されているデータはすべて 上書きされます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-ABABABABABA --hbase-restore \ --backup-dir s3://myawsbucket/backups/j-ABABABABABA \ --backup-version 20120809T031314Z • Windows ユーザー: ruby elastic-mapreduce --jobflow j-ABABABABABA --hbase-restore -backup-dir s3://myawsbucket/backups/j-ABABABABABA --backup-version 20120809T031314Z HBase バックアップデータを新しいクラスターに設定するには CLI のステップ --create に --hbase-restore および --backup-directory を追加する場合、オ プションで --backup-version を指定してロードするバックアップディレクトリのバージョンを表 示できます。--backup-version の値を設定しない場合は、バックアップディレクトリにある最後 のバージョンがロードされます。これは、辞書順で最後にくる名前が付いているバージョンか、また はバージョン名がタイムスタンプに基づいている場合は、最新のバージョンになります。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドラインを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --name "My HBase Restored" \ --hbase --hbase-restore \ --backup-dir s3://myawsbucket/backups/j-ABABABABABA • Windows ユーザー: ruby elastic-mapreduce --create --name "My HBase Restored" --hbase -hbase-restore --backup-dir s3://myawsbucket/backups/j-ABABABABABA 652 Amazon EMR 開発者ガイド Hive オプションの使用 この例では、新しい HBase クラスターを作成し、s3://myawsbucket/backups/jABABABABABA にある指定したバージョンのデータをそのクラスターにロードしています。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --name "My HBase Restored" \ --hbase --hbase-restore \ --backup-dir s3://myawsbucket/backups/j-ABABABABABA \ --backup-version 20120809T031314Z • Windows ユーザー: ruby elastic-mapreduce --create --name "My HBase Restored" --hbase -hbase-restore --backup-dir s3://myawsbucket/backups/j-ABABABABABA -backup-version 20120809T031314Z Hive オプションの使用 --hive-interactive --create とともに使用され、Hive をインストールしてクラスターを起動します。 --hive-script HIVE_SCRIPT_LOCATION クラスターで実行される Hive スクリプトです。 --hive-site HIVE_SITE_LOCATION 指定された場所の hive-site.xml に設定値をインストールします。--hive-site パラメーターで オーバーライドされるのは、hive-site.xml に定義されている値だけです。 --hive-versions HIVE_VERSIONS ロードする Hive バージョンです。Hive バージョン番号を指定するか、最新バージョンをロード するには "latest" を指定します。複数の Hive バージョンを指定する場合は、バージョンをコンマ で区切ります。 変数値を Hive ステップに渡すには Amazon EMR CLI を使用してステップに Hive 変数値を渡すには、--args パラメーターを -d フラグ と共に入力します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --hive-script --arg s3://mybucket/script.q \ --args -d,LIB=s3://elasticmapreduce/samples/hive-ads/lib • Windows ユーザー: ruby elastic-mapreduce --hive-script --arg s3://mybucket/script.q --args -d,LIB=s3://elasticmapreduce/samples/hive-ads/lib クラスターの作成時に Hive の最新バージョンを指定するには --hive-versions オプションを使用し、latest キーワードを指定します。 653 Amazon EMR 開発者ガイド Hive オプションの使用 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドラインを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Test Hive" \ --num-instances 5 --instance-type m1.large \ --hive-interactive \ --hive-versions latest • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Test Hive" --numinstances 5 --instance-type m1.large --hive-interactive --hiveversions latest インタラクティブで Hive スクリプトも使用するクラスターに対して Hive のバージョンを指 定するには インタラクティブでスクリプトからも Hive を使用するクラスターがある場合は、用途ごとに Hive の バージョンを設定する必要があります。次の例では、インタラクティブとスクリプトの両方で Hive の バージョンを 0.7.1 に設定しています。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドラインを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --debug --log-uri s3://mybucket/logs/ \ --name "Testing m1.large AMI 1" \ --ami-version latest \ --instance-type m1.large --num-instances 5 \ --hive-interactive --hive-versions 0.7.1.2 \ --hive-script s3://mybucket/hive-script.hql --hive-versions 0.7.1.2 • Windows ユーザー: ruby elastic-mapreduce --create --debug --log-uri s3://mybucket/ logs/ --name "Testing m1.large AMI" --ami-version latest -instance-type m1.large --num-instances 5 --hive-interactive --hiveversions 0.7.1.2 --hive-script s3://mybucket/hive-script.hql --hiveversions 0.7.1.2 クラスターに複数のバージョンの Hive をロードするには この設定では、インストールされている任意のバージョンの Hive をクラスターで実行できます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドラインを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Test Hive" \ --num-instances 5 --instance-type m1.large \ --hive-interactive \ --hive-versions 0.5,0.7.1 • Windows ユーザー: 654 Amazon EMR 開発者ガイド Hive オプションの使用 ruby elastic-mapreduce --create --alive --name "Test Hive" --numinstances 5 --instance-type m1.large --hive-interactive --hiveversions 0.5,0.7.1 特定のバージョンの Hive を呼び出すには • 呼び出すバージョン番号を追加します。例えば、hive-0.5、hive-0.7.1 などとします。 Note 複数のバージョンの Hive をクラスターにロードしてある場合、hive を呼び出すと、デフォ ルトバージョンの Hive、またはクラスターの作成呼び出しで複数の --hive-versions オ プションを指定している場合は最後にロードされたバージョンにアクセスします。--hiveversions でカンマ区切り構文を使用して複数のバージョンをロードした場合、hive によっ てアクセスされるのはデフォルトバージョンの Hive です。 Note 複数のバージョンの Hive を同時に実行しているとき、すべてのバージョンの Hive は同じ データを読み取ることができます。ただし、メタデータを共有することはできません。複数 のバージョンの Hive で同じ場所に対して読み書きを実行するには、外部メタデータを使用し てください。 Hive のバージョンを表示するには このコマンドは、新しいバージョンの Hive にアップグレードした後でアップグレードが成功したかど うかを確認するため、または複数のバージョンの Hive を使用している場合に、現在実行中のバージョ ンを確認する必要があるときに便利です。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow JobFlowID --print-hive-version • Windows ユーザー: ruby elastic-mapreduce --jobflow JobFlowID --print-hive-version インタラクティブモードで Hive クラスターを起動するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドラインを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Hive cluster" \ --num-instances 5 --instance-type m1.large \ --hive-interactive • Windows ユーザー: 655 Amazon EMR 開発者ガイド Hive オプションの使用 ruby elastic-mapreduce --create --alive --name "Hive cluster" --numinstances 5 --instance-type m1.large --hive-interactive クラスターを起動して Hive ステップを送信するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --name "Test Hive" --ami-version 3.3 -hive-script \ s3://elasticmapreduce/samples/hive-ads/libs/model-build.q \ --args -d,LIBS=s3://elasticmapreduce/samples/hive-ads/libs,\ -d,INPUT=s3://elasticmapreduce/samples/hive-ads/tables,\ -d,OUTPUT=s3://mybucket/hive-ads/output/ • Windows ユーザー: ruby elastic-mapreduce --create --name "Test Hive" --ami-version 3.3 -hive-script s3://elasticmapreduce/samples/hive-ads/libs/model-build.q -args -d,LIBS=s3://elasticmapreduce/samples/hive-ads/libs,-d,INPUT=s3:// elasticmapreduce/samples/hive-ads/tables,-d,OUTPUT=s3://mybucket/hiveads/output/ デフォルトでは、このコマンドは 2 つのノードクラスター上で実行するクラスターを起動し ます。後で小さなサンプルデータセットでステップが適切に実行されると、クラスターを起動 して、複数のノードで実行することができます。ノード数とインスタンスタイプを指定するに は、--num-instances パラメーターと --instance-type パラメーターをそれぞれ指定して実 行します。 Amazon EMR CLI を使用して外部 Hive メタストアを作成するには • Amazon EMR CLI を使用して設定ファイルの場所を指定するには、Amazon EMR CLI をインス トールしたディレクトリで次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive \ --name "Hive cluster" \ --hive-interactive \ --hive-site=s3://mybucket/hive-site.xml • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Hive cluster" --hiveinteractive --hive-site=s3://mybucket/hive-site.xml --hive-site パラメーターは、設定値を hive-site.xml の規定の場所にインストールしま す。--hive-site パラメーターでオーバーライドされるのは、hive-site.xml に定義されてい る値だけです。 656 Amazon EMR 開発者ガイド Impala オプションの使用 インタラクティブに Hive ジョブを送信するには Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 1. Hive がまだインストールされていない場合は、次のコマンドを入力してインストールします。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce -–jobflow JobFlowID –-hive-interactive • Windows ユーザー: ruby elastic-mapreduce -–jobflow JobFlowID –-hive-interactive 2. 実行するクエリまたはコマンドを含む Hive スクリプトファイルを作成します。次の my-hive.q という名前のサンプルスクリプトでは、aTable と anotherTable という 2 つのテーブルを作成 し、aTable の内容を anotherTable にコピーして、すべてのデータを置き換えます。 ---- sample Hive script file: my-hive.q ---create table aTable (aColumn string) ; create table anotherTable like aTable; insert overwrite table anotherTable select * from aTable 3. 次のコマンドを入力し、--scp パラメーターを使用してローカルマシンからマスターノードにス クリプトをコピーします。--ssh パラメーターを使用して SSH 接続を作成し、Hive スクリプト を送信して処理します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce –-jobflow JobFlowID –-scp my-hive.q \ –-ssh “hive -f my-hive.q” • Windows ユーザー: ruby elastic-mapreduce –-jobflow JobFlowID –-scp my-hive.q –-ssh “hive f my-hive.q” Impala オプションの使用 --impala-conf OPTIONS --create および --impala-interactive オプションとともに使用し、Impala が解析するコマ ンドラインパラメーターを提供します。 パラメーターはキー/値のペアで、形式は "key1=value1,key2=value2,…" です。たとえば、Impala のスタートアップオプション IMPALA_BACKEND_PORT および IMPALA_MEM_LIMIT を設定す るには、以下のコマンドを使用します。 ./elastic-mapreduce --create --alive --instance-type m1.large -instance-count 3 --ami-version 3.0.2 --impala-interactive --impala-conf "IMPALA_BACKEND_PORT=22001,IMPALA_MEM_LIMIT=70%" --impala-interactive --create オプションとともに使用し、Impala がインストールされた Amazon EMR クラスター を起動します。 657 Amazon EMR 開発者ガイド ジョブフローの一覧とその説明を表示する --impala-output PATH --impala-script オプションとともに使用して、構文 --impala-output s3-path を使用 し、Impala のスクリプト出力を Amazon S3 バケットに保存します。 --impala-script [SCRIPT] --create オプションとともに使用して、クラスターにステップを追加し、構文 --impalascript s3-path を使用して Amazon S3 に保存されている Impala クエリファイルを実行しま す。以下に例を示します。 ./elastic-mapreduce --create --alive --instance-type m1.large --instancecount 3 --ami-version 3.0.2 --impala-script s3://my-bucket/script-name.sql --impala-output s3://my-bucket/ --impala-conf "IMPALA_MEM_LIMIT=50%" --impala-script を --create と使用するとき、--impala-version および --impalaconf オプションも機能します。クラスターを作成するときは、同じコマンドで --impalainteractive と --impala-script を使用することはできますが、必要はありません。効果は --impala-script のみを使用するときと同等です。 また、既存のクラスターにステップを追加することができますが、クラスターに Impala をインス トール済みであることが必要です。以下に例を示します。 ./elastic-mapreduce -j cluster-id --impala-script s3://mybucket/script---.sql --impala-output s3://my-bucket/ --impala-script を使用して、Impala がインストールされていないクラスターにステップを追 加する場合、「Error: Impala is not installed」と類似したエラーメッセージが表示されます。 --impala-version IMPALA_VERSION インストールする Impala のバージョン。 Impala をクラスターに追加するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --instance-type m1.large -instance-count 3 --ami-version 3.3 --impala-interactive --keypair keypair-name • Windows ユーザー: ruby elastic-mapreduce --create --alive --instance-type m1.large --instance-count 3 --ami-version 3.3 --impala-interactive --keypair keypair-name ジョブフローの一覧とその説明を表示する --active コマンドを変更して、RUNNING(実行中)、STARTING(開始中)、またはWAITING(待機 中)のクラスタのみにコマンドを適用します。--list とともに使用されます。 --all コマンドを変更して、ステータスに関わらず、すべてのクラスターのみに適用します。--list とともに使用され、過去 2 週間に作成されたすべてのクラスターをリストします。 658 Amazon EMR 開発者ガイド ジョブフローの一覧とその説明を表示する --created-after=DATETIME XML 日付 – 時刻形式で指定された時刻と日付の後に作成されたすべてのクラスターをリストしま す。 --created-before=DATETIME XML 日付 – 時刻形式で指定された時刻と日付の前に作成されたすべてのクラスターをリストしま す。 --describe 指定された 1 つまたは複数のクラスターに関する情報を返します。 --list 過去 2 日間に作成されたクラスターのリストです。 --no-steps クラスターがリストされるときに、CLI がステップをリストするのを防止します。 --print-hive-version 現在クラスターで有効な Hive のバージョンを印刷します。 --state JOB_FLOW_STATE クラスターの状態を指定します。クラスターの状態は、STARTING(開始中)、RUNNING(実 行中)、WAITING(待機中)、TERMINATED(終了)のいずれかの値です。 マスターノードのパブリック DNS 名を取得するには Amazon EMR CLI を使用して、マスターパブリック DNS を取得できます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --list • Windows ユーザー: ruby elastic-mapreduce --list 過去 2 日間に作成されたクラスターを一覧表示するには • 追加の引数を指定せずに次のように --list パラメーターを使用し、過去 2 日間に作成されたク ラスターを表示します。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --list • Windows ユーザー: ruby elastic-mapreduce --list 応答は次の例のようになります。 j-1YE2DN7RXJBWU FAILED CANCELLED Example Job Flow Custom Jar 659 Amazon EMR 開発者ガイド ジョブフローの一覧とその説明を表示する j-3GJ4FRRNKGY97 Example cluster j-5XXFIQS8PFNW 3/24 s1 COMPLETED ec2-67-202-3-73.compute-1.amazonaws.com COMPLETED ec2-67-202-51-30.compute-1.amazonaws.com COMPLETED Custom Jar demo 応答の例は、過去 2 日間に 3 つのクラスターが作成されたことを示しています。インデントされた行 はクラスターのステップです。クラスターの情報は、クラスター ID、クラスターの状態、マスター ノードの DNS 名、クラスター名の順に表示されます。クラスターステップに関する情報は、ステッ プの状態、ステップ名の順に表示されます。 過去 2 日間に作成されたクラスターがない場合、このコマンドでは何も出力されません。 アクティブなクラスターをリストするには • --list および --active パラメーターを次のように使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --list --active • Windows ユーザー: ruby elastic-mapreduce --list --active STARTING、RUNNING、または SHUTTING_DOWN 状態のクラスターのリストが応答に表示されま す。 実行中または終了したクラスターのみのリストを表示するには • --state パラメーターを次のように使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --list --state RUNNING --state TERMINATED • Windows ユーザー: ruby elastic-mapreduce --list --state RUNNING --state TERMINATED 実行中または終了したクラスターのリストが応答に表示されます。 クラスターに関する情報を表示するには クラスターについての情報を表示するには、--describe パラメーターを使用して、クラスター ID を指定します。 • --describe パラメーターを使用して、有効なクラスター ID を指定します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --describe --jobflow JobFlowID • Windows ユーザー: 660 Amazon EMR 開発者ガイド ステップへ引数を渡す ruby elastic-mapreduce --describe --jobflow JobFlowID Hadoop ジョブをインタラクティブに送信するには • Amazon EMR CLI を使用してインタラクティブに Hadoop ジョブを送信するには、--ssh パラ メーターを使用してマスターノードへの SSH 接続を作成し、実行するコマンドに対する値を設定 します。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。このコマ ンドは、--scp パラメーターを使用してローカルマシンからクラスター JobFlowID のマスター ノードに JAR ファイル myjar.jar をコピーし、SSH 接続を使用してコマンドを実行します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce –-jobflow JobFlowID –-scp myjar.jar –-ssh “hadoop jar myjar.jar” • Windows ユーザー: ruby elastic-mapreduce –-jobflow JobFlowID –-scp myjar.jar –-ssh “hadoop jar myjar.jar” ステップへ引数を渡す --arg ARG 単一の引数値をクラスター上で実行中のスクリプトまたはアプリケーションに渡します。 Note Hadoop ストリーミングクラスターで使用するとき、--arg オプションを使用する場合 は、--stream オプションの直後に使用する必要があります。 --args ARG1,ARG2,ARG3,... 複数の引数値をコンマで区切って、クラスター上で実行中のスクリプトまたはアプリケーション に渡します。これは、複数の --arg オプションを指定する場合の省略表現です。--args オプ ションは、コンマ文字(,)のエスケープをサポートしません。コンマ文字(,)を含む引数を渡す には、コンマを区切り記号と見なさない --arg オプションを使用します。引数文字列は、二重引 用符で囲むことができます。また、空白文字を含む引数を渡すときも二重引用符を使用します。 Note Hadoop ストリーミングクラスターで使用するとき、--args オプションを使用する場合 は、--stream オプションの直後に使用する必要があります。 --step-action ステップが終了したときにクラスターが実行すべきアクションを指定します。これ は、CANCEL_AND_WAIT、TERMINATE_JOB_FLOW、または CONTINUE のいずれかになります。 --step-name クラスターステップの名前を指定します。 661 Amazon EMR 開発者ガイド ステップへ引数を渡す このセクションでは、Amazon EMR CLI を使用してクラスターにステップを追加する方法について 説明します。実行中のクラスターにステップを追加できるのは、クラスターの作成時に --alive パ ラメーターを使用した場合に限ります。このパラメーターは、ステップの完了後もクラスターをアク ティブの状態で維持することによって、長時間稼働クラスターを作成します。 実行中のクラスターにカスタム JAR ステップを追加するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce -j JobFlowID \ --jar s3n://elasticmapreduce/samples/cloudburst/cloudburst.jar \ --arg s3n://elasticmapreduce/samples/cloudburst/input/s_suis.br \ --arg s3n://elasticmapreduce/samples/cloudburst/input/100k.br \ --arg hdfs:///cloudburst/output/1 \ --arg 36 --arg 3 --arg 0 --arg 1 --arg 240 --arg 48 --arg 24 --arg 24 --arg 128 --arg 16 • Windows ユーザー: ruby elastic-mapreduce -j JobFlowID --jar s3n://elasticmapreduce/ samples/cloudburst/cloudburst.jar --arg s3n://elasticmapreduce/samples/ cloudburst/input/s_suis.br --arg s3n://elasticmapreduce/samples/ cloudburst/input/100k.br --arg hdfs:///cloudburst/output/1 --arg 36 -arg 3 --arg 0 --arg 1 --arg 240 --arg 48 --arg 24 --arg 24 --arg 128 -arg 16 このコマンドは、JAR ファイルをダウンロードして実行するステップを追加します。引数 は、JAR ファイル内の main 関数に渡されます。JAR ファイルにマニフェストがない場合 は、--main-class オプションを使用して、JAR ファイルのメインクラスを指定します。 ステップを追加してスクリプトを実行するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "My Development Jobflow" \ --jar s3://elasticmapreduce/libs/script-runner/script-runner.jar \ --args "s3://mybucket/script-path/my_script.sh" • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "My Development Jobflow" --jar s3://elasticmapreduce/libs/script-runner/script-runner.jar -args "s3://mybucket/script-path/my_script.sh" このクラスターでは、ステップが処理されると my_script.sh というスクリプトがマスターノー ドで実行されます。 662 Amazon EMR 開発者ガイド Pig オプションの使用 Pig オプションの使用 --pig-interactive --create とともに使用され、Pig がインストールされたクラスターを起動します。 --pig-script PIG_SCRIPT_LOCATION クラスターで実行される Pig スクリプトです。 --pig-versions VERSION クラスターにインストールする Pig のバージョンを指定します。複数のバージョンの Pig を指定 する場合、バージョンをコンマで区切ります。 特定の Pig バージョンをクラスターに追加するには • --pig-versions パラメーターを使用します。次のコマンドラインの例では、Hadoop 1.0.3 お よび Pig 0.11.1 を実行するインタラクティブな Pig クラスターが作成されます。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Test Pig" \ --ami-version 2.3.6 \ --num-instances 5 --instance-type m1.large \ --pig-interactive \ --pig-versions 0.11.1 • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Test Pig" --amiversion 2.3.6 --num-instances 5 --instance-type m1.large --piginteractive --pig-versions 0.11.1 最新バージョンの Pig をクラスターに追加するには • --pig-versions パラメーターを使用し、latest キーワードを指定します。次のコマンドライ ンの例では、最新バージョンの Pig を実行するインタラクティブな Pig クラスターを作成してい ます。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Test Latest Pig" \ --ami-version 2.2 \ --num-instances 5 --instance-type m1.large \ --pig-interactive \ --pig-versions latest • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Test Latest Pig" --amiversion 2.2 --num-instances 5 --instance-type m1.large --pig-interactive --pig-versions latest 663 Amazon EMR 開発者ガイド Pig オプションの使用 複数のバージョンの Pig をクラスターに追加するには • --pig-versions パラメーターを使用し、バージョン番号をカンマで区切ります。次のコマンド ラインの例では、Hadoop 0.20.205 および Pig 0.9.1 と Pig 0.9.2 を実行するインタラクティブな Pig ジョブフローを作成しています。この設定により、クラスターでどちらのバージョンの Pig も使用できます。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Test Pig" \ --ami-version 2.0 \ --num-instances 5 --instance-type m1.large \ --pig-interactive \ --pig-versions 0.9.1,0.9.2 • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Test Pig" --amiversion 2.0 --num-instances 5 --instance-type m1.large --pig-interactive --pig-versions 0.9.1,0.9.2 1 つのクラスターに複数のバージョンの Pig をロードした場合、Pig を呼び出すとデフォルトのバー ジョンの Pig、または クラスターの作成呼び出しで --pig-versions パラメーターが指定されてい ると最後にロードされたバージョンがアクセスされます。--pig-versions でカンマ区切りのシン タックスを使用して複数のバージョンをロードした場合、Pig によってアクセスされるのはデフォル トバージョンです。 特定のバージョンの Pig をクラスターで実行するには • 呼び出すバージョン番号を追加します。例えば、pig-0.11.1、pig-0.9.2 などです。これを行 うには、例えばインタラクティブな Pig クラスターで SSH を使用してマスターノードに接続し、 端末から次のようなコマンドを実行します。 pig-0.9.2 インタラクティブモードで Pig を実行するには Pig をインタラクティブモードで実行するには、--pig-interactive パラメーターと共に --alive パラメーターを使用して、長時間稼働クラスターを作成します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Testing Pig" \ --num-instances 5 --instance-type m1.large \ --pig-interactive • Windows ユーザー: 664 Amazon EMR 開発者ガイド ステップアクションの指定 ruby elastic-mapreduce --create --alive --name "Testing Pig" --numinstances 5 --instance-type m1.large --pig-interactive クラスターに Pig を追加し、Pig ステップを送信するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --name "Test Pig" \ --pig-script s3://elasticmapreduce/samples/pig-apache/do-reports2.pig \ --ami-version 2.0 \ --args "-p,INPUT=s3://elasticmapreduce/samples/pig-apache/input, \ -p,OUTPUT=s3://mybucket/pig-apache/output" • Windows ユーザー: ruby elastic-mapreduce --create --name "Test Pig" --pig-script s3:// elasticmapreduce/samples/pig-apache/do-reports2.pig --ami-version 2.0 --args "-p,INPUT=s3://elasticmapreduce/samples/pig-apache/input, p,OUTPUT=s3://mybucket/pig-apache/output" デフォルトでは、このコマンドは単一ノードクラスターを起動します。後で小さなサンプルデータ セットでステップが適切に実行されると、クラスターを起動して、複数のノードで実行することが できます。ノード数とインスタンスタイプを指定するには、--num-instances パラメーターと -instance-type パラメーターをそれぞれ指定して実行します。 ステップアクションの指定 --enable-debugging --create とともに使用されて、デバッグを有効にしてクラスターを起動します。 --script SCRIPT_LOCATION スクリプトの場所を指定します。通常、スクリプトは Amazon S3 バケットに格納されます。 --wait-for-steps ステップが完了するまで、クラスターを待機させます。 Amazon EMR CLI を使用してクラスターにステップを送信するとき、待機中のすべてのステップが完 了するまで次のコマンドの受け入れを待機するように、CLI に対して指定することができます。これ は、例えば、あるステップで Amazon S3 から HDFS にデータをコピーし、コピー操作が完了したこ とを確認するまでクラスター内の次のステップの実行を待つ必要があるときに役立ちます。これを行 うには、コピーを行うステップを送信した後で --wait-for-steps パラメーターを指定します。 Note AWS CLI には、--wait-for-steps パラメーターと同等のオプションはありません。 --wait-for-steps パラメーターは、ステップが正常に完了することを保証するわけではありませ ん。ステップの実行が終了したことを確認するだけです。前の例では、次のステップを送信する前 に、クラスターのステータスをチェックしてステップが成功したことを確認する必要があります。ス テップが失敗すると、クラスターのステータスは FAILED になります。 665 Amazon EMR 開発者ガイド ステップアクションの指定 クラスターにステップを追加するときに同じ CLI コマンドで --wait-for-steps パラメーターを追 加することもできますが、別の CLI コマンドで追加することをお勧めします。それにより、ステップ が作成された後で --wait-for-steps 引数が解析および適用されることが保証されます。 ステップが完了するまで待機するには • --wait-for-steps パラメーターをクラスターに追加します。これを次の例に示しま す。JobFlowID は、クラスターの作成時に Amazon EMR から返されるクラスターの識別子で す。CLI コマンドで指定される JAR、main クラス、および引数は、単語数を数えるサンプルアプ リケーションのものです。このコマンドでは、クラスターにステップを追加しています。2 つ目 の CLI コマンドは、現在処理待ちのすべてのステップが完了するまで、クラスターが次のコマン ドを受け入れるのを待機させます。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce -j JobFlowID \ --jar s3n://elasticmapreduce/samples/cloudburst/cloudburst.jar \ --main-class org.myorg.WordCount \ --arg s3n://elasticmapreduce/samples/cloudburst/input/s_suis.br \ --arg s3n://elasticmapreduce/samples/cloudburst/input/100k.br \ --arg hdfs:///cloudburst/output/1 \ --arg 36 --arg 3 --arg 0 --arg 1 --arg 240 --arg 48 --arg 24 --arg 24 --arg 128 --arg 16 ./elastic-mapreduce -j JobFlowID --wait-for-steps • Windows ユーザー: ruby elastic-mapreduce -j JobFlowID --jar s3n://elasticmapreduce/ samples/cloudburst/cloudburst.jar --main-class org.myorg.WordCount -arg s3n://elasticmapreduce/samples/cloudburst/input/s_suis.br --arg s3n://elasticmapreduce/samples/cloudburst/input/100k.br --arg hdfs:/// cloudburst/output/1 --arg 36 --arg 3 --arg 0 --arg 1 --arg 240 --arg 48 --arg 24 --arg 24 --arg 128 --arg 16 ruby elastic-mapreduce -j JobFlowID --wait-for-steps デバッグツールを有効にするには • クラスターを作成するときに --enable-debugging 引数を使用します。Amazon S3 へ のログファイルのアーカイブはデバッグツールを使用するための前提条件であるので、-log-uri 引数を設定し、Amazon S3 内の場所を指定することも必要です。あるいは、CLI 用に構成した credentials.json ファイルに --log-uri 値を設定してもかまいませ ん。credentials.json の詳細については、「Amazon EMR コマンドラインインターフェ イスのインストール (廃止) (p. 619)」の「Configuring Credentials」を参照してください。 次の例に、ログファイルを Amazon S3 にアーカイブするクラスターの作成について示しま す。mybucket をバケットの名前に置き換えます。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --enable-debugging \ --log-uri s3://mybucket • Windows ユーザー: 666 Amazon EMR 開発者ガイド ブートストラップアクションを指定する ruby elastic-mapreduce --create --enable-debugging --log-uri s3://mybucket ブートストラップアクションを指定する --bootstrap-action LOCATION_OF_bootstrap_ACTION_SCRIPT --create とともに使用され、クラスターの起動時に実行するブートストラップアクションを指 定します。通常、ブートストラップアクションスクリプトのロケーションは、Amazon S3 内のロ ケーションです。クラスターには複数のブートストラップアクションを追加できます。 --bootstrap-name bootstrap_NAME ブートストラップアクションの名前を設定します。 --args "arg1,arg2" ブートストラップアクションの引数を指定します。 ブートストラップアクションを使用して Ganglia をクラスターに追加するには • Amazon EMR CLI で新しいクラスターを作成する場合、以下のパラメーターをクラスターの呼び 出しに追加することで Ganglia ブートストラップアクションを指定することができます。 --bootstrap-action s3://elasticmapreduce/bootstrap-actions/install-ganglia 以下のコマンドは、新しいクラスターを開始する際に指定する bootstrap-action パラメーターの 例です。この例では、Amazon EMR が提供するワードカウントのサンプルクラスターを開始し、3 つ のインスタンスを起動します。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 Note Hadoop ストリーミングの構文は Hadoop 1.x と Hadoop 2.x で異なります。 Hadoop 2.x には、次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --ami-version 3.0.3 --instancetype m1.xlarge \ --num-instances 3 --stream --arg "-files" --arg "s3://elasticmapreduce/ samples/wordcount/wordSplitter.py" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/install-ganglia --input s3://elasticmapreduce/samples/wordcount/input \ --output s3://mybucket/output/2014-01-16 --mapper wordSplitter.py -reducer aggregate • Windows ユーザー: ruby elastic-mapreduce --create --alive --ami-version 3.0.3 --instancetype m1.xlarge --num-instances 3 --stream --arg "-files" --arg "s3:// elasticmapreduce/samples/wordcount/wordSplitter.py" --bootstrapaction s3://elasticmapreduce/bootstrap-actions/install-ganglia -- 667 Amazon EMR 開発者ガイド ブートストラップアクションを指定する input s3://elasticmapreduce/samples/wordcount/input --output s3://mybucket/ output/2014-01-16 --mapper wordSplitter.py --reducer aggregate Hadoop 1.x には、次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --instance-type m1.xlarge --numinstances 3 \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/install-ganglia --stream \ --input s3://elasticmapreduce/samples/wordcount/input \ --output s3://mybucket/output/2014-01-16 \ --mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py -reducer aggregate • Windows ユーザー: ruby elastic-mapreduce --create --alive --instance-type m1.xlarge -num-instances 3 --bootstrap-action s3://elasticmapreduce/bootstrapactions/install-ganglia --stream --input s3://elasticmapreduce/samples/ wordcount/input --output s3://mybucket/output/2014-01-16 --mapper s3:// elasticmapreduce/samples/wordcount/wordSplitter.py --reducer aggregate ブートストラップアクションを使用して NameNode ヒープサイズを設定するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configuredaemons \ --args --namenode-heap-size=2048,--namenode-opts=-XX:GCTimeRatio=19 • Windows: ruby elastic-mapreduce --create --alive --bootstrap-action s3:// elasticmapreduce/bootstrap-actions/configure-daemons --args --namenodeheap-size=2048,--namenode-opts=-XX:GCTimeRatio=19 ブートストラップアクションを使用してマップタスクの最大数を変更するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --args "-M,s3://mybucket/config.xml,m,mapred.tasktracker.map.tasks.maximum=2" 668 Amazon EMR 開発者ガイド ブートストラップアクションを指定する • Windows: ruby elastic-mapreduce --create --bootstrap-action s3:// elasticmapreduce/bootstrap-actions/configure-hadoop --args "-M,s3:// myawsbucket/config.xml,-m,mapred.tasktracker.map.tasks.maximum=2" ブートストラップアクションを使用してコマンドを条件付きで実行するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。--args パ ラメーターのオプションの引数はコンマで区切られることに注意してください。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/run-if \ --args "instance.isMaster=true,echo running on master node" • Windows: ruby elastic-mapreduce --create --alive --bootstrapaction s3://elasticmapreduce/bootstrap-actions/run-if -args "instance.isMaster=true,echo running on master node" カスタムブートストラップアクションでクラスターを作成するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --bootstrap-action "s3:// elasticmapreduce/bootstrap-actions/download.sh" • Windows: ruby elastic-mapreduce --create --alive --bootstrap-action "s3:// elasticmapreduce/bootstrap-actions/download.sh" ブートストラップアクションで instance.json の設定を読み取るには この手順では、run-if ブートストラップアクションを使用してコマンドライン関数 echo を実行 し、instance.json ファイル内の JSON ファイルパラメーター instance.isMaster を評価して 文字列 running on master node を表示する方法を示します。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "RunIf" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/run-if \ --bootstrap-name "Run only on master" \ --args "instance.isMaster=true,echo,’Running on master node’" • Windows ユーザー: 669 Amazon EMR 開発者ガイド ブートストラップアクションを指定する ruby elastic-mapreduce --create --alive --name "RunIf" --bootstrapaction s3://elasticmapreduce/bootstrap-actions/run-if --bootstrapname "Run only on master" --args "instance.isMaster=true,echo,’Running on master node’" ブートストラップアクションを使用して JVM の設定を修正するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "JVM infinite reuse" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --bootstrap-name "Configuring infinite JVM reuse" \ --args "-m,mapred.job.reuse.jvm.num.tasks=-1" • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "JVM infinite reuse" --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop --bootstrap-name "Configuring infinite JVM reuse" --args "m,mapred.job.reuse.jvm.num.tasks=-1" Note Amazon EMR は mapred.job.reuse.jvm.num.tasks の値を 20 に設定しますが、これは ブートスラップアクションによってオーバーライドすることができます。値を -1 にすると 1 つのジョブ内でいつまでも再利用が行われ、1 にするとタスクは再利用されません。 ブートストラップアクションを使用してリデューサーの投機的実行を無効にするには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Reducer speculative execution" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --bootstrap-name "Disable reducer speculative execution" \ --args "-m,mapred.reduce.tasks.speculative.execution=false" • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Reducer speculative execution" --bootstrap-action s3://elasticmapreduce/bootstrapactions/configure-hadoop --bootstrap-name "Disable reducer speculative execution" --args "-m,mapred.reduce.tasks.speculative.execution=false" 670 Amazon EMR 開発者ガイド ブートストラップアクションを指定する ブートストラップアクションを使用して中間圧縮を無効にするか圧縮コーデックを変更するに は • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力し ます。中間圧縮を無効にするには、mapred.compress.map.output=false を使用します。圧縮コーデックを Gzip に変更するに は、mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec を使用します。両方の引数が、下に示されています。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Disable compression" \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --bootstrap-name "Disable compression" \ --args "-m,mapred.compress.map.output=false" \ --args "m,mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Disable compression" --bootstrap-action s3://elasticmapreduce/bootstrapactions/configure-hadoop --bootstrap-name "Disable compression" --args "-m,mapred.compress.map.output=false" --args "m,mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec" ブートストラップアクションを使用して mapred.max.tracker.failures パラメーターを増やすに は 次の例は、クラスターを起動し、ブートストラップアクションを利用して mapred.max.tracker.failures の値をデフォルトの 4 ではなく、7 に設定する方法を示したもの です。これにより、TaskTracker ノードがブラックリストに登録される問題をトラブルシューティン グできます。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --name "Modified mapred.max.tracker.failures" \ --num-instances 2 --slave-instance-type m1.large --master-instancetype m1.large \ --key-pair mykeypair --debug --log-uri s3://mybucket/logs \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --bootstrap-name "Modified mapred.max.tracker.failures" \ --args "-m,mapred.max.tracker.failures=7" • Windows ユーザー: ruby elastic-mapreduce --create --alive --name "Modified mapred.max.tracker.failures" --num-instances 2 --slaveinstance-type m1.large --master-instance-type m1.large --keypair mykeypair --debug --log-uri s3://mybucket/logs --bootstrapaction s3://elasticmapreduce/bootstrap-actions/configure-hadoop -671 Amazon EMR 開発者ガイド タグ付け bootstrap-name "Modified mapred.max.tracker.failures" --args "m,mapred.max.tracker.failures=7" ブートストラップアクションを使用して S3 マルチパートアップロードを無効にするには この手順では、Amazon EMR CLI を使用してマルチパートアップロードを無効にする方法を説明しま す。コマンドにより、マルチパートアップロードが無効にされた待機状態でクラスターが作成されま す。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive \ --bootstrap-action s3://elasticmapreduce/bootstrap-actions/configurehadoop \ --bootstrap-name "enable multipart upload" \ --args "-c,fs.s3n.multipart.uploads.enabled=false" • Windows ユーザー: ruby elastic-mapreduce --create --alive --bootstrapaction s3://elasticmapreduce/bootstrap-actions/configurehadoop --bootstrap-name "enable multipart upload" --args "c,fs.s3n.multipart.uploads.enabled=false" このクラスターは、終了するまで WAITING 状態のままです。 タグ付け --tag Amazon EMR リソースと関連するタグを管理します。 新しいクラスターを作成しているときにタグを追加するには 次の例は、Amazon EMR CLI を使用して新しいクラスターにタグを追加する方法を示しています。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --tag "costCenter=marketing" • Windows ユーザー: ruby elastic-mapreduce --create --tag "costCenter=marketing" 実行中のクラスターにタグを追加するには 次の例は、Amazon EMR CLI を使用して実行中のクラスターに 2 つのタグを追加する方法を示し ています。1 つのタグには production という名前で値のないキーがあり、もう 1 つのタグには costCenter という名前で [marketing] という値があるキーがあります。 672 Amazon EMR 開発者ガイド タグ付け • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --add-tags j-1234567890123 --tag production --tag "costCenter=marketing" • Windows ユーザー: ruby elastic-mapreduce --add-tags j-1234567890123 --tag production --tag "costCenter=marketing" Note タグに 1 つしかキーがない場合、引用符は不要です。 コマンドが正常に完了した場合、出力は次のようになります。 TAG TAG cluster cluster j-1234567890123 j-1234567890123 production costCenter marketing また、スペースで区切られた複数のクラスター識別子を指定することにより、同じタグを複数の クラスターに追加できます。例: ./elastic-mapreduce --add-tags j-1234567890123 j-9876543210987 -tag production --tag "costCenter=marketing" クラスターのタグを表示するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow "j-1234567890123" --list-tags • Windows ユーザー: ruby elastic-mapreduce --jobflow "j-1234567890123" --list-tags 出力では、次のように、クラスターに関するすべてのタグ情報が表示されます。 Key: id Key: costCenter Value: 2785 Value: marketing クラスターからタグを削除するには 次の例は、Amazon EMR CLI を使用してクラスターから 1 つのタグを削除する方法を示しています。 • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 673 Amazon EMR 開発者ガイド ジョブフローの終了 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --remove-tags j-1234567890123 --tag "costCenter=marketing" • Windows ユーザー: ruby elastic-mapreduce --remove-tags j-1234567890123 --tag "costCenter=marketing" また、次の例に示されているように、クラスターの識別子のみを指定することにより、クラス ターからすべてのタグを削除できます。 ./elastic-mapreduce --remove-tags j-1234567890123 また、次の例に示されているように、値が重要ではない場合、引用符なしでキー名のみを使用し て、クラスターからタグを削除できます。 ./elastic-mapreduce --remove-tags j-1234567890123 --tag costCenter ジョブフローの終了 --set-termination-protection TERMINATION_PROTECTION_STATE 1 つまたは複数のクラスターで終了保護を有効または無効にします。終了保護を有効にするに は、この値を true に設定します。終了保護を無効にするには、この値を false に設定します。 --terminate 指定された 1 つまたは複数のクラスターを終了します。 新しいクラスターの終了保護を設定するには • Amazon EMR CLI を使用して終了保護を有効にするには、クラスター作成の呼び出し中に -set-termination-protection true を指定します。パラメーターを使用しない場合、終了保 護は無効になります。「--set-termination-protection false」と入力して保護を無効に することもできます。次の例では、WordCount サンプルアプリケーションを実行しているクラス ターの終了保護を設定しています。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 Note 次の例に示す Hadoop ストリーミング構文は Hadoop 1.x と Hadoop 2.x. 間で異なりま す。 Hadoop 2.x には、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive --ami-version 3.0.3 \ --instance-type m1.xlarge --num-instances 2 \ 674 Amazon EMR 開発者ガイド ジョブフローの終了 --stream --arg "-files" --arg "s3://elasticmapreduce/samples/wordcount/ wordSplitter.py" \ --input s3://elasticmapreduce/samples/wordcount/input \ --output s3://mybucket/output/2014-01-16 --mapper wordSplitter.py -reducer aggregate \ --set-termination-protection true • Windows ユーザー: ruby elastic-mapreduce --create --alive --ami-version 3.0.3 --instancetype m1.xlarge --num-instances 2 --stream --arg "-files" --arg "s3:// elasticmapreduce/samples/wordcount/wordSplitter.py" --input s3:// elasticmapreduce/samples/wordcount/input --output s3://mybucket/ output/2014-01-16 --mapper wordSplitter.py --reducer aggregate --settermination-protection true Hadoop 1.x には、次のコマンドを使用します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --create --alive / --instance-type m1.xlarge --num-instances 2 --stream / --input s3://elasticmapreduce/samples/wordcount/input / --output s3://myawsbucket/wordcount/output/2011-03-25 / --mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py -reducer aggregate / --set-termination-protection true • Windows ユーザー: ruby elastic-mapreduce --create --alive --instance-type m1.xlarge --num-instances 2 --stream --input s3://elasticmapreduce/samples/ wordcount/input --output s3://myawsbucket/wordcount/output/2011-03-25 --mapper s3://elasticmapreduce/samples/wordcount/wordSplitter.py -reducer aggregate --set-termination-protection true 実行中のクラスターの終了保護を設定するには • --set-termination-protection フラグを true に設定します。次に例を示します。この例の JobFlowID は、終了保護を有効にするクラスターの識別子です。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --set-termination-protection true -jobflow JobFlowID • Windows ユーザー: ruby elastic-mapreduce --set-termination-protection true -jobflow JobFlowID 675 Amazon EMR 開発者ガイド S3DistCp の使用 保護されていないクラスターを終了するには Amazon EMR CLI を使用して保護されていないクラスターを終了するには、--terminate パラメー ターを入力し、終了するクラスターを指定します。 • Amazon EMR CLI をインストールしたディレクトリで、コマンドから次のように入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --terminate JobFlowID • Windows ユーザー: ruby elastic-mapreduce --terminate JobFlowID 保護されたクラスターを終了するには 1. --set-termination-protection パラメーターを false に設定して、終了保護を無効にしま す。次に例を示します。この例の JobFlowID は、終了保護を無効にするクラスターの識別子で す。 elastic-mapreduce --set-termination-protection false --jobflow JobFlowID 2. --terminate パラメーターと、終了するクラスターのクラスター識別子を使用してクラスター を終了します。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --terminate JobFlowID • Windows ユーザー: ruby elastic-mapreduce --terminate JobFlowID S3DistCp の使用 S3DistCp を呼び出すときに、S3DistCp によるデータのコピーおよび圧縮方法の変更オプションを指 定できます。S3DistCp で使用できるオプションの詳細については、「DistCp のオプション (p. 387)」 を参照してください。 S3DistCp ステップをクラスターに追加するには • S3DistCp を呼び出すステップをクラスターに追加し、S3DistCp によるコピーオペレーションの 実行方法を指定するパラメーターを渡します。 次の例では、デーモンログを Amazon S3 から hdfs:///output にコピーします。 この例の CLI コマンド: • --jobflow は、コピーステップの追加先クラスターを指定します。 • --jar は、S3DistCp JAR ファイルのロケーションです。 • --args は、S3DistCp に渡すオプション名/値ペアのカンマ区切りのリストです。使用可能なオ プションの完全なリストについては、「DistCp のオプション (p. 387)」を参照してください。 676 Amazon EMR 開発者ガイド S3DistCp の使用 複数の --arg パラメーターを使用して、オプションを個別に指定することもできます。両方の 形式を以下の例に示します。 --args または --arg のいずれかの構文を使用して、オプションをクラスターステップに渡す ことができます。--args パラメーターは、複数の --arg パラメーターを一度に渡すときに便利 です。このパラメーターは、解析のためにカンマ(,)を使って渡された文字列を引数に分割しま す。次の例は、この構文を示しています。--args で渡された値が引用符(')で囲まれているこ とに注意してください。これにより、任意の正規表現に含まれるアスタリスク(*)やその他の特 殊文字が、Linux シェルによって拡張されなくなります。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow JobFlowID --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --args 'S3DistCp-OptionName1,S3DistCp-OptionValue1, \ S3DistCp-OptionName2,S3DistCp-OptionValue2,\ S3DistCp-OptionName3,S3DistCp-OptionValue3' • Windows ユーザー: ruby elastic-mapreduce --jobflow JobFlowID --jar /home/hadoop/ lib/emr-s3distcp-1.0.jar --args "S3DistCp-OptionName1,S3DistCpOptionValue1,S3DistCp-OptionName2,S3DistCp-OptionValue2,S3DistCpOptionName3,S3DistCp-OptionValue3" S3DistCp オプションの値にカンマが含まれている場合は --args を使用できないので、個別に --arg パラメーターを使用して、S3DistCp オプションの名前と値を渡す必要があります。--src 引数と --dest 引数のみが必須です。また、オプション値が引用符(')で囲まれていることに注 意してください。これにより、任意の正規表現に含まれるアスタリスク(*)やその他の特殊文字 が、Linux シェルによって拡張されなくなります。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow JobFlowID --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --arg S3DistCp-OptionName1 --arg 'S3DistCp-OptionValue1' \ --arg S3DistCp-OptionName2 --arg 'S3DistCp-OptionValue2' \ --arg S3DistCp-OptionName3 --arg 'S3DistCp-OptionValue3' • Windows ユーザー: ruby elastic-mapreduce --jobflow JobFlowID --jar /home/hadoop/lib/ emr-s3distcp-1.0.jar --arg "S3DistCp-OptionName1" --arg "S3DistCpOptionValue1" --arg "S3DistCp-OptionName2" --arg "S3DistCp-OptionValue2" --arg "S3DistCp-OptionName3" --arg "S3DistCp-OptionValue3" 677 Amazon EMR 開発者ガイド S3DistCp の使用 Example コンマを含むオプション値を指定する この例では、--srcPattern が '.*[a-zA-Z,]+' に設定されます。--srcPattern 正規表現にカン マが含まれているので、個別の --arg パラメーターを使用する必要があります。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-3GYXXXXXX9IOJ --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --arg --s3Endpoint --arg 's3-eu-west-1.amazonaws.com' \ --arg --src --arg 's3://myawsbucket/logs/j-3GYXXXXXX9IOJ/node/' \ --arg --dest --arg 'hdfs:///output' \ --arg --srcPattern --arg '.*[a-zA-Z,]+' • Windows ユーザー: ruby elastic-mapreduce --jobflow j-3GYXXXXXX9IOJ --jar /home/hadoop/lib/emrs3distcp-1.0.jar --arg --s3Endpoint --arg "s3-eu-west-1.amazonaws.com" --arg --src --arg "s3://myawsbucket/logs/j-3GYXXXXXX9IOJ/node/" --arg --dest -arg "hdfs:///output" --arg --srcPattern --arg ".*[a-zA-Z,]+" Example Amazon S3 からのログファイルを HDFS へコピーする この例では、Amazon S3 バケットに格納されたログファイルを HDFS へコピーする方法を示しま す。この例では、--srcPattern オプションを使用して、デーモンログにコピーされたデータを制限 しています。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-3GYXXXXXX9IOJ --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --args '--src,s3://mybucket/logs/j-3GYXXXXXX9IOJ/node/,--dest,hdfs:/// output,--srcPattern,.*daemons.*-hadoop-.*' • Windows ユーザー: ruby elastic-mapreduce --jobflow j-3GYXXXXXX9IOJ --jar /home/hadoop/lib/ emr-s3distcp-1.0.jar --args "--src,s3://myawsbucket/logs/j-3GY8JC4179IOJ/ node/,--dest,hdfs:///output,--srcPattern,.*daemons.*-hadoop-.*" 678 Amazon EMR 開発者ガイド S3DistCp の使用 Example Amazon CloudFront ログを HDFS に読み込む この例では、Amazon CloudFront ログを HDFS に読み込みます。このプロセスでは、圧縮フォーマッ トを Gzip(CloudFront のデフォルト)から LZO に変更します。LZO を使用して圧縮されたデータは 解凍時に複数のマップに分割できるので便利です。Gzip のように、圧縮が完了するのを待つ必要は ありません。これにより、Amazon EMR を使用してデータを分析するときのパフォーマンスが改善 します。また、この例では、--groupBy オプションで指定されている正規表現を使用して、指定さ れた時間のすべてのログを 1 つのファイルにまとめることによっても、パフォーマンスが向上してい ます。Amazon EMR クラスターは、小さな Gzip 圧縮ファイルを多数処理するよりも、大きな数個の LZO 圧縮ファイルを処理する方が効率的に動作します。LZO ファイルを分割するには、それらのイン デックスを作成して、hadoop-lzo サードパーティ製のライブラリを使用する必要があります。詳細に ついては、「圧縮ファイルの処理方法 (p. 172)」を参照してください。 Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --jobflow j-3GYXXXXXX9IOK --jar \ /home/hadoop/lib/emr-s3distcp-1.0.jar \ --args '--src,s3://mybucket/cf,--dest,hdfs:///local,-groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*,--targetSize,128,-outputCodec,lzo,--deleteOnSuccess' • Windows ユーザー: ruby elastic-mapreduce --jobflow j-3GYXXXXXX9IOK --jar /home/hadoop/lib/emrs3distcp-1.0.jar --args "--src,s3://myawsbucket/cf,--dest,hdfs:///local,-groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*,--targetSize,128,-outputCodec,lzo,--deleteOnSuccess" 前述の例が、次の CloudFront ログファイルで実行された場合を考えてみてください。 s3://myawsbucket/cf/XABCD12345678.2012-02-23-01.HLUS3JKx.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-01.I9CNAZrg.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-02.YRRwERSA.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-02.dshVLXFE.gz s3://myawsbucket/cf/XABCD12345678.2012-02-23-02.LpLfuShd.gz S3DistCp は、ファイルを、次の 2 つのファイルにコピー、統合、および圧縮します。ファイル名は、 正規表現で一致した内容によって決まります。 hdfs:///local/2012-02-23-01.lzo hdfs:///local/2012-02-23-02.lzo 679 Amazon EMR 開発者ガイド AWS EMR コマンドラインイン ターフェイスのリリース(廃止) AWS EMR コマンドラインインターフェイスのリ リース(廃止) Note Amazon EMR CLI は機能の開発が完了しています。代わりに AWS CLI で Amazon EMR のコ マンドを使用することをお勧めします。 以下のテーブルは、Amazon EMR CLI バージョンのリリースと変更内容をリストします。Amazon EMR CLI は、バージョン番号としてリリース日を使用します。 リリース日 説明 2014-05-15 --ec2-instance-ids-to-terminate オプションを追 加しました。CLI での Signature Version 4 による署名のサ ポートを追加しました。セキュリティの問題を修正しまし た。 2013-12-10 Amazon EMR. で Impala のサポートを追加します。詳細に ついては、「Impala (p. 286)」を参照してください。 2013-12-02 Amazon EMR タグのサポートを追加します。詳細について は、「Amazon EMR クラスターにタグを付ける (p. 217)」 を参照してください。 2013-10-07 バージョンを指定した HBase パスを、バージョンを指定 しない symlink で置き換え、HBase を Hadoop 1.x および Hadoop 2.x の両方にインストールおよび使用できるように します。 2013-07-08 ハードコーディングされた Pig バージョン番号を無視し、 誤って最新の Pig バージョンを使用するバグを修正しま す。 2013-03-19 カスタムユーザー引数を受け付ける新しい --supportedproduct パラメーターによる、サードパーティアプリケー ションのクラスター起動のサポートの向上。 2012-12-17 IAM ロールのサポートを追加。 2012-09-18 --visible-to-all-users および --set-visible-toall-users フラグの立った IAM ユーザー用クラスターの 可視化設定のサポートを追加。 2012-08-22 SSL 証明書認証の向上。 2012-07-30 Hadoop 1.0.3 のサポートを追加。 2012-07-09 メジャーおよびマイナーの AMI バージョンの指定、および これらの指定と一致し、最新パッチを含む AIM の自動取得 のサポートを追加します。 2012-06-12 HBase および MapR のサポートを追加します。 2012-04-09 Pig 0.9.1、Pig バージョニング、および Hive 0.7.1.4 のサ ポートを追加します。 2012-03-13 Hive 0.7.1.3 のサポートを追加します。 680 Amazon EMR 開発者ガイド AWS EMR コマンドラインイン ターフェイスのリリース(廃止) リリース日 説明 2012-02-28 Hive 0.7.1.2 のサポートを追加します。 2011-12-08 アマゾンマシンイメージ(AMI)バージョニング、Hadoop 0.20.205、Hive 0.7.1、および Pig 0.9.1 のサポートを追加 します。デフォルトの AMI バージョンは、使用可能な最新 の AMI バージョンです。 2011-11-30 Elastic IP アドレスのサポートを修正します。 2011-08-08 スポットインスタンス上で実行中のクラスターのサポート を追加します。 2011-01-24 --json コマンド処理およびリストオプションのバグを修 正します。 2011-12-08 Hive 0.7 のサポートを追加します。 2011-11-11 カスタム jar ステップに対する、Pig 引数と Hive 引数、お よび --main-class 因数の処理の問題を修正します。 2011-10-19 実行中のクラスターのサイズ変更のサポートを追加しま す。整合性を改善しユニットテストができるように、処理 引数を変更。 2011-09-16 Amazon EMR からファイルをフェッチするサポートを追加 します。 2011-06-02 Hadoop 0.20、Hive 0.5、および Pig 0.6 のサポートを追加 します。 2011-04-07 ブートストラップアクションのサポートを追加します。 現在インストールされている Amazon EMR CLI のバージョンを表示するには • Amazon EMR CLI をインストールしたディレクトリで、次のコマンドを入力します。 • Linux、UNIX、Mac OS X ユーザー: ./elastic-mapreduce --version • Windows ユーザー: ruby elastic-mapreduce --version CLI が正しくインストールされ、認証情報が適切に設定されていれば、CLI のバージョン番号が 日付形式で表示されます。出力は次の例のようになります: Version 2012-12-17 681 Amazon EMR 開発者ガイド ドキュメント履歴 次の表に、Amazon EMR(Amazon EMR)の前回のリリース以後に行われた、文書の重要な変更を示 します。 API バージョン: 2009-03-31 文書の最終更新: 2015 年 6 月 16 日 変更 説明 リリース日 Apache Spark のサ ポート Amazon EMR により、Apache Spark がネイティブ でサポートされます。詳細については、「Apache Spark (p. 275)」を参照してください。 2015 年 6 月 16 日 AMI 3.8.0 Amazon EMR による AMI 3.8.0 のサポート。詳細につ 2015 年 6 月 10 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 3.7.0 Amazon EMR による AMI 3.7.0 のサポート。詳細につ 2015 年 4 月 21 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 D2 インスタンス 次世代の Amazon EC2 高密度ストレージインスタンス をサポートします。詳細については、『Linux インスタ ンス用 Amazon EC2 ユーザーガイドインスタンスの構 成 (p. 36)』の「D2 インスタンス」を参照してくださ い。 2015 年 4 月 2 日 Amazon EMR 用の AWS CLI パラメー ター値 特定の EMR サブコマンド用のパラメーター値を CLI ま たは設定ファイルを使用して設定できるようになりまし た。詳細については、「AWS CLI での Amazon EMR 用 パラメーター値の指定 (p. 617)」を参照してください。 2015 年 4 月 2 日 Amazon S3 クライ アント側の暗号化 の EMRFS によるサ ポート EMRFS でネイティブに Amazon S3 クライアント側の暗 2015 年 3 月 25 号化をサポートします。詳細については、「EMRFS で 日 の Amazon S3 クライアント側の暗号化の使用 (p. 153)」 を参照してください。 AMI 3.6.0 Amazon EMR による AMI 3.6.0 のサポート。詳細につ いては、「Amazon EMR バージョン 2.x および 3.x でサ 682 2015 年 3 月 24 日 Amazon EMR 開発者ガイド 変更 説明 リリース日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 3.5.0 Amazon EMR による AMI 3.5.0 のサポート。詳細につ 2015 年 3 月 10 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 2.4.11 および 3.4.0 Amazon EMR による AMI 3.4.0 のサポート。詳細につ 2015 年 2 月 26 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 2.4.10 Amazon EMR による AMI 2.4.10 のサポート。詳細につ 2015 年 2 月 13 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 3.3.2 Amazon EMR による AMI 3.3.1 のサポート。詳細につ 2015 年 2 月 4 日 いては、「Amazon EMR バージョン 2.x および 3.x でサ ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 3.3.1 Amazon EMR による AMI 3.3.1 のサポート。詳細につ 2014 年 11 月 20 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 Hue のサポート Amazon EMR では、クラスターを操作するためのオー プンソースアプリケーションである Hue をサポートしま す。詳細については、「データの表示、照会、操作に関 する Hue の設定 (p. 343)」を参照してください。 2014 年 11 月 6 日 整合性のあるビュー Amazon EMR では、EMRFS の整合性のあるビューをサ ポートします。詳細については、「the section called “整 合性のあるビュー” (p. )」を参照してください。 2014年9月17日 AMI 2.4.8、3.1.2、3.2.1 Amazon EMR では、これらの新しいイメージをサ ポートします。詳細については、「Amazon EMR バー ジョン 2.x および 3.x でサポートされる AMI バージョ ン (p. 60)」を参照してください。 2014年9月16日 AMI 3.1.1 Amazon EMR による AMI 3.1.1 のサポート。詳細につ 2014 年 8 月 15 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 2.4.7 Amazon EMR による AMI 2.4.7 のサポート。詳細につ 2014 年 7 月 30 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 2.4.6 Amazon EMR による AMI 2.4.6 のサポート。詳細につ 2014 年 5 月 15 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 683 Amazon EMR 開発者ガイド 変更 説明 リリース日 AMI 3.1.0 Amazon EMR による AMI 3.1.0 のサポート。詳細につ 2014 年 5 月 15 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 2.4.5 Amazon EMR による AMI 2.4.5 のサポート。詳細につ 2014 年 3 月 27 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 3.0.4 Amazon EMR では、Amazon Kinesis の AMI 3.0.4 お よびコネクタをサポートします。詳細については、 「Amazon EMR バージョン 2.x および 3.x でサポートさ れる AMI バージョン (p. 60)」を参照してください。 AMI 3.0.3 Amazon EMR による AMI 3.0.3 のサポート。詳細につ 2014 年 2 月 11 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 Hive 0.11.0.2 Amazon EMR による Hive 0.11.0.2 のサポート。詳 細については、「サポートされる Hive のバージョ ン (p. 258)」を参照してください。 2014 年 2 月 11 日 Impala 1.2.1 Amazon EMR では、Impala 1.2.1 と Hadoop 2 をサポー トします。詳細については、「Impala (p. 286)」を参照 してください。 2013年12月12日 AMI 3.0.2 Amazon EMR による AMI 3.0.2 のサポート。詳細につ 2013年12月12日 いては、「Amazon EMR バージョン 2.x および 3.x でサ ポートされる AMI バージョン (p. 60)」を参照してくださ い。 Amazon EMR タグ Amazon EMR では、Amazon EMR クラスターでのタ グ付けをサポートします。詳細については、「Amazon EMR クラスターにタグを付ける (p. 217)」を参照してく ださい。 2013 年 12 月 5 日2013 年 12 月 5日 CLI バージョン 2013-12-02 Amazon EMR タグのサポートを追加します。詳細につい ては、「AWS EMR コマンドラインインターフェイスの リリース(廃止) (p. 680)」を参照してください。 2013 年 12 月 5 日2013 年 12 月 5日 AMI 3.0.1 Amazon EMR による AMI 3.0.1 のサポート。詳細につ 2013 年 11 月 8 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 684 2014 年 2 月 20 日 Amazon EMR 開発者ガイド 変更 説明 リリース日 新しい Amazon EMR コンソール 新しい管理コンソールが Amazon EMR で利用できま す。新しいコンソールは、大幅に速度が向上し、以下の ような強力な新機能を備えています。 2013 年 11 月 6 日2013 年 6 月 11 日 • 実行中のクラスターのサイズ変更(つまり、インスタ ンスの追加または削除) • 実行中または終了されたクラスターの起動設定の複製 • カスタム Amazon CloudWatch メトリクスを含 む、Hadoop 2 のサポート • 特定のアベイラビリティーゾーンの対象化 • IAM ロールによるクラスターの作成 • 複数のステップの送信(クラスター作成の前後) • 統合されたドキュメンテーション検索を備えた新しい コンソールヘルプポータル MapR 3.0.2 Amazon EMR による MapR 3.0.2 のサポート。詳細につ いては、「Hadoop 用 MapR ディストリビューションを 使用する (p. 224)」を参照してください。 2013 年 11 月 6 日2013 年 6 月 11 日 Hadoop 2.2.0 Amazon EMR による Hadoop 2.2.0 のサポート。詳細に ついては、「Hadoop 2.2.0 の新機能 (p. 115)」を参照し てください。 2013 年 10 月 29 日 AMI 3.0.0 Amazon EMR による AMI 3.0.0 のサポート。詳細につ 2013 年 10 月 29 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 CLI バージョン 2013-10-07 Amazon EMR CLI のメンテナンスアップデート。詳細に ついては、「AWS EMR コマンドラインインターフェイ スのリリース(廃止) (p. 680)」を参照してください。 AMI 2.4.2 Amazon EMR による AMI 2.4.2 のサポート。詳細につ 2013 年 10 月 7 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 AMI 2.4.1 Amazon EMR による AMI 2.4.1 のサポート。詳細につ 2013 年 8 月 20 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 Hive 0.11.0.1 Amazon EMR による Hive 0.11.0.1 のサポート。詳 細については、「サポートされる Hive のバージョ ン (p. 258)」を参照してください。 2013 年 8 月 2 日 Hive 0.11.0 Amazon EMR による Hive 0.11.0 のサポート。詳細につ いては、「サポートされる Hive のバージョン (p. 258)」 を参照してください。 2013 年 8 月 1 日 Pig 0.11.1.1 Amazon EMR による Pig 0.11.1.1 のサポート。詳細 については、「サポートされている Pig のバージョ ン (p. 309)」を参照してください。 2013 年 8 月 1 日 685 2013 年 10 月 7 日 Amazon EMR 開発者ガイド 変更 説明 リリース日 AMI 2.4 Amazon EMR による AMI 2.4 のサポート。詳細について 2013 年 8 月 1 日 は、「Amazon EMR バージョン 2.x および 3.x でサポー トされる AMI バージョン (p. 60)」を参照してください。 MapR 2.1.3 Amazon EMR による MapR 2.1.3 のサポート。詳細につ いては、「Hadoop 用 MapR ディストリビューションを 使用する (p. 224)」を参照してください。 2013 年 8 月 1 日 MapR M7 Edition Amazon EMR では MapR M7 エディションをサポート します。詳細については、「Hadoop 用 MapR ディスト リビューションを使用する (p. 224)」を参照してくださ い。 2013 年 7 月 11 日 CLI バージョン 2013-07-08 Amazon EMR CLI バージョン 2013-07-08 へのメン テナンスアップデート。詳細については、「AWS EMR コマンドラインインターフェイスのリリース(廃 止) (p. 680)」を参照してください。 2013 年 7 月 11 日 Pig 0.11.1 Amazon EMR による Pig 0.11.1 のサポート。Pig 0.11.1 は JDK 7、Hadoop 2 などのサポートを追加します。詳 細については、「サポートされている Pig のバージョ ン (p. 309)」を参照してください。 2013 年 7 月 1 日 Hive 0.8.1.8 Amazon EMR による Hive 0.8.1.8 のサポート。詳細につ いては、「サポートされる Hive のバージョン (p. 258)」 を参照してください。 2013 年 6 月 18 日 AMI 2.3.6 Amazon EMR による AMI 2.3.6 のサポート。詳細につ 2013 年 5 月 17 いては、「Amazon EMR バージョン 2.x および 3.x でサ 日 ポートされる AMI バージョン (p. 60)」を参照してくださ い。 Hive 0.8.1.7 Amazon EMR による Hive 0.8.1.7 のサポート。詳細につ いては、「サポートされる Hive のバージョン (p. 258)」 を参照してください。 2013 年 5 月 2 日 ドキュメントの編成 の改善、新しい目 次、および新しいト ピック 使いやすさを高め、お客様のフィードバックに対応する ため、目次を再編成し、多くの新しいトピックを追加し てドキュメントの編成を更新しました。 2013 年 4 月 29 日 AMI 2.3.5 Amazon EMR による AMI 2.3.5 のサポート。詳細につい ては、「AMI Versions Supported in Amazon EMR」を参 照してください。 2013 年 4 月 26 日 M1 Medium Amazon EC2 のインスタンス Amazon EMR では、m1.medium インスタンスをサポー トします。詳細については、「Hadoop 2.2.0 および 2.4.0 のデフォルト設定 (p. 561)」を参照してください。 2013 年 4 月 18 日 MapR 2.1.2 Amazon Elastic MapReduce による MapR 2.1.2 のサポー 2013 年 4 月 18 ト。詳細については、「Hadoop 用 MapR ディストリ 日 ビューションを使用する (p. 224)」を参照してくださ い。 AMI 2.3.4 廃止. 2013 年 4 月 16 日 686 Amazon EMR 開発者ガイド 変更 説明 リリース日 AWS GovCloud (US) AWS GovCloud (US) のサポートを追加します。詳細に ついては、「AWS GovCloud (US)」を参照してくださ い。 2013 年 4 月 9 日 サポートされている プロダクトユーザー 引数 カスタムユーザー引数を受け付ける新しい -supported-product CLI オプションによる、サード パーティアプリケーションのジョブフロー起動のサポー トを向上。詳細については、「コンソールを使用して MapR で Amazon EMR クラスターを起動する (p. 225)」 を参照してください。 2013 年 3 月 19 日 Amazon VPC Amazon Elastic MapReduce は、お客様がジョブフロー の EC2 インスタンスを起動できる、EC2-Classic および EC2-VPC の 2 つのプラットフォームをサポートしてお ります。詳細については、「Amazon VPC」を参照して ください。 2013 年 3 月 11 日 AMI 2.3.3 Amazon Elastic MapReduce による AMI 2.3.3 のサポー ト。詳細については、「AMI Versions Supported in Amazon EMR」を参照してください。 2013 年 3 月 1 日 ハイ I/O インスタン ス Amazon Elastic MapReduce による hi1.4xlarge インスタ ンスのサポート。詳細については、「Hadoop 2.2.0 およ び 2.4.0 のデフォルト設定 (p. 561)」を参照してくださ い。 2013 年 2 月 14 日 AMI 2.3.2 Amazon Elastic MapReduce による AMI 2.3.2 のサポー ト。詳細については、「AMI Versions Supported in Amazon EMR」を参照してください。 2013 年 2 月 7 日 新しいイントロダク ションおよびチュー トリアル Amazon EMR の説明および初めてのストリーミングクラ スターを案内するチュートリアルから構成される追加セ クション。 2013 年 1 月 9 日 CLI リファレンス 追加 CLI リファレンス。詳細については、「Amazon EMR のコマンドラインインターフェイスリファレン ス (p. 617)」を参照してください。 2013 年 1 月 8 日 AMI 2.3.1 Amazon Elastic MapReduce による AMI 2.3.1 のサポー ト。詳細については、「AMI Versions Supported in Amazon EMR」を参照してください。 2012 年 12 月 24 日 ハイストレージイン スタンス Amazon Elastic MapReduce による hs1.8xlarge インス 2012 年 12 月 20 タンスのサポート。詳細については、「Hadoop 2.2.0 お 日 よび 2.4.0 のデフォルト設定 (p. 561)」を参照してくださ い。 IAM ロール Amazon Elastic MapReduce による IAM Roles のサポー ト。詳細については、「IAM およびアプリケーションの Amazon EMR ロールを設定する (p. 186)」を参照してく ださい。 Hive 0.8.1.6 Amazon Elastic MapReduce による Hive 0.8.1.6 のサ 2012 年 12 月 20 ポート。詳細については、「サポートされる Hive のバー 日 ジョン (p. 258)」を参照してください。 687 2012 年 12 月 20 日 Amazon EMR 開発者ガイド 変更 説明 リリース日 AMI 2.3.0 Amazon Elastic MapReduce による AMI 2.3.0 のサポー ト。詳細については、「AMI Versions Supported in Amazon EMR」を参照してください。 2012 年 12 月 20 日 AMI 2.2.4 Amazon Elastic MapReduce による AMI 2.2.4 のサポー ト。詳細については、「AMI Versions Supported in Amazon EMR」を参照してください。 2012 年 12 月 6 日 AMI 2.2.3 Amazon Elastic MapReduce による AMI 2.2.3 のサポー ト。詳細については、「AMI Versions Supported in Amazon EMR」を参照してください。 2012 年 11 月 30 日 Hive 0.8.1.5 Amazon Elastic MapReduce による Hive 0.8.1.5 のサ 2012 年 11 月 30 ポート。詳細については、「Hive と Amazon EMR (EMR 日 3.x リリース) (p. 247)」を参照してください。 アジアパシフィック (シドニー) アジアパシフィック (シドニー) リージョンで Amazon EMR のサポートを追加します。 2012 年 11 月 12 日 すべての IAM ユー ザーが表示可能 AWS アカウントを持つすべての IAM ユーザーにクラス ターが表示されるように、サポートを追加しました。詳 細については、「IAM ロールを使用したユーザーアクセ ス権限の設定 (p. 179)」を参照してください。 2012 年 10 月 1 日 Hive 0.8.1.4 HBase クラスターで使用されている HBase のバージョ 2012 年 9 月 17 ンに合わせて、Hive クラスター上の HBase クライア 日 ントをバージョン 0.92.0 に更新。これは、Hive クラス ターから HBase クラスターに接続するときに発生してい た問題を修正します。 AMI 2.2.1 • HBase のバックアップ機能に関する問題を修正。 • fs.s3n.blockSize で指定されている Amazon S3 のブロックサイズよりも大きなファイルに対して、 デフォルトでマルチパートアップロードを有効にしま す。詳細については、「Amazon S3 用のマルチパート アップロードを設定する (p. 165)」を参照してくださ い。 AMI 2.1.4 • ネイティブ Amazon S3 ファイルシステムでの問題を 修正。 2012 年 8 月 30 日 2012 年 8 月 30 日 • デフォルトでマルチパートアップロードを有効化。詳 細については、「Amazon S3 用のマルチパートアップ ロードを設定する (p. 165)」を参照してください。 Hadoop 1.0.3、AMI 2.2.0、Hive 0.8.1.3、Pig 0.9.2.2 Hadoop 1.0.3 のサポート。詳細については、「サポート される Hadoop のバージョン (p. 112)」を参照してくだ さい。 2012 年 8 月 6 日 AMI 2.1.3 HBase での問題を修正。 2012 年 8 月 6 日 AMI 2.1.2 MapR の使用時に Amazon CloudWatch メトリクスをサ ポート。 2012 年 8 月 6 日 AMI 2.1.1 ログ出力の信頼性を高め、Amazon VPC に HBase のサ ポートを追加し、DNS の再試行機能を向上。 2012 年 7 月 9 日 688 Amazon EMR 開発者ガイド 変更 説明 リリース日 AMI のメジャー - マ イナーバージョニン グ メジャー - マイナーリリースをサポートすることによ り、AMI のバージョニング機能を向上。AMI のメジャー - マイナーバージョンを指定して、常に最新のパッチ を適用できるようになりました。詳細については、 「Amazon マシンイメージ(AMI) (p. 56)」を参照して ください。 2012 年 7 月 9 日 Hive 0.8.1.2 大きなクラスターにおける重複データの問題を修正。 2012 年 7 月 9 日 S3DistCp 1.0.5 使用する S3DistCp のバージョンを指定するためのサ ポートを向上。 2012 年 6 月 27 日 HBase でのデータの 格納 Amazon EMR による HBase のサポート。HBase は、Google の BigTable に基づいて設計されたオープン ソースのリレーショナルでない分散データベースです。 詳細については、「Apache HBase (p. 317)」を参照して ください。 2012 年 6 月 12 日 Hadoop 向け MapR ディストリビュー ション上でクラス ターを起動 Amazon EMR による MapR のサポート。MapR は、Hadoop の操作性と信頼性が向上させるエンタープ ライズグレードでオープンなディストリビューション。 詳細については、「Hadoop 用 MapR ディストリビュー ションを使用する (p. 224)」を参照してください。 2012 年 6 月 12 日 Amazon EMR クラ スターでのマスター ノードへの接続 SSH および SOCKS を使用してマスターノードに接続す る方法に関する情報を追加。詳細については、「クラス ターに接続する (p. 458)」を参照してください。 2012 年 6 月 12 日 Hive 0.8.1 Amazon Elastic MapReduce による Hive 0.8.1 のサポー ト。詳細については、「Hive と Amazon EMR (EMR 3.x リリース) (p. 247)」を参照してください。 2012 年 5 月 30 日 HParser Amazon EMR での Informatica HParser の実行に関する 情報を追加。詳細については、「HParser でデータを解 析する (p. 223)」を参照してください。 2012 年 4 月 30 日 AMI 2.0.5 パフォーマンスの拡張などの更新。詳細については、 「Amazon EMR バージョン 2.x および 3.x でサポートさ れる AMI バージョン (p. 60)」を参照してください。 2012 年 4 月 19 日 Pig 0.9.2 Amazon Elastic MapReduce による Pig 0.9.2 のサポー ト。Pig 0.9.2 は、Python で記述されたユーザー定義 関数のサポートなど、いくつかの改良が追加されて います。詳細については、「Pig のバージョンの詳 細 (p. 311)」を参照してください。 2012 年 4 月 9 日 Pig のバージョニン グ Amazon Elastic MapReduce による、クラスターの起動 時に Pig のバージョンを指定する機能のサポート。詳細 については、「Apache Pig (p. 309)」を参照してくださ い。 2012 年 4 月 9 日 Hive 0.7.1.4 Amazon Elastic MapReduce による Hive 0.7.1.4 のサ 2012 年 4 月 9 日 ポート。詳細については、「Hive と Amazon EMR (EMR 3.x リリース) (p. 247)」を参照してください。 AMI 1.0.1 archive.debian.org 内の Lenny ディストリビューション の新しい場所を反映するように sources.list を更新。 689 2012 年 4 月 3 日 Amazon EMR 開発者ガイド 変更 説明 リリース日 Hive 0.7.1.3 Hive の新しいバージョンであるバージョン 0.7.1.3 のサポート。このバージョンでは、Hive クエリの 再試行がタイムアウトするまでの時間を設定する dynamodb.retry.duration 変数が追加されていま す。このバージョンの Hive は、Hive コマンドラインア プリケーションからの DynamoDB エンドポイントの設 定もサポートしています。 2012 年 3 月 13 日 コンソールでの IAM のサポート Amazon EMR コンソールでの AWS Identity and Access Management(IAM)のサポート。S3DistCp の向上 と、Hive 0.7.1.2 のサポートも含まれます。 2012 年 2 月 28 日 CloudWatch メトリ クスのサポート クラスターメトリクスのモニタリングとメトリクスに対 するアラームの設定をサポート。 2012 年 1 月 31 日 S3DistCp のサポート S3DistCp を使用した分散コピーのサポート。 2012 年 1 月 19 日 DynamoDB のサポー ト DynamoDB に格納されているデータのエクスポートとク エリのサポート。 2012 年 1 月 18 日 AMI 2.0.2 および Hive 0.7.1.1 Amazon EMR AMI 2.0.2 および Hive 0.7.1.1 のサポー ト。 2012 年 1 月 17 日 クラスターコン ピューティングエイ トエクストララージ (cc2.8xlarge) クラスターでクラスターコンピューティングエイトエク ストララージ(cc2.8xlarge)インスタンスをサポート。 2011 年 12 月 21 日 Hadoop 0.20.205 Hadoop 0.20.205 のサポート。詳細については、「サ ポートされる Hadoop のバージョン (p. 112)」を参照し てください。 2011 年 12 月 11 日 Pig 0.9.1 Pig 0.9.1 のサポート。詳細については、サポートされて いる Pig のバージョン (p. 309) を参照してください。 2011 年 12 月 11 日 AMI のバージョニン グ クラスターの起動に使用する Amazon EMR AMI のバー 2011 年 12 月 11 ジョンを指定できるようになりました。クラスター内の 日 EC2 インスタンスは、指定したバージョンの AMI で初期 化されます。詳細については、「Amazon マシンイメー ジ(AMI) (p. 56)」を参照してください。 Amazon VPC の Amazon EMR クラス ター Amazon EMR クラスターは Amazon Virtual Private 2011 年 12 月 11 Cloud(Amazon VPC)内で起動して、ネットワーク設 日 定とアクセスの制御を高めることができます。詳細につ いては、「クラスターの Amazon VPC サブネットを選択 する (p. 209)」を参照してください。 スポットインスタン ス スポットインスタンスなどのクラスターインスタンスグ ループの起動に対するサポートが追加されました。詳細 については、「(オプション)スポットインスタンスで コストを削減する (p. 43)」を参照してください。 2011 年 8 月 19 日 Hive 0.7.1 Hive 0.7.1 のサポートの追加。詳細については、「サ ポートされる Hive のバージョン (p. 258)」を参照してく ださい。 2011 年 7 月 25 日 690 Amazon EMR 開発者ガイド 変更 説明 リリース日 終了保護 新しい終了保護機能のサポート。詳細については、「ク ラスター終了の管理 (p. 481)」を参照してください。 2011 年 4 月 14 日 タグ付け Amazon EC2 タグ付けのサポート。詳細については、 「Amazon EC2 でクラスターインスタンスを表示す る (p. 430)」を参照してください。 2011 年 3 月 9 日 IAM 統合 AWS Identity and Access Management のサポート。詳 細については、「IAM ロールを使用したユーザーアクセ ス権限の設定 (p. 179)」および「IAM ロールを使用した ユーザーアクセス権限の設定 (p. 179)」を参照してくだ さい。 2011 年 2 月 21 日 Elastic IP のサポート Elastic IP アドレスのサポート。 2011 年 2 月 21 日 環境設定 環境設定およびパフォーマンスの調整に関するセクショ ンを拡張。詳細については、「(オプション)追加のソ フトウェアをインストールするためのブートストラップ アクションの作成 (p. 121)」を参照してください。 2011 年 2 月 21 日 分散キャッシュ DistributedCache を使用してファイルやライブラリを アップロードすることの詳細については、「分散キャッ シュによるファイルのインポート (p. 167)」を参照して ください。 2011 年 2 月 21 日 Amazon EMR を使用 してモジュールを構 築する方法 詳細については、「Amazon EMR を使用したバイナリの 構築 (p. 235)」を参照してください。 2011 年 2 月 21 日 Amazon S3 マルチ パートアップロード AWS SDK for Java を通じた Amazon S3 マルチパート アップロードのサポート。詳細については、「Amazon S3 用のマルチパートアップロードを設定する (p. 165)」 を参照してください。 2010 年 1 月 6 日 Hive 0.70 Hive 0.70 のサポート、および同一クラスターでの Hive 0.5 と Hive 0.7 の共存のサポート。注: Amazon EMR コ マンドラインインターフェイスを更新して、実行中の ジョブフローのサイズを変更し、インスタンスグループ を変更する必要があります。詳細については、「Hive と Amazon EMR (EMR 3.x リリース) (p. 247)」を参照して ください。 2010 年 12 月 8 日 Hive 用 JDBC ドライ バ Hive 0.5 および Hive 0.7 での JDBC のサポート。詳細に ついては、「Hive JDBC ドライバの使用 (p. 271)」を参 照してください。 2010 年 12 月 8 日 HPC のサポート クラスターコンピューティングインスタンスのサポー ト。詳細については、「インスタンスの構成 (p. 36)」を 参照してください。 2010 年 11 月 14 日 ブートストラップア クション ブートストラップアクションの内容とサンプルを拡張。 詳細については、「(オプション)追加のソフトウェア をインストールするためのブートストラップアクション の作成 (p. 121)」を参照してください。 2010 年 11 月 14 日 691 Amazon EMR 開発者ガイド 変更 説明 リリース日 Cascading クラス ター Cascading クラスターのサポートの説明。詳細につい ては、「Cascading ステップの送信 (p. 243)」および 「Cascading を使用したデータ処理 (p. 243)」を参照し てください。 2010 年 11 月 14 日 実行中のクラスター のサイズ変更 実行中のクラスターのサイズ変更のサポート。スレーブ ノードは、新しいノードタイプであるノードとコアに置 き換えられます。詳細については、「Amazon EMR と は (p. 1)」、「実行中のクラスターのサイズを手動で変 更する (p. 494)」、および「実行中のクラスターのサイ ズを手動で変更する (p. 494)」を参照してください。 2010 年 10 月 19 日 付録: 設定オプション 設定オプションに関する詳細情報は、Amazon EMR か ら入手できます。詳細については、「Hadoop 設定のリ ファレンス (p. 556)」を参照してください。 2010 年 10 月 19 日 ガイドの改訂 2010 年 10 月 19 日 このリリースでは、「Amazon EMR 開発者ガイド」の構 成を変更しています。 692
© Copyright 2025 Paperzz