Amazon EMR - 開発者ガイド

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=&quot;http://elasticmapreduce.&apidomain;/doc/2009-03-31&quot;>
<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