...

Amazon EMRで分散処理

by user

on
Category: Documents
143

views

Report

Comments

Transcript

Amazon EMRで分散処理
Amazon Elastic MapReduce
2015/9/16 ※2015/11/30更新
AWS Black Belt Tech Webinar 2015
アマゾン データ サービス ジャパン株式会社
ソリューションアーキテクト 岩永 亮介
1
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だけではない!
2
ビッグデータパイプライン
Collect
Data
Data Collection
and Storage
Event
Processing
S3
AWS Lambda
Kinesis
KCL Apps
DynamoDB
3
Process
Store
EMR
Analyze
Data
Processing
EMR
Answers
Data
Analysis
Redshift
Machine
Learning
Amazon EMRを構成する2つの要素
分散処理基盤
分散処理アプリケーション
• 分散処理に必要なリソー
スを簡単に調達/廃棄可能
• 複雑な設定無しに分散アプ
リケーションを利用可能
– Master/Core/Task node
– EMRFS
– Bootstrap Action, Steps
4
– Hadoop, YARN
– Hive, Pig, HBase, Spark..
Agenda
•
•
•
•
5
分散処理基盤としてのAmazon EMR
Amazon EMR主要アップデート (2014/10以降)
分散処理アプリケーションとしてのAmazon EMR
まとめ
分散処理基盤としてのAmazon EMR
- アーキテクチャ -
6
Amazon EMRのアーキテクチャ
Core Node
Master Node
スレーブ群を
管理
HDFS
HDFS
HDFS
アクセス
Task Node
Task Node
HDFS
Master Instance Group
HDFS
Core Instance Group
AWSサービス
アクセス
Amazon S3
7
Task Instance Group
Task Instance Group
Amazon EMR Master Instance Group
• Master Nodeは1つ
– Failoverは非対応
• いわゆるマスターの
役割を担う
– NameNodeや
JobTrackerなどが動く
– Core NodeやTask
Nodeの監視
8
Master Node
Hadoop1: JobTracker
Hadoop2: ResourceManager
HDFS: NameNode
Hive: HiveServer, MetaStore
Presto: Coordinator
Master Instance Group
Amazon EMR Core Instance Group
• 1つ以上のCore Node
• いわゆるスレーブの
役割を担う
– TaskTrackerなど
– DataNodeが動きロー
カルディスクがHDFS
として使われる
Core Node
Hadoop1: TaskTracker
Hadoop2: NodeManager
HDFS: DataNode
Presto: Worker
HDFS
Core Instance Group
9
Amazon EMR Core Instance Group
• Core Node追加可能
– HDFS容量増加
– CPU/RAM増設
• HDFSを持っているた
め、削減はできない
Core Node
Hadoop1: TaskTracker
Hadoop2: NodeManager
HDFS: DataNode
Presto: Worker
HDFS
– 4.1.0からは削減も可
能に
Core Instance Group
10
Amazon EMR Task Instance Group
• HDFSを持たない以外
はCoreと同じ役割
• HDFSのデータは
Core Nodeにアクセ
スする
• HDFSを持たないので
削除も自由
Task Node
Hadoop1: TaskTracker
Hadoop2: NodeManager
(Presto: Worker)
Task Instance Group
11
Amazon EMR Task Instance Group
• 複数Group設定可能
– Spotのbid価格を調整
– Instance Typeを調整
• 余っているRIを活用
したり、市場価格に
合わせてSpotを調整
したりと柔軟に対応
c3.xlarge * 2
bid: $0.1
Task Instance Group 1
r3.xlarge * 2
bid: $0.5
Task Instance Group 2
12
Spot Instanceの活用例
予測されたコストで最低要件を満たす
低コストでより高速に
On-demandを
Core Nodeに利用
Spot Instanceを
Task Nodeに利用
最低要件を満たすだけ
のキャパシティをOndemand価格で確保
On-demandの最大
90%引き程度の価格で
追加のリソースを確保
Core Instance Group
Task Instance Group
例: 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時間※
13
※2015年9月16日現在のus-east-1の価格です。Spotの価格は時によって変動するので仮の価格です。
分散処理基盤としてのAmazon EMR
- 機能・特徴 -
14
EMRFS: Amazon S3をHDFSの様に扱う
• 計算資源とストレージを隔離できる
• クラスタのシャットダウンが可能
EMR
– クラスタを消してもデータをロストしない
• 複数クラスタ間でデータ共有が簡単
– クラスタのバージョンアップ検証が並行できる
• データの高い耐久性
15
Amazon
S3
EMR
EMRFSの特徴
• “s3://”と指定するだけで利用可能
• Amazon S3の機能がそのまま使える
– 例: 古いデータはAmazon Glacierに自動で移動させる
• Amazon S3のサーバサイド・クライアントサイ
ドの暗号化も利用可能
– 他のアプリでクライアント暗号化したAmazon S3データも読み
出し可能
• クラスタを消してもデータは消えない
16
EMRFSのConsistent View
• Amazon S3は結果整合性
– 書き込み直後の読み取りは不整
合の可能性
• EMRFSではConsistent View
を提供
– Amazon DynamoDBにメタデー
タを格納し整合性担保
• 結果としてオブジェクトのリ
スト取得も高速に
17
Amazon S3
Amazon DynamoDB
EMRFSの
メタデータを格納
Amazon EMRならではの使い方
• 必要な時だけクラスタ起動
– 消せばお金はかからない
– 処理が終わったら自動で消え
る設定も可能
t
• データは全てAmazon S3
– クラスタを消してもデータは
消えない
– データを貯める段階ではクラ
スタ不要
18
Amazon EMRの機能: Bootstrap Action
• 全てのNode起動時に実行されるスクリプト
– 実行可能ファイルであれば何でもOK
• Bash, Ruby, Python, etc.
– Amazon S3に置いて指定、コマンドライン引数も自由に指定
• 任意のソフトウェアをインストールしたり、設
定したりできる
– AWS提供のものもいくつか存在する
19
Amazon EMRの機能: Step
• クラスタが準備できたら始まる処理
– クラスタ起動時に設定することもできるし、起動しているクラスタ
に後から追加することもできる
– 例: 日次のETL処理を行うHiveQL実行
• Amazon S3上のjarファイルを指定して実行
– Streaming, Hive, Pig, SparkはEMRがサポート
– script-runner.jarでbashスクリプトを実行させることも可能
• 最後のStepが終わったら自動でクラスタを終了させ
ることもできる(Auto-terminate)
20
Amazon EMRでのジョブ実行方法
• Stepで実行
– Amazon EMRの仕組みの上で実行
– 成功/失敗等を簡単に管理できる
– 現状はシリアル実行のみ
• 各アプリケーション毎のインタフェースで実行
– Master Nodeにsshして、コマンド実行
– Hiveserver, spark-submit等でジョブを叩き込むなど
21
Amazon EMR主要アップデート(2014/10以降)
22
Amazon EMR主要アップデート (2014/10以降)
•
•
•
•
•
23
(前出)複数のTask Node Group
Release 4.0.0/4.1.0/4.2.0登場
カスタムSecurity Group
Amazon S3のクライアントサイド暗号化対応
アプリケーションサポート追加(Hue, Spark)
Amazon EMR Release 4.0.0登場
• アプリケーションのバージョンアップ
– Apache Bigtopベースの新しいパッケージングへ
• ポートやパスを標準的なものへ変更
– Amazon EMR独自の設定から、オープンソースの標準設定へ
• アプリケーションの設定を直接的に変更できる様に
– 設定ファイルを編集するのではなく、パラメータを直接指定できる
• マネージメントコンソール、ドキュメントも刷新
– Quick Createでより簡単にクラスタ作成
– ドキュメントは、Management GuideとRelease Guideへ
24
※従来のAMIベースのバージョンの時との差分について、ドキュメントに詳細がまとまっています
http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-release-differences.html
Release 4.0.0: アプリケーション更新
• サポートアプリケーションが以下に変更
–
–
–
–
–
Hadoop 2.6.0
Hive 1.0.0
Pig 0.14.0
Mahout 0.10.0
Spark 1.4.1
• Apache Bigtopベースのパッケージングシステムへ
– これまでよりも、速い更新が可能に
25
Release 4.0.0: ポートやパスの変更
• オープンソースの標準的な設定に変更
– 従来はカスタムのポートやパスを利用していた
– 変更例:
• yarn.resourcemanager.webapp.address port 9026 => 8088
• /home/hadoop/hive => /usr/lib/hive, /etc /hive/conf, /var/log/hive
• 実行ユーザもコンポーネント毎に別ユーザへ
– 従来は全てhadoopユーザだった
– yarnユーザ、hiveユーザなどに変更
26
Release 4.0.0: アプリケーションの設定変更
• Classification + Propertiesで直接的な指定
– 従来はBootstrap Actionなどで変更していた
– 以下の様な構造のデータを指定するだけで設定変更可能になった
[
{
"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
に設定値が記述される
]
27
http://docs.aws.amazon.com/ElasticMapReduce/latest/ReleaseGuide/emr-configure-apps.html
Release 4.0.0: コンソール、ドキュメント変更
• マネージメントコンソールで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
28
Release 4.1.0: アプリケーション更新
• サポートアプリケーションの変更点
– Spark 1.5.0
– Hue 3.7.1 (新規追加)
• サンドボックスアプリケーションで、開発中のアプ
リケーションも利用可能に
– Presto 0.119
– Zeppelin 0.6 (Snapshot)
– Oozie 4.0.1
29
Release 4.2.0: アプリケーション更新
• サポートアプリケーションの変更点
– Spark 1.5.2
– Ganglia 3.6.0 (新規追加)
• サンドボックスアプリケーションの変更点
– Presto 0.125
– Zeppelin 0.5.5
– Oozie 4.2.0
30
カスタムSecurity Groupが利用可能に
• 自身で作成したSecurity Groupを指定可能
– 例: クラスタ毎に別のSecurity Groupを設定して、分離度を上げる
• Security Groupは2種類
– Managed: 必須、必要なルールが自動的に追加される
• SG内、master-slave間、管理用通信(Amazonから8443 portへ)
– Additional: 任意、追加のルールを設定する用途
31
https://aws.amazon.com/about-aws/whats-new/2015/01/22/customizable-security-groups-andmultiple-task-instances-now-available-for-amazon-emr/
Amazon S3クライアントサイド暗号化対応
• EMRFSの拡張として提供
– EMRFSを使っていれば透過的に暗号化・復号される
• クライアントサイド暗号化
– (サーバサイド暗号化では、Amazon S3の内部で暗号化も復号も行う)
– クライアントサイド暗号化では、Amazon EMRで暗号化・復号する
• Amazon S3への保存前に暗号化して保存する
• 鍵の提供元として、Amazon KMSまたはカスタムプロバイダを指定可能
32
https://aws.amazon.com/about-aws/whats-new/2015/03/amazon-emr-support-for-amazon-s3-clientside-encryption-now-available/
(クライアントサイドで暗号化されたオブジェクト)
Amazon S3
キーベンダー (AWS KMSか、カスタムのプロバイダ)
33
クライアントサイド暗号化を有効化した
EMRFSで復号して読み込み
クライアントから
Amazon S3に暗号化して保存
EMRFS – クライアントサイド暗号化
アプリケーションサポートの追加
• Spark
– AMI Version 3.8.0以降
• Hue
– AMI Version 3.3.0以降
– Release 4.1.0以降
• Release 4.0.0には含まれていないので注意
34
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/
分散処理アプリケーションとしてのAmazon EMR
35
Amazon EMRにおけるアプリケーション
• サポートアプリケーション
– クラスタ作成時に簡単なオプションをつけるだけでインストー
ル可能なもの
– Release Label/AMI Version毎に使えるアプリケーション、
バージョンが異なる
• カスタムインストールアプリケーション
– サポートが無くても、Bootstrap ActionやStepsを組み合わせ
て任意のアプリケーションをインストール可能
36
アプリケーション: Hadoop
• YARN = Yet-Another-ResourceNegotiator
• Hadoop2から導入されたリソース管
理の仕組み
Pig Hive Other
MapReduce
HDFS
Other
Hadoop V1
– 以前は全てJobTrackerが行っていた
• Resource Requestベースのスケ
ジューラ
– ApplicationMasterからのリクエストに
応じて、空いているリソースを
ResourceManagerが割り当てる
37
Pig
Map
Hive Reduce
YARN
HDFS
Hadoop V2
Other
YARN: ResourceManager
• マスターサーバで稼働
• スレーブ群のリソース情
報を集約
– CPU, Memory, etc.
• 必要なリソースを探して
割り当てる
• ジョブの管理は行わない
– ApplicationMasterの仕事
38
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
YARN: NodeManager
• スレーブサーバで稼働
• そのサーバのリソース情
報をRMに報告
• サーバ上のContainerの
管理を行う
– 要求に答えてContainerを
起動する
39
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
YARN: Container
• スレーブのリソースが切
り出されたもの
• NMによって起動される
• 実行方式
– DefaultContainerExecutor
• プロセス
– LinuxContainerExecutor
• cgroups
– DockerContainerExecutor
• Docker
40
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
YARN: ApplicationMaster
• ジョブ全体を管理する
Container
– 旧JobTrackerの様な存在
– ジョブ毎に1つのAM
• ジョブを分散処理する
Container全体の進捗管
理や監視を行う
– Scheduler
41
http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html
Amazon EMRとYARN
• MapReduce, Hive, Pig, Spark on YARN
– Amazon EMRクラスタが持つ計算資源を、YARNがアプリケー
ションに割り振ってくれる
• マルチテナントなクラスタも簡単に作れる
– MRでもHiveでもSparkでも、共通のリソースを分割して使える
42
アプリケーション: Hive
• SQL likeな宣言的言語で、ビッグデータに対する処理が
行えるアプリケーション
• データソースに対してスキーマを定義することで、あた
かもテーブルの様に扱える
– 通常はHDFSがデータソース
– Amazon EMRではEMRFS(Amazon S3)が利用可能
• 他にも、Amazon Kinesis, Amazon DynamoDBへのコネクタを提供
• 処理の実際は実行エンジンによって異なる
– MapReduce, Tez, Spark
43
https://hive.apache.org/
Hiveの処理例
CREATE
TABLE
5:クラスタに
処理を依頼
1: テーブル定義で
HDFSやAmazon S3
をソースに指定
Hiveserver
HDFS
Cluster
3: 定義したテーブル
に対して処理を実行
SELECT
FROM
2: テーブル定義
がメタデータとし
て保存される
4: テーブルの
メタデータを
取得
Metastore
6: 実際のデー
タソースから
読み出しつつ
指定された処
理を行う
Amazon
DynamoDB
Amazon S3
Amazon Kinesis
44
Hive Metastoreの重要性
• 他のSQL実行エンジン
でも同じMetastoreを
参照可能
Metastore
HDFS
• MetastoreのMySQLを
クラスタ外に持つこと
も可能
– Amazon EMRの通常は
Masterのローカル
45
Amazon S3
新しいファイルフォーマット ORC File / Parquet
• 列指向ファイルフォーマット
– カラム毎にデータをまとめて保存する
– 特定の列を扱う処理ではファイル全体を読む必要が
ない
– → Optimized Row Columnar(ORC) File / Parquet
• 行指向ファイルフォーマット
– 1行ずつファイルに保存する
– 1カラムのみ必要でも、レコード全体を読む必要があ
る
– → TEXTFILE, SEQUENCEFILE
ORCのデータ構造
46
https://orc.apache.org/docs/spec-intro.html
列指向フォーマットを使うメリット
• 特定列のみの読み書きが効率的
– ビッグデータ分析では全列を使うことは稀
– 単純な統計データならメタデータのみで完結する
• 列毎には似たデータが続くので圧縮効率が良い
• 行毎にグループ化されているので、1行のデー
タは1つのファイルに収まっている
47
HiveでのORC File/Parquetの使い方
• テーブル定義で指定
するだけ
• あとは何も意識しな
くて良い
CREATE TABLE t (
col1 STRING,
…
) STORED AS [ORC/PARQUET];
INSERT INTO t (…);
SELECT col1 FROM t;
48
HiveでAmazon Kinesisのデータを処理
• Amazon Kinesisが保持するStreamデータを、Hiveの
テーブルとして扱える
– Amazon Kinesisの保持期限を考慮して、データアーカイブ用途など
– 注: Hiveでは速度が出ないので、いわゆるストリーム処理は厳しい
• Stream内のShard毎にMapperがデータを読み出す
– デフォルトはAmazon Kinesisの保持データをフルスキャン
– チェックポイント(Amazon DynamoDBに記録)を使うと、前回読みだした
データ以降のみ読むことも可能
3
2
1
Amazon Kinesis
49
Shard-0
Mapper
Shard-1
Mapper
SELECT
FROM
id
data
1
…
2
…
3
…
HiveでAmazon Kinesisのデータを処理
Hiveテーブル作成
Amazon Kinesis
Streamを指定
HQLの実行(例)
通常のHQLを実行するだけ。
内部的にはAmazon Kinesis
からデータを取得し処理を行う
50
アプリケーション: Spark
• 高速な分散処理フレーム
ワークとして話題
– メモリキャッシュ、なるべく
ディスクを使わない
– 繰り返し処理(機械学習等)で
効果が高い
• フレームワーク上で、更に
アプリケーションが展開
– SQL,ストリーム,機械学習,グ
ラフ
http://spark.apache.org/
51
Spark SQL & DataFrame API
• Spark SQL
– DataFrame APIを操作する
1つの手段
– Hive Metastoreも利用可能
http://spark.apache.org/sql/
• DataFrame API
– RDD + Schema
– SQL/Java/Scala/Python/
Rで同等の処理速度を実現
• JVMのバイトコードへ変換
http://www.slideshare.net/databricks/2015-0616-spark-summit/16
52
Spark Streaming – 基本コンセプト
• Discretized Stream(DStream)と呼ばれる、高
レベルの抽象表現
• Resilient Distributed Dataset(RDD)のシーケン
スとして表現される
– いわゆる、マイクロバッチ処理
Receiver
Messages
53
DStream
RDD@T1
RDD@T2
Amazon KinesisとSpark Streaming
• Amazon KinesisのStreamが、Amazon EMR上の
SparkにDStreamとして流れてくる
– Sparkの中にAmazon Kinesis用のライブラリが同梱されている
– 裏側では、Kinesis Client Libraryを利用して読み込み
• 数秒〜数分のマイクロバッチで、ニア-リアルタイム処
理を実現
– 速報値ダッシュボード、異常検知など
Shard-0
Amazon Kinesis
54
Shard-1
KCL thread
KCL thread
http://spark.apache.org/docs/latest/streaming-kinesis-integration.html
DStream
RDD@T1
RDD@T2
Spark Dynamic Resource Allocation
• 複数Executorのメモリ上でRDDをキャッシュ
– Heapを全て使えるわけではないので、サイズに注意
• Dynamic Resource Allocation = Executorの
数を動的に調整可能
– StreamingのApplicationがトラフィックに合わせてスケール
– spark-shell等が使わないリソースを確保し続けることもない
– 4.0.0では面倒な設定が終えてあるので、すぐに利用可能!
55
https://spark.apache.org/docs/1.4.1/job-scheduling.html
まとめ
56
Amazon EMRで分散処理
分散処理したいデータがあるなら、ボタン1つで今すぐに!
57
分散処理基盤
分散処理アプリケーション
• 分散処理に必要なリソー
スを簡単に調達/廃棄可能
• 複雑な設定無しに分散アプ
リケーションを利用可能
参考資料(英語)
• 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
58
Q&A
次回Webinarのお申し込み
http://aws.amazon.com/jp/event_schedule/
59
Webinar資料の配置場所
• AWS クラウドサービス活用資料集
– http://aws.amazon.com/jp/aws-jp-introduction/
60
公式Twitter/Facebook
AWSの最新情報をお届けします
検索
@awscloud_jp
もしくは
http://on.fb.me/1vR8yWm
最新技術情報、イベント情報、お役立ち情報、お得なキャンペーン情報などを
日々更新しています!
61
ご参加ありがとうございました。
62
Appendix
63
IAM Roleの指定が必須に
• 2015年6月30日以降、IAM Roleを指定しないとク
ラスタが起動できなくなった
• IAM Roleは2種類、デフォルトで作成される
– EMR role
• Amazon EMRが、Amazon EC2を起動したりするのに必要な権限
– EC2 instance profile
• Amazon EC2が、Amazon S3等にアクセスするのに必要な権限
64
http://aws.typepad.com/sajp/2015/06/emr-mandatory-iam-update.html
Fly UP