Weitere ähnliche Inhalte
Ähnlich wie AWS Black Belt Tech シリーズ 2015 - Amazon Elastic MapReduce (20)
Mehr von Amazon Web Services Japan (20)
Kürzlich hochgeladen (10)
AWS Black Belt Tech シリーズ 2015 - Amazon Elastic MapReduce
- 2. 2
Amazon Elastic MapReduceの歴史
• 2009年に最初のリリース
– MapReduceジョブを、ボタン1つで実行できる環境を提供
• Hadoopエコシステムの進化に対応
– Pig, Hive, HBase, Impala, Presto, Hue, Hadoop 2.0, Spark
• AWSサービスの進化に対応
– Spot, IAM, DynamoDB, VPC, CloudWatch, CLI, Kinesis, KMS
→ もはやMapReduceだけではない!
- 7. 7
Task Node
Task Instance Group
Amazon EMRのアーキテクチャ
security group
security group
Master Node
Master Instance Group
Amazon S3
Amazon
DynamoDB
Amazon Kinesis
Core Node
Core Instance Group
HDFS HDFS
HDFS HDFS
Task Node
Task Instance Group
スレーブ群を
管理
HDFS
アクセス
AWSサービス
アクセス
- 8. 8
Amazon EMR Master Instance Group
• Master Nodeは1つ
– Failoverは非対応
• いわゆるマスターの
役割を担う
– NameNodeや
JobTrackerなどが動く
– Core NodeやTask
Nodeの監視
Master Node
Master Instance Group
Hadoop1: JobTracker
Hadoop2: ResourceManager
HDFS: NameNode
Hive: HiveServer, MetaStore
Presto: Coordinator
- 9. 9
Amazon EMR Core Instance Group
• 1つ以上のCore Node
• いわゆるスレーブの
役割を担う
– TaskTrackerなど
– DataNodeが動きロー
カルディスクがHDFS
として使われる
HDFS
Core Node
Core Instance Group
Hadoop1: TaskTracker
Hadoop2: NodeManager
HDFS: DataNode
Presto: Worker
- 10. 10
Amazon EMR Core Instance Group
• Core Node追加可能
– HDFS容量増加
– CPU/RAM増設
• HDFSを持っているた
め、削減はできない
– 4.1.0からは削減も可
能に
HDFS
Core Node
Core Instance Group
Hadoop1: TaskTracker
Hadoop2: NodeManager
HDFS: DataNode
Presto: Worker
- 11. 11
Amazon EMR Task Instance Group
• HDFSを持たない以外
はCoreと同じ役割
• HDFSのデータは
Core Nodeにアクセ
スする
• HDFSを持たないので
削除も自由
Task Node
Task Instance Group
Hadoop1: TaskTracker
Hadoop2: NodeManager
(Presto: Worker)
- 12. 12
Amazon EMR Task Instance Group
• 複数Group設定可能
– Spotのbid価格を調整
– Instance Typeを調整
• 余っているRIを活用
したり、市場価格に
合わせてSpotを調整
したりと柔軟に対応
Task Instance Group 2
Task Instance Group 1
c3.xlarge * 2
bid: $0.1
r3.xlarge * 2
bid: $0.5
- 13. 13
Spot Instanceの活用例
Task Instance GroupCore Instance Group
予測されたコストで最低要件を満たす 低コストでより高速に
On-demandを
Core Nodeに利用
最低要件を満たすだけ
のキャパシティをOn-
demand価格で確保
Spot Instanceを
Task Nodeに利用
On-demandの最大
90%引き程度の価格で
追加のリソースを確保
例: m3.xlarge 6台で10時間かかる処理 (倍の12台なら、5時間で終わると仮定)
Core Node(On-demand)のみ: $0.336×10h×6台 = $20.16 で10時間※
Task Node(Spot)で倍に: $0.336×5h×6台 + $0.12×5h×6台 = $13.68 で5時間※
※2015年9月16日現在のus-east-1の価格です。Spotの価格は時によって変動するので仮の価格です。
- 15. 15
EMRFS: Amazon S3をHDFSの様に扱う
• 計算資源とストレージを隔離できる
• クラスタのシャットダウンが可能
– クラスタを消してもデータをロストしない
• 複数クラスタ間でデータ共有が簡単
– クラスタのバージョンアップ検証が並行できる
• データの高い耐久性
EMR
EMR
Amazon
S3
- 17. 17
EMRFSのConsistent View
• Amazon S3は結果整合性
– 書き込み直後の読み取りは不整
合の可能性
• EMRFSではConsistent View
を提供
– Amazon DynamoDBにメタデー
タを格納し整合性担保
• 結果としてオブジェクトのリ
スト取得も高速に
Amazon S3 Amazon DynamoDB
EMRFSの
メタデータを格納
- 19. 19
Amazon EMRの機能: Bootstrap Action
• 全てのNode起動時に実行されるスクリプト
– 実行可能ファイルであれば何でもOK
• Bash, Ruby, Python, etc.
– Amazon S3に置いて指定、コマンドライン引数も自由に指定
• 任意のソフトウェアをインストールしたり、設
定したりできる
– AWS提供のものもいくつか存在する
- 20. 20
Amazon EMRの機能: Step
• クラスタが準備できたら始まる処理
– クラスタ起動時に設定することもできるし、起動しているクラスタ
に後から追加することもできる
– 例: 日次のETL処理を行うHiveQL実行
• Amazon S3上のjarファイルを指定して実行
– Streaming, Hive, Pig, SparkはEMRがサポート
– script-runner.jarでbashスクリプトを実行させることも可能
• 最後のStepが終わったら自動でクラスタを終了させ
ることもできる(Auto-terminate)
- 21. 21
Amazon EMRでのジョブ実行方法
• Stepで実行
– Amazon EMRの仕組みの上で実行
– 成功/失敗等を簡単に管理できる
– 現状はシリアル実行のみ
• 各アプリケーション毎のインタフェースで実行
– Master Nodeにsshして、コマンド実行
– Hiveserver, spark-submit等でジョブを叩き込むなど
- 23. 23
Amazon EMR主要アップデート (2014/10以降)
• (前出)複数のTask Node Group
• カスタムSecurity Group
• Amazon S3のクライアントサイド暗号化対応
• アプリケーションサポート追加(Hue, Spark)
• Private SubnetでもEMRが起動可能に
• EBSの設定が可能に & M4/C4もサポート
• Release 4.x, 5.x
- 24. 24
カスタムSecurity Groupが利用可能に
• 自身で作成したSecurity Groupを指定可能
– 例: クラスタ毎に別のSecurity Groupを設定して、分離度を上げる
• Security Groupは2種類
– Managed: 必須、必要なルールが自動的に追加される
• SG内、master-slave間、管理用通信(Amazonから8443 portへ)
– Additional: 任意、追加のルールを設定する用途
https://aws.amazon.com/about-aws/whats-new/2015/01/22/customizable-security-groups-and-
multiple-task-instances-now-available-for-amazon-emr/
- 25. 25
Amazon S3クライアントサイド暗号化対応
• EMRFSの拡張として提供
– EMRFSを使っていれば透過的に暗号化・復号される
• クライアントサイド暗号化
– (サーバサイド暗号化では、Amazon S3の内部で暗号化も復号も行う)
– クライアントサイド暗号化では、Amazon EMRで暗号化・復号する
• Amazon S3への保存前に暗号化して保存する
• 鍵の提供元として、Amazon KMSまたはカスタムプロバイダを指定可能
https://aws.amazon.com/about-aws/whats-new/2015/03/amazon-emr-support-for-amazon-s3-client-
side-encryption-now-available/
- 26. 26
EMRFS – クライアントサイド暗号化
Amazon S3
クライアントから
AmazonS3に暗号化して保存
クライアントサイド暗号化を有効化した
EMRFSで復号して読み込み
キーベンダー (AWS KMSか、カスタムのプロバイダ)
(クライアントサイドで暗号化されたオブジェクト)
- 27. 27
アプリケーションサポートの追加
• Spark
– AMI Version 3.8.0以降
• Hue
– AMI Version 3.3.0以降
– Release 4.1.0以降
• Release 4.0.0には含まれていないので注意
https://aws.amazon.com/about-aws/whats-new/2015/06/apache-spark-now-available-on-amazon-emr/
https://aws.amazon.com/about-aws/whats-new/2014/11/07/amazon-elastic-mapreduce-now-supports-hue/
- 30. 30
Amazon EMR Release (2015/07以降)
• Release 4.0.0 – 2015/07
• Release 4.1.0 – 2015/09
• Release 4.2.0 – 2015/11
• Release 4.3.0 – 2016/01
• Release 4.4.0 – 2016/03
• Release 4.5.0 – 2016/04
• Release 4.6.0 – 2016/04
• Release 4.7.1 – 2016/06
• Release 4.7.2 – 2016/07
• Release 5.0.0 – 2016/08
• 約12ヶ月間で10回のリ
リース
• 進化の早いHadoopエ
コシステムに追従して
いくため
- 31. 31
Amazon EMR Release登場
• ポートやパスを標準的なものへ変更
– Amazon EMR独自の設定から、オープンソースの標準設定へ
• アプリケーションの設定を直接的に変更できる様に
– 設定ファイルを編集するのではなく、パラメータを直接指定できる
• マネージメントコンソール、ドキュメントも刷新
– Quick Createでより簡単にクラスタ作成
– ドキュメントは、Management GuideとRelease Guideへ
※従来のAMIベースのバージョンの時との差分について、ドキュメントに詳細がまとまっています
http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-release-differences.html
- 32. 32
Release: ポートやパスの変更
• オープンソースの標準的な設定に変更
– 従来はカスタムのポートやパスを利用していた
– 変更例:
• yarn.resourcemanager.webapp.address port 9026 => 8088
• /home/hadoop/hive => /usr/lib/hive, /etc/hive/conf, /var/log/hive
• 実行ユーザもコンポーネント毎に別ユーザへ
– 従来は全てhadoopユーザだった
– yarnユーザ、hiveユーザなどに変更
- 33. 33
Release: アプリケーションの設定変更
• Classification + Propertiesで直接的な指定
– 従来はBootstrap Actionなどで変更していた
– 以下の様な構造のデータを指定するだけで設定変更可能になった
http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html
[
{
"Classification": "mapred-site",
"Properties": {
"mapred.tasktracker.map.tasks.maximum": "2",
"mapreduce.map.sort.spill.percent": "90",
"mapreduce.tasktracker.reduce.tasks.maximum": "5"
}
}
]
/etc/hadoop/conf/mapred-site.xml
に設定値が記述される
- 34. 34
Release: コンソール、ドキュメント変更
• マネージメントコンソールでQuick Create可能に
– ソフトウェア、ハードウェア、セキュリティの3項目だけ
– 従来通りのコンソールもGo to advanced optionsのリンクから利用可能
• ドキュメントが新たにリリース
– Management Guide
• Amazon EMRのサービスとプラットフォームに関するドキュメント
• http://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide
– Release Guide
• インストールされているソフトウェア等のリリースに関するドキュメント
• http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide
- 42. 42
Release 4.4.0
• アプリケーション更新
– HCatalog 1.0.0 (新規)
– Mahout 0.11.1
• サンドボックス更新
– Sqoop 1.4.6 (新規)
– Presto 0.136
– Zeppelin 0.5.6
• Sparkのデフォルト設
定変更
– Dynamic allocationが
デフォルトで有効に
• Java 8が同梱
– JAVA_HOMEを設定する
だけで使える
- 47. 47
Release 5.0.0
• アプリケーション更新
– Hive 2.1
– Presto 0.150
– Spark 2.0 (Scala 2.11)
– Hue 3.10.0
– Pig 0.16.0
– Tez 0.8.4
– Zeppelin 0.6.1
• デフォルト変更
– Java 8
– Tez (Hive, Pig)
• デバッグ改善
– Stepの失敗理由が簡単に見
れる様に
• Sandboxが無くなった
– アプリケーション名が変更
されたので注意
- 49. 49
Amazon EMRにおけるアプリケーション
• サポートアプリケーション
– クラスタ作成時に簡単なオプションをつけるだけでインストー
ル可能なもの
– Release Label/AMI Version毎に使えるアプリケーション、
バージョンが異なる
• カスタムインストールアプリケーション
– サポートが無くても、Bootstrap ActionやStepsを組み合わせ
て任意のアプリケーションをインストール可能
- 50. 50
アプリケーション: Hadoop
• YARN = Yet-Another-Resource-
Negotiator
• Hadoop2から導入されたリソース管
理の仕組み
– 以前は全てJobTrackerが行っていた
• Resource Requestベースのスケ
ジューラ
– ApplicationMasterからのリクエストに
応じて、空いているリソースを
ResourceManagerが割り当てる
MapReduce
Pig Hive Other
Other
HDFS
Other
Map
ReducePig Hive
YARN
HDFS
Hadoop V1
Hadoop V2
- 51. 51
YARN: ResourceManager
• マスターサーバで稼働
• スレーブ群のリソース情
報を集約
– CPU, Memory, etc.
• 必要なリソースを探して
割り当てる
• ジョブの管理は行わない
– ApplicationMasterの仕事
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
- 52. 52
YARN: NodeManager
• スレーブサーバで稼働
• そのサーバのリソース情
報をRMに報告
• サーバ上のContainerの
管理を行う
– 要求に答えてContainerを
起動する
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
- 53. 53
YARN: Container
• スレーブのリソースが切
り出されたもの
• NMによって起動される
• 実行方式
– DefaultContainerExecutor
• プロセス
– LinuxContainerExecutor
• cgroups
– DockerContainerExecutor
• Docker
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
- 55. 55
Amazon EMRとYARN
• MapReduce, Hive, Pig, Spark on YARN
– Amazon EMRクラスタが持つ計算資源を、YARNがアプリケー
ションに割り振ってくれる
• マルチテナントなクラスタも簡単に作れる
– MRでもHiveでもSparkでも、共通のリソースを分割して使える
- 56. 56
アプリケーション: Hive
• SQL likeな宣言的言語で、ビッグデータに対する処理が
行えるアプリケーション
• データソースに対してスキーマを定義することで、あた
かもテーブルの様に扱える
– 通常はHDFSがデータソース
– Amazon EMRではEMRFS(Amazon S3)が利用可能
• 他にも、Amazon Kinesis, Amazon DynamoDBへのコネクタを提供
• 処理の実際は実行エンジンによって異なる
– MapReduce, Tez, Spark
https://hive.apache.org/
- 59. 59
新しいファイルフォーマット ORC File / Parquet
• 列指向ファイルフォーマット
– カラム毎にデータをまとめて保存する
– 特定の列を扱う処理ではファイル全体を読む必要が
ない
– → Optimized Row Columnar(ORC) File / Parquet
• 行指向ファイルフォーマット
– 1行ずつファイルに保存する
– 1カラムのみ必要でも、レコード全体を読む必要があ
る
– → TEXTFILE, SEQUENCEFILE
ORCのデータ構造
https://orc.apache.org/docs/spec-intro.html
- 62. 62
HiveでAmazon Kinesisのデータを処理
• Amazon Kinesisが保持するStreamデータを、Hiveの
テーブルとして扱える
– Amazon Kinesisの保持期限を考慮して、データアーカイブ用途など
– 注: Hiveでは速度が出ないので、いわゆるストリーム処理は厳しい
• Stream内のShard毎にMapperがデータを読み出す
– デフォルトはAmazon Kinesisの保持データをフルスキャン
– チェックポイント(Amazon DynamoDBに記録)を使うと、前回読みだした
データ以降のみ読むことも可能
Shard-0
Shard-1
Mapper
Mapper
SELECT
FROM
123
id data
1 …
2 …
3 …
Amazon Kinesis
- 65. 65
Spark SQL & DataFrame API
• Spark SQL
– DataFrame APIを操作する
1つの手段
– Hive Metastoreも利用可能
• DataFrame API
– RDD + Schema
– SQL/Java/Scala/Python/
Rで同等の処理速度を実現
• JVMのバイトコードへ変換
http://www.slideshare.net/databricks/2015-0616-spark-summit/16
http://spark.apache.org/sql/
- 67. 67
Amazon KinesisとSpark Streaming
• Amazon KinesisのStreamが、Amazon EMR上の
SparkにDStreamとして流れてくる
– Sparkの中にAmazon Kinesis用のライブラリが同梱されている
– 裏側では、Kinesis Client Libraryを利用して読み込み
• 数秒〜数分のマイクロバッチで、ニア-リアルタイム処
理を実現
– 速報値ダッシュボード、異常検知など
http://spark.apache.org/docs/latest/streaming-kinesis-integration.html
Shard-0
Shard-1
KCL thread
KCL threadAmazon Kinesis
DStream
RDD@T1 RDD@T2
- 68. 68
Spark Dynamic Resource Allocation
• 複数Executorのメモリ上でRDDをキャッシュ
– Heapを全て使えるわけではないので、サイズに注意
• Dynamic Resource Allocation = Executorの
数を動的に調整可能
– StreamingのApplicationがトラフィックに合わせてスケール
– spark-shell等が使わないリソースを確保し続けることもない
– 4.0.0では面倒な設定が終えてあるので、すぐに利用可能!
https://spark.apache.org/docs/1.4.1/job-scheduling.html
- 71. 71
参考資料(英語)
• Amazon EMR Management Guide
http://docs.aws.amazon.com/ElasticMapReduce/latest/ManagementGuide
• Amazon EMR Release Guide
http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide
• Amazon EMR API Reference
http://docs.aws.amazon.com/ElasticMapReduce/latest/API/
• Amazon EMR Developer Guide (2.x and 3.x 向け)
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/
• AWS CLI emr
http://docs.aws.amazon.com/cli/latest/reference/emr/index.html
- 77. 77
IAM Roleの指定が必須に
• 2015年6月30日以降、IAM Roleを指定しないとク
ラスタが起動できなくなった
• IAM Roleは2種類、デフォルトで作成される
– EMR role
• Amazon EMRが、Amazon EC2を起動したりするのに必要な権限
– EC2 instance profile
• Amazon EC2が、Amazon S3等にアクセスするのに必要な権限
http://aws.typepad.com/sajp/2015/06/emr-mandatory-iam-update.html
- 78. 78
Amazon EMR Application 紹介 for 5.0.0
• 分散処理系
– Hadoop, Hive, Tez,
Spark, Presto, Pig,
Mahout, Sqoop
• データベース系
– HBase, Phoenix
• GUI系
– Hue, Zeppelin, Oozie
• その他
– Ganglia, HCatalog,
Zookeeper
- 79. 79
Application 紹介: 分散処理系
• Hadoop
– 分散処理の基盤。YARN(リソース管理)+HDFS(分散ストレージ)の上で、
各種アプリが実行される。MapReduceもその1つ。多くのEMRアプリが
YARNを使うので、ほぼ必須。
• Hive
– YARN上で実行される、分散SQL実行環境。実行エンジンとして
MapReduceなどが使える。S3のデータを直接読み書き可能。
• Tez
– YARN上でDAG(有効非巡回グラフ)を実行するのに最適化したエンジン。
Hiveの実行エンジンに指定するだけで、多くのHiveクエリが高速化する。
- 80. 80
Application 紹介: 分散処理系
• Spark
– 分散処理のフレームワーク。YARN上で実行でき、MapReduce
よりも高速かつ簡単に分散処理可能。Spark上でSpark
SQL(Hive互換)やSpark Streaming(ストリーム処理), MLlib(機
械学習)といったこともでき、今最も注目されるプロジェクト。
• Presto
– 分散SQL実行エンジン。YARNではなく独自のクラスタ構成だが、
SQLの実行に特化していてかなり高速。異なるストレージ間で
のJOINも可能。SQLはANSI SQL準拠。
- 81. 81
Application 紹介: 分散処理系
• Pig
– MapReduceを独自DSLで定義して実行できる。新規で使われるこ
とは最近少なくなってきた。
• Mahout
– MapReduceやSpark上で動く機械学習ライブラリ。新規で使われ
ることは最近少なくなってきた。
• Sqoop
– RDBMSと、HDFSやS3の間でのデータの移動をMapReduceで分散
処理する。
- 83. 83
Application 紹介: GUI系
• Hue
– Hiveのテーブルを管理、クエリを実行して結果を確認できるGUI。
• Zeppelin
– GUIからSparkのコードやSpark SQLを実行したり、結果をグラフ
などで可視化し、それを保存・再実行できるノートブック。
• Oozie
– ワークフローを定義してスケジュール実行できる。MapReduceや
Hiveなどをジョブとして扱える。
- 84. 84
Application 紹介: その他
• Ganglia
– インスタンスのリソース(CPU,Memory,Network等)の状態を収集
して、可視化できる運用ソフト。
• HCatalog
– HiveのテーブルにPig等からアクセスできるようにするツール。
• Zookeeper
– 分散型のコーディネータで、KVSや分散ロック、リーダー選定等の
機能を持つ。分散処理アプリの裏側で使われている(HBase)。