Amazon Elastic MapReduce 
AWS Black Belt Tech Webinar 2014 (旧マイスターシリーズ) 
2014/10/1 
ソリューションアーキテクト 
蒋 逸峰
Agenda 
• Amazon EMRとは? 
• 主要アップデート 
• ベストプラクティス 
• プラットフォームとしてのAmazon EMR 
• まとめ
Agenda 
• Amazon EMRとは? 
• 主要アップデート 
• ベストプラクティス 
• プラットフォームとしてのAmazon EMR 
• まとめ
AWSのビッグデータサービス群 
収集 保存 解析 可視化 
Hadoop Service 
Data Warehouse 
4 
Stream Processing 
Amazon 
Kinesis 
Cloud Storage 
Amazon S3 
NoSQL 
Amazon DynamoDB 
Amazon 
EMR 
Amazon 
Redshift 
BI Tools 
Amazon EC2 
RDBMS 
Amazon RDS 
Data Flow 
AWS Data Pipeline
Hadoop-­‐as-­‐a-­‐service 
What 
is 
EMR? 
Map-­‐Reduce 
エンジン 
ビッグデータツール連携 
大規模分散処理 
コスト メリット 
AWSサービス連携
Amazon EMRのご紹介 
• たった数分間であらゆるサイズのクラスタを起動 
• 多くのインスタンスサイズから要件に最適したもの 
を選ぶ
Amazon EMRのご紹介 
• キャパシティ プランニング不不要 
• ハードウェア運⽤用から開放 
 
• 異異なるサイズ、スペックやノードタイプのクラスタ 
を同時に複数起動可能
EMRアーキテクチャ 
Amazon EMR cluster 
JobTracker 
NameNode 
Hive 
Pig 
Node management 
Master node 
TaskTracker 
DataNode 
HDFS 
Core node 
Core instance group 
TaskTracker 
Task node 
AWS Cloud Master instance group Task instance group
EMRマスタノード 
マスタノードが1つ存在 
• マスタノードのフェイルオ 
ーバーは⾮非対応 
マスタノード 
• NameNode, JobTrackerを実 
⾏行行 
• コアノードやタスクノード 
の状態モニタリング 
Hadoopのマスタノードに相当 
Amazon EMR cluster 
JobTracker 
NameNode 
Hive 
Pig 
Node management 
Master node 
AWS Cloud Master instance group
Amazon EMRコアノード 
• TaskTrackerを実⾏行行 
(MapReduce) 
• DataNodeを実⾏行行 
(HDFS) 
• 動的追加可能 
Master instance group 
Amazon EMR cluster 
HDFS HDFS 
Core instance group
Amazon EMRコアノード 
• 動的追加可能 
– HDFS容量量増 
– CPU/RAM増 
• HDFSを持っているため、 
ノードの追加のみ、 
削除はできない 
Master instance group 
Amazon EMR cluster 
HDFS HDFS HDFS 
Core instance group
Amazon EMRタスクノード 
• TaskTrackerを実⾏行行 
• No HDFS 
• Amazon S3や 
コアノードのHDFS 
から読込 
Master instance group 
Amazon EMR cluster 
HDFS HDFS 
Core instance group Task instance group
Amazon EMRタスクノード 
• 動的追加可能 
– CPU/RAM増 
• ノードの削除も可能 
Master instance group 
Amazon EMR cluster 
HDFS HDFS 
Core instance group Task instance group
Agenda 
• Amazon EMRとは? 
• 主要アップデート 
• ベストプラクティス 
• プラットフォームとしてのAmazon EMR 
• まとめ
EMR AMI 3.2.1 
• Amazon Linux 2014.03 
• Hadoop 2.4 
• Hive 0.13.1 
• Pig 0.12 
• HBase 0.94.18 
• Impala 1.2.4 
• Mahout 0.9 
• Cascading 2.5 
• プログラミング言語 
– 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
Hive 0.13 Support 
• Hive12より、1000個以上の新機能、改善やバッグフィックスが追加され 
ています 
• パフォーマンスの向上 
– Hive12より、数倍のパフォーマンス向上が期待できます 
• Sub queryのサポート 
SELECT * FROM A 
WHERE EXISTS ( 
SELECT null 
FROM B 
WHERE B.id = A.id 
AND B.date  '2009-10-01') 
SELECT key FROM t1 
GROUP BY key 
HAVING COUNT(value) IN ( 
SELECT p FROM t2); 
Sub queryサポートの例 
http://hortonworks.com/blog/announcing-apache-hive-0-13-completion-stinger-initiative/
Kinesis Integration 
• KinesisストリームのデータをEMRから直接アクセス 
– Hive, Pig, MapReduceでアクセス可能 
– SQLライクに操作可能 
– EMR AMI 3.0.4~ 利用可能 
Data 
Sources 
Data 
Sources 
Data 
Sources 
RedShift 
Kinesis 
S3 
App 
DynamoDB 
Kinesis 
EMR
Kinesis Integration: Hiveからの使い方 
• Kinesis StreamのHive外部テーブル作成 
• HQLでクエリ 
• ほかのデータソースのテーブルとJOIN可能 
– 別のKinesis Stream 
– S3, DynamoDB, HDFSのHive table 
– 例: Clickstream (Kinesis) JOIN Ad campaign data (DynamoDB) 
CREATE TABLE apache_logs ( 
host STRING, 
... 
) 
STORED BY 
'com.amazon.emr.kinesis.hive.KinesisStorageHandler' 
TBLPROPERTIES(kinesis.stream.name=AccessLogStream); 
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-kinesis.html
AWS CLI対応 
• AWS CLIからEMRの操作が可能に 
クラスタ起動 
$ aws emr create-cluster  
--name mycluster  
--ami-version 3.2.1  
--instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m1.medium 
InstanceGroupType=CORE,InstanceCount=2,InstanceType=m1.medium 
ジョブステップ追加 
aws emr add-steps  
--cluster-id j-xxxxxxxx  
--steps Type=STREAMING,Name='Word Count',ActionOnFailure=CONTINUE,Args=-files,s3://bucket/wordcount/scripts/ 
wordcount-mapper.rb,-files,s3://bucket/wordcount/scripts/wordcount-reducer.rb,-mapper,wordcount-mapper.rb,- 
reducer,wordcount-reducer.rb,-input,s3://bucket/wordcount/input/,-output,s3://bucket/wordcount/output/ 
http://docs.aws.amazon.com/cli/latest/reference/emr/index.html
EMRFS Consistent View 
• Amazon S3は結果整合性(Eventual Consistency) 
– オブジェクトの上書きが直後のLIST操作に反映されない可能性あり 
– 複数のMapReduceジョブをチェインイングの際、不整合が生じる可能性ある 
• EMRFS consistent view 
– 既存FSを拡張した整合性チェックの仕組み 
– メタデータをDynamoDBで管理し、S3の実データと比較で整合性チェック 
– 利用者は基本的に意識しなくてよい 
– EMRでS3のファイルをLISTの際で自動的に行う 
• 不整合が検知されたら、retryする 
• それでもだめな場合、ConsistencyExceptionを投げるか、エラーログを出力する 
• 常にS3のデータを正にする 
https://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-consistent-view.html
EMRFS Consistent View 
• DynamoDBでメタデータ管理 
• S3のデータと比較で整合性チェック 
$ aws s3 ls s3://bucket/csv/ 
2014-09-26 15:07:55 285325013 csv/ce53daa0-7e59-485c-858f-f09dd65ca14c-000000 
2014-09-26 15:07:37 285320703 csv/ce53daa0-7e59-485c-858f-f09dd65ca14c-000001 
2014-09-26 15:07:56 221967808 csv/ce53daa0-7e59-485c-858f-f09dd65ca14c-000002 
Objects 
in S3 
Meta data 
in 
DynamoDB
EMRFS Consistent View 
• Emrfs コマンドでファイル操作 
– EMRFSが管理するファイルの整合性を保つため 
$ emrfs --help 
emrfs 1.0 
Usage: emrfs [describe-metadata|set-metadata-capacity|delete-metadata|create-metadata|list-metadata-stores|diff| 
delete|sync|import] [options] args... 
• 直接S3でファイルを追加・削除された場合不整合が発生 
$ aws s3 rm s3://bucket/csv/528235e6-322a-4e29-bed3-ac937f713584-000000 
Directly 
delete in 
hive select * from apache_logs_csv limit 10; 
S3 
OK 
Failed with exception java.io.IOException:com.amazon.ws.emr.hadoop.fs.consistency.exception.ConsistencyException: 1 
items inconsistent (no s3 object for associated metadata item). First object: /bucket/csv/528235e6-322a-4e29-bed3- 
ac937f713584-000000 
Time taken: 0.06 seconds 
ConsistencyEx 
ception発生
Agenda 
• Amazon EMRとは? 
• 主要アップデート 
• ベストプラクティス 
• プラットフォームとしてのAmazon EMR 
• まとめ
EMRベストプラクティス・ホワイトペーパー 
• Amazon EMRのベストプラクティス 
 をトータルにご紹介 
– データの移動、収集、処理 
– コスト最適化 
– パフォーマンスの最適化 
– https://media.amazonwebservices.com/jp/wp/ 
AWS_Amazon_EMR_Best_Practices.pdf
Amazon EMRノードタイプとサイズ 
• 常に現⾏行行世代のインスタンスタイプを利利⽤用 
– M3, C3, R3, I2, HS1 
– コスト パフォーマンスに優れる 
• ワークロードに最適のノードタイプを選ぶ 
– タイプ: M3が⼀一般⽤用途、C3はCPUバウンド 
– サイズ: 本番利利⽤用はxlargeかそれ以上 
• ⼤大きめのノードで構成する⼩小さなクラスタが効率率率的
⼀一時的EMRクラスタ 
• ジョブ実⾏行行中のみクラスタが存在 
– ジョブが終了了するとクラスタをシャットダウン 
 
• データストアとして 
Amazon S3を使う 
– 処理理のインプット と アウトプット 
データを保存 
Data on Amazon S3
HDFSの代わりにAmazon S3を使うメリット 
• クラスタのシャットダウンが可能に 
• 複数クラスタ間でデータ共有 
• Amazon S3 
– 99.999999999%の堅牢牢性 
– 無限のスケール: ストレージとスループット 
– Amazon S3の機能を活かす 
• サーバーサイド暗号化  
• Amazon Glacier連携 
• バージョニング 
大きいメリット 
Amazon S3 
EMR 
EMR
タスクノードのユースケース #1 
• Spotインスタンスの活⽤用 
– ⼊入札式でタスクノードをSpotインスタンスにて実⾏行行 
– 多くの場合、料料⾦金金の⼤大幅なディスカウントが受けられる 
– Spotインスタンスが強制的に削除されることがある 
• 市場価格が⼊入札額を超えた場合 
• タスクノードなら基本問題ない 
http://aws.amazon.com/ec2/purchasing-options/spot-instances/
Spotインスタンスの活用 
• タスクノード追加・削除はクラスタにほぼ影響しない 
– HDFSに影響なし 
– MapReduce 
• ノード追加 
– 待ち状態のタスクを新しいノードに割当 
– ジョブが早くなる! 
• ノード削除 
– 実⾏行行中のタスクを⾃自動的に別ノードに割当 
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-spot-instances.html
タスクノードのユースケース #2 
• 短時間で⼤大量量のリソースを必要とする場合 
 
• 例例:Amazon S3から⼤大量量 
のデータをHDFSにコピーする 
HS1 
48TB 
HDFS 
HS1 
48TB 
HDFS 
Amazon S3
タスクノードのユースケース例例 
HS1 
48TB 
HDFS 
HS1 
48TB 
HDFS 
Amazon S3 
m3.xl 
m3.xl 
m3.xl 
m3.xl 
m3.xl 
m3.xl 
Spot タスクノード 
を追加して 
Amazon S3から 
データをロード
タスクノードのユースケース例例 
HS1 
48TB 
HDFS 
HS1 
48TB 
HDFS 
Amazon S3 
m3.xl 
m3.xl 
m3.xl 
m3.xl 
m3.xl 
m3.xl 
データロード 
終わったら削除
最適なファイルサイズ 
• ⼩小さいファイルを避ける 
– 100MB以上のファイルになるようにする 
• 理理由 
– 1ファイルごとに最低1Mapperが起動する 
– MapperごとにJVM1つ必要 
– JVMの起動にオーバーヘッドがある
最適なファイルサイズ 
• Hadoop利利⽤用の場合のAmazon S3の最適なファイルサイズ 
は? 
約 1〜~2GB 
 
• 理理由 
– 1mapperからAmazon S3のデータ取得速度度: 10MB~∼15MB/s 
– Mapper処理理は60秒以上であるべき 
60sec * 15MB = 約1GB
小さいファイルの扱い 
• S3DistCpを使って⼩小さいファイルを結合 
 
• S3DistCpは⼊入⼒力力パターンで⼩小さいファイルをグルーピ 
ングし、⼤大きいファイルに結合させる 
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
小さいファイルの扱い 
S3DistCpサンプル 
./elastic-mapreduce --jobflow j-3GY8JC4179IOK --jar  
/home/hadoop/lib/emr-s3distcp-1.0.jar  
--args '--src,s3://myawsbucket/cf, 
--dest,s3://myawsbucket/combined, 
--groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*, 
--targetSize,1024, 
--outputCodec,lzo,--deleteOnSuccess’
Agenda 
• Amazon EMRとは? 
• 主要アップデート 
• ベストプラクティス 
• プラットフォームとしてのAmazon EMR 
• まとめ
Data management 
Analytics languages 
HDFS 
Amazon EMR 
Amazon 
Redshift 
AWS Data Pipeline 
Amazon 
DynamoDB 
Amazon S3 
Amazon 
Amazon Kinesis RDS
Bootstrap Action 
• ソフトウェアやパッケージをAmazon EMRノード上に実 
⾏行行・インストール 
• BashスクリプトをAmazon S3に配置 
• ノード起動時に⾃自動的にスクリプトをダウロードして実⾏行行 
• クラスタに追加されたすべてのノード上に実⾏行行 
https://github.com/awslabs/emr-bootstrap-actions
EMR as a Big data Platform 
EMRは MapReduce だけではない 
• HBase: NoSQL データベース 
• Presto: インターアクティブ SQL 
• Impala:インターアクティブSQL 
• Spark: インメモリ分散処理エンジン
HBase on Amazon EMR 
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hbase.html
Apache HBaseとは? 
• Hadoop上のNoSQLデータベース 
• 列指向key value store (KVS) 
• ビッグデータをリアルタイムにアクセス 
• Hadoopとフル連携 
– ストレージにHDFS利用 
– MapReduceサポート
HBaseユースケース 
• 非常に大きいテーブル 
– 数十億行 X 数百万列 
• 書込負荷が非常に高いシステム 
– リアルタイムのメトリックモニタリング 
– 大規模カウンター
HBase on EMR 
• 数クリックで簡単インストール 
• Amazon S3を使った簡単バックアップとリストア 
– 差分バックアップ
OpenTSDB 
• HBase上のタイムシアリス データ 
ベース 
• 大規模モニタリング システム 
• 秒間数百万の書込 
http://bit.ly/1wlJ0TH 
http://opentsdb.net/
Presto on Amazon EMR
Prestoとは? 
• 分散SQLクエリ エンジン 
– MapReduceではない 
– GB から PB 級のデータを問合せ 
– 中間データ結合はインメモリで行う 
• データコネクタで外部ストレージ対応 
• Javaで書かれている
MapReduce vs. Presto 
http://treasure-data.hateblo.jp/entry/2014/09/04/133703
Prestoユースケース 
• Hiveや一般用途のRDBMSの代替ではない 
• ビッグデータをアドホック/インタラクティブに問合せ 
– MapReduceクラスタと共存可能 
– PrestoはHiveより早いケースが多くある 
• Hiveからの移行も簡単 
• PrestoはANSI SQLを利用 
– S3のデータをインタラクティブに問合せ 
• データをRedshiftにロードしなくて良い
Presto on EMR 
• インスタンス用のブートストラップ アクションを提供 
– AMI 3.x以上が条件 
– http://bit.ly/1knbk19 
• 対応データコネクタ 
– EMRクラスタのHDFSまたはHive 
• HBaseは未対応(開発中) 
– Cassandra 
– Amazon S3
Impala on Amazon EMR 
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-impala.html
Impalaとは? 
• オープンソースの分散SQLクエリ エンジン 
– MapReduceではない 
– Prestoとよく似ている 
• C++で書かれている
Impalaの性能 
• Hiveより数倍〜数十倍早い 
• 一部処理できないクエリもある 
異なるクエリでHive(青)とImpala(赤)の処理時間比較。Q1からQ4、クエリの複数度が徐々に上がる。 
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/impala-optimization.html
Impalaユースケース 
• Hiveや一般用途のRDBMSの代替ではない 
• ビッグデータをアドホック/インタラクティブに問合せ 
– MapReduceクラスタと共存可能 
– ImpalaはHiveより早いケースが多くある 
– ほとんどのHiveQLがImpalaでも動く
Impala on EMR 
• 数クリックで簡単インストール 
– AMI 3.x 以上が条件 
• ストレージレイヤー 
– EMRクラスタのHDFSまはたHBase 
– Amazon S3が未対応 
• HDFSに一旦コピーが必要 
• ImpalaのロードマップにS3対応予定あり
Spark on Amazon EMR 
http://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923
Apache Sparkとは? 
• ⾼高速クラスタ コンピューティング 
エンジン 
– インメモリ処理理 
• SQL、ストリーミングと複雑な分 
析を1つのプラットフォームに 
• 既存のHadoopやAmazon S3の 
データをSparkで処理理可能
Spark on EMR 
• Spark 1.1のインストール 
用bootstrap actionを提 
供 
– http://bit.ly/1uZhF8w 
Master 
Node 
Master instance group 
HDFS HDFS 
32GB Memory
Spark on EMR 
• スポットでタスクノードを追加し 
クラスタのメモリ量を増やす 
• S3 または HDFSからRDDを 
生成 
• ⽣生成されたRDDで計算処理理 
を⾏行行う 
• 結果RDDを S3 または 
HDFSに保存 
Master 
Node 
Master instance group 
HDFS HDFS 
32GB Memory 256GB Memory 
Input 
Output
Spark on EMR 
• 処理が終わったらタスク 
ノードをシャットダウン 
Master 
Node 
Master instance group 
HDFS HDFS 
32GB Memory
Kinesis連携 
Kinesis
EMR as a Big Data Platform 
Daily/hourly batch 
Hive / Pig 
Presto / 
Impala 
Dashboard 
BI Tools 
HDFS 
/ S3 
HBase Canssa 
Fast cluster processing 
Interactive query 
ndra MySQL Kinesis 
SQL on any data sets 
Streaming 
Spark 
Data analysis platform
まとめ 
• Amazon EMRでHadoopをすぐに、簡単に利用できる 
• Hadoopアップデートやエコシステム対応 
• Amazon EMRベストプラクティス 
– 最適なインスタンスを選ぶ 
– 一時的なクラスタの活用 
– タスクノードの活用 
– 小さいファイルの扱い 
• プラットフォームとしてのAmazon EMR 
– MapReduce以外の使い方 
– HBase, Presto, Impala, Spark
参考資料 
• ドキュメント 
– http://aws.amazon.com/documentation/elastic-mapreduce/ 
• フォーラム 
– https://forums.aws.amazon.com/forum.jspa?forumID=52start=0 
• AWS Big Data Blog 
– http://blogs.aws.amazon.com/bigdata
QA
Webinar資料の配置場所 
• AWS クラウドサービス活用資料集 
– http://aws.amazon.com/jp/aws-jp-introduction/
Appendix
Kinesis StreamをEMRで定期的に処理 
• ストリームを定期的にバッチで処理 
する 
• 一度処理済みのデータをスキップ 
• DynamoDBを使ってチェックポイント 
• Data Pipeline / Crontabで制御
HBaseデータモデル 
• ソートされた巨大なハッシュテーブルのイメージ 
• 行キーでデータ アクセス 
http://www.n10k.com/blog/hbase-for-architects/
HBaseアーキテクチャ 
• 書込: 非常に早い, 非 
常に高いスループット 
• 読込: 早い (よく設計 
された場合) 
• ノード追加に比例して 
スケール 
http://blog.sematext.com/2012/07/16/hbase-memstore-what-you-should-know/
Prestoアーキテクチャ 
Client Coordinator 
Worker 
Worker 
Worker 
Connec 
tor 
Plugin 
Storage / Metadata 
Discovery 
Service 
http://www.slideshare.net/frsyuki/presto-hadoop-conference-japan-2014
Impalaアーキテクチャ 
http://www.theregister.co.uk/2012/10/24/cloudera_hadoop_impala_real_time_query/
Sparkアーキテクチャ 
• ドライバー プログラム 
– メイン メソッドである。ジョブのスケジューリングを処理 
– Workerまたはクライントで実行 
• クラスタ マネージャー 
– リソース配布管理 
– YARN, Mesos, Standalon 
• Worker 
– 各worker毎にApp Executorが1つ 
– Executor毎に複数のタスクを実行 
http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf 
http://www.cs.berkeley.edu/~matei/papers/2010/hotcloud_spark.pdf
Sparkアーキテクチャ (続き) 
• Resilient Distributed Datasets 
(RDDs) 
– an efficient, general-purpose and 
fault-tolerant abstraction for 
sharing data in cluster 
applications. 
– In-memory 
– Partitioned 
– Immutable 
• RDDs support transformations 
and actions

AWS Black Belt Techシリーズ Amazon EMR

  • 1.
    Amazon Elastic MapReduce AWS Black Belt Tech Webinar 2014 (旧マイスターシリーズ) 2014/10/1 ソリューションアーキテクト 蒋 逸峰
  • 2.
    Agenda • AmazonEMRとは? • 主要アップデート • ベストプラクティス • プラットフォームとしてのAmazon EMR • まとめ
  • 3.
    Agenda • AmazonEMRとは? • 主要アップデート • ベストプラクティス • プラットフォームとしてのAmazon EMR • まとめ
  • 4.
    AWSのビッグデータサービス群 収集 保存解析 可視化 Hadoop Service Data Warehouse 4 Stream Processing Amazon Kinesis Cloud Storage Amazon S3 NoSQL Amazon DynamoDB Amazon EMR Amazon Redshift BI Tools Amazon EC2 RDBMS Amazon RDS Data Flow AWS Data Pipeline
  • 5.
    Hadoop-­‐as-­‐a-­‐service What is EMR? Map-­‐Reduce エンジン ビッグデータツール連携 大規模分散処理 コスト メリット AWSサービス連携
  • 6.
    Amazon EMRのご紹介 •たった数分間であらゆるサイズのクラスタを起動 • 多くのインスタンスサイズから要件に最適したもの を選ぶ
  • 7.
    Amazon EMRのご紹介 •キャパシティ プランニング不不要 • ハードウェア運⽤用から開放 • 異異なるサイズ、スペックやノードタイプのクラスタ を同時に複数起動可能
  • 8.
    EMRアーキテクチャ Amazon EMRcluster JobTracker NameNode Hive Pig Node management Master node TaskTracker DataNode HDFS Core node Core instance group TaskTracker Task node AWS Cloud Master instance group Task instance group
  • 9.
    EMRマスタノード マスタノードが1つ存在 •マスタノードのフェイルオ ーバーは⾮非対応 マスタノード • NameNode, JobTrackerを実 ⾏行行 • コアノードやタスクノード の状態モニタリング Hadoopのマスタノードに相当 Amazon EMR cluster JobTracker NameNode Hive Pig Node management Master node AWS Cloud Master instance group
  • 10.
    Amazon EMRコアノード •TaskTrackerを実⾏行行 (MapReduce) • DataNodeを実⾏行行 (HDFS) • 動的追加可能 Master instance group Amazon EMR cluster HDFS HDFS Core instance group
  • 11.
    Amazon EMRコアノード •動的追加可能 – HDFS容量量増 – CPU/RAM増 • HDFSを持っているため、 ノードの追加のみ、 削除はできない Master instance group Amazon EMR cluster HDFS HDFS HDFS Core instance group
  • 12.
    Amazon EMRタスクノード •TaskTrackerを実⾏行行 • No HDFS • Amazon S3や コアノードのHDFS から読込 Master instance group Amazon EMR cluster HDFS HDFS Core instance group Task instance group
  • 13.
    Amazon EMRタスクノード •動的追加可能 – CPU/RAM増 • ノードの削除も可能 Master instance group Amazon EMR cluster HDFS HDFS Core instance group Task instance group
  • 14.
    Agenda • AmazonEMRとは? • 主要アップデート • ベストプラクティス • プラットフォームとしてのAmazon EMR • まとめ
  • 15.
    EMR AMI 3.2.1 • Amazon Linux 2014.03 • Hadoop 2.4 • Hive 0.13.1 • Pig 0.12 • HBase 0.94.18 • Impala 1.2.4 • Mahout 0.9 • Cascading 2.5 • プログラミング言語 – 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
  • 16.
    Hive 0.13 Support • Hive12より、1000個以上の新機能、改善やバッグフィックスが追加され ています • パフォーマンスの向上 – Hive12より、数倍のパフォーマンス向上が期待できます • Sub queryのサポート SELECT * FROM A WHERE EXISTS ( SELECT null FROM B WHERE B.id = A.id AND B.date '2009-10-01') SELECT key FROM t1 GROUP BY key HAVING COUNT(value) IN ( SELECT p FROM t2); Sub queryサポートの例 http://hortonworks.com/blog/announcing-apache-hive-0-13-completion-stinger-initiative/
  • 17.
    Kinesis Integration •KinesisストリームのデータをEMRから直接アクセス – Hive, Pig, MapReduceでアクセス可能 – SQLライクに操作可能 – EMR AMI 3.0.4~ 利用可能 Data Sources Data Sources Data Sources RedShift Kinesis S3 App DynamoDB Kinesis EMR
  • 18.
    Kinesis Integration: Hiveからの使い方 • Kinesis StreamのHive外部テーブル作成 • HQLでクエリ • ほかのデータソースのテーブルとJOIN可能 – 別のKinesis Stream – S3, DynamoDB, HDFSのHive table – 例: Clickstream (Kinesis) JOIN Ad campaign data (DynamoDB) CREATE TABLE apache_logs ( host STRING, ... ) STORED BY 'com.amazon.emr.kinesis.hive.KinesisStorageHandler' TBLPROPERTIES(kinesis.stream.name=AccessLogStream); http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-kinesis.html
  • 19.
    AWS CLI対応 •AWS CLIからEMRの操作が可能に クラスタ起動 $ aws emr create-cluster --name mycluster --ami-version 3.2.1 --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=m1.medium InstanceGroupType=CORE,InstanceCount=2,InstanceType=m1.medium ジョブステップ追加 aws emr add-steps --cluster-id j-xxxxxxxx --steps Type=STREAMING,Name='Word Count',ActionOnFailure=CONTINUE,Args=-files,s3://bucket/wordcount/scripts/ wordcount-mapper.rb,-files,s3://bucket/wordcount/scripts/wordcount-reducer.rb,-mapper,wordcount-mapper.rb,- reducer,wordcount-reducer.rb,-input,s3://bucket/wordcount/input/,-output,s3://bucket/wordcount/output/ http://docs.aws.amazon.com/cli/latest/reference/emr/index.html
  • 20.
    EMRFS Consistent View • Amazon S3は結果整合性(Eventual Consistency) – オブジェクトの上書きが直後のLIST操作に反映されない可能性あり – 複数のMapReduceジョブをチェインイングの際、不整合が生じる可能性ある • EMRFS consistent view – 既存FSを拡張した整合性チェックの仕組み – メタデータをDynamoDBで管理し、S3の実データと比較で整合性チェック – 利用者は基本的に意識しなくてよい – EMRでS3のファイルをLISTの際で自動的に行う • 不整合が検知されたら、retryする • それでもだめな場合、ConsistencyExceptionを投げるか、エラーログを出力する • 常にS3のデータを正にする https://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-consistent-view.html
  • 21.
    EMRFS Consistent View • DynamoDBでメタデータ管理 • S3のデータと比較で整合性チェック $ aws s3 ls s3://bucket/csv/ 2014-09-26 15:07:55 285325013 csv/ce53daa0-7e59-485c-858f-f09dd65ca14c-000000 2014-09-26 15:07:37 285320703 csv/ce53daa0-7e59-485c-858f-f09dd65ca14c-000001 2014-09-26 15:07:56 221967808 csv/ce53daa0-7e59-485c-858f-f09dd65ca14c-000002 Objects in S3 Meta data in DynamoDB
  • 22.
    EMRFS Consistent View • Emrfs コマンドでファイル操作 – EMRFSが管理するファイルの整合性を保つため $ emrfs --help emrfs 1.0 Usage: emrfs [describe-metadata|set-metadata-capacity|delete-metadata|create-metadata|list-metadata-stores|diff| delete|sync|import] [options] args... • 直接S3でファイルを追加・削除された場合不整合が発生 $ aws s3 rm s3://bucket/csv/528235e6-322a-4e29-bed3-ac937f713584-000000 Directly delete in hive select * from apache_logs_csv limit 10; S3 OK Failed with exception java.io.IOException:com.amazon.ws.emr.hadoop.fs.consistency.exception.ConsistencyException: 1 items inconsistent (no s3 object for associated metadata item). First object: /bucket/csv/528235e6-322a-4e29-bed3- ac937f713584-000000 Time taken: 0.06 seconds ConsistencyEx ception発生
  • 23.
    Agenda • AmazonEMRとは? • 主要アップデート • ベストプラクティス • プラットフォームとしてのAmazon EMR • まとめ
  • 24.
    EMRベストプラクティス・ホワイトペーパー • AmazonEMRのベストプラクティス  をトータルにご紹介 – データの移動、収集、処理 – コスト最適化 – パフォーマンスの最適化 – https://media.amazonwebservices.com/jp/wp/ AWS_Amazon_EMR_Best_Practices.pdf
  • 25.
    Amazon EMRノードタイプとサイズ •常に現⾏行行世代のインスタンスタイプを利利⽤用 – M3, C3, R3, I2, HS1 – コスト パフォーマンスに優れる • ワークロードに最適のノードタイプを選ぶ – タイプ: M3が⼀一般⽤用途、C3はCPUバウンド – サイズ: 本番利利⽤用はxlargeかそれ以上 • ⼤大きめのノードで構成する⼩小さなクラスタが効率率率的
  • 26.
    ⼀一時的EMRクラスタ • ジョブ実⾏行行中のみクラスタが存在 – ジョブが終了了するとクラスタをシャットダウン • データストアとして Amazon S3を使う – 処理理のインプット と アウトプット データを保存 Data on Amazon S3
  • 27.
    HDFSの代わりにAmazon S3を使うメリット •クラスタのシャットダウンが可能に • 複数クラスタ間でデータ共有 • Amazon S3 – 99.999999999%の堅牢牢性 – 無限のスケール: ストレージとスループット – Amazon S3の機能を活かす • サーバーサイド暗号化 • Amazon Glacier連携 • バージョニング 大きいメリット Amazon S3 EMR EMR
  • 28.
    タスクノードのユースケース #1 •Spotインスタンスの活⽤用 – ⼊入札式でタスクノードをSpotインスタンスにて実⾏行行 – 多くの場合、料料⾦金金の⼤大幅なディスカウントが受けられる – Spotインスタンスが強制的に削除されることがある • 市場価格が⼊入札額を超えた場合 • タスクノードなら基本問題ない http://aws.amazon.com/ec2/purchasing-options/spot-instances/
  • 29.
    Spotインスタンスの活用 • タスクノード追加・削除はクラスタにほぼ影響しない – HDFSに影響なし – MapReduce • ノード追加 – 待ち状態のタスクを新しいノードに割当 – ジョブが早くなる! • ノード削除 – 実⾏行行中のタスクを⾃自動的に別ノードに割当 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-plan-spot-instances.html
  • 30.
    タスクノードのユースケース #2 •短時間で⼤大量量のリソースを必要とする場合 • 例例:Amazon S3から⼤大量量 のデータをHDFSにコピーする HS1 48TB HDFS HS1 48TB HDFS Amazon S3
  • 31.
    タスクノードのユースケース例例 HS1 48TB HDFS HS1 48TB HDFS Amazon S3 m3.xl m3.xl m3.xl m3.xl m3.xl m3.xl Spot タスクノード を追加して Amazon S3から データをロード
  • 32.
    タスクノードのユースケース例例 HS1 48TB HDFS HS1 48TB HDFS Amazon S3 m3.xl m3.xl m3.xl m3.xl m3.xl m3.xl データロード 終わったら削除
  • 33.
    最適なファイルサイズ • ⼩小さいファイルを避ける – 100MB以上のファイルになるようにする • 理理由 – 1ファイルごとに最低1Mapperが起動する – MapperごとにJVM1つ必要 – JVMの起動にオーバーヘッドがある
  • 34.
    最適なファイルサイズ • Hadoop利利⽤用の場合のAmazonS3の最適なファイルサイズ は? 約 1〜~2GB • 理理由 – 1mapperからAmazon S3のデータ取得速度度: 10MB~∼15MB/s – Mapper処理理は60秒以上であるべき 60sec * 15MB = 約1GB
  • 35.
    小さいファイルの扱い • S3DistCpを使って⼩小さいファイルを結合 • S3DistCpは⼊入⼒力力パターンで⼩小さいファイルをグルーピ ングし、⼤大きいファイルに結合させる http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_s3distcp.html
  • 36.
    小さいファイルの扱い S3DistCpサンプル ./elastic-mapreduce--jobflow j-3GY8JC4179IOK --jar /home/hadoop/lib/emr-s3distcp-1.0.jar --args '--src,s3://myawsbucket/cf, --dest,s3://myawsbucket/combined, --groupBy,.*XABCD12345678.([0-9]+-[0-9]+-[0-9]+-[0-9]+).*, --targetSize,1024, --outputCodec,lzo,--deleteOnSuccess’
  • 37.
    Agenda • AmazonEMRとは? • 主要アップデート • ベストプラクティス • プラットフォームとしてのAmazon EMR • まとめ
  • 38.
    Data management Analyticslanguages HDFS Amazon EMR Amazon Redshift AWS Data Pipeline Amazon DynamoDB Amazon S3 Amazon Amazon Kinesis RDS
  • 39.
    Bootstrap Action •ソフトウェアやパッケージをAmazon EMRノード上に実 ⾏行行・インストール • BashスクリプトをAmazon S3に配置 • ノード起動時に⾃自動的にスクリプトをダウロードして実⾏行行 • クラスタに追加されたすべてのノード上に実⾏行行 https://github.com/awslabs/emr-bootstrap-actions
  • 40.
    EMR as aBig data Platform EMRは MapReduce だけではない • HBase: NoSQL データベース • Presto: インターアクティブ SQL • Impala:インターアクティブSQL • Spark: インメモリ分散処理エンジン
  • 41.
    HBase on AmazonEMR http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hbase.html
  • 42.
    Apache HBaseとは? •Hadoop上のNoSQLデータベース • 列指向key value store (KVS) • ビッグデータをリアルタイムにアクセス • Hadoopとフル連携 – ストレージにHDFS利用 – MapReduceサポート
  • 43.
    HBaseユースケース • 非常に大きいテーブル – 数十億行 X 数百万列 • 書込負荷が非常に高いシステム – リアルタイムのメトリックモニタリング – 大規模カウンター
  • 44.
    HBase on EMR • 数クリックで簡単インストール • Amazon S3を使った簡単バックアップとリストア – 差分バックアップ
  • 45.
    OpenTSDB • HBase上のタイムシアリスデータ ベース • 大規模モニタリング システム • 秒間数百万の書込 http://bit.ly/1wlJ0TH http://opentsdb.net/
  • 46.
  • 47.
    Prestoとは? • 分散SQLクエリエンジン – MapReduceではない – GB から PB 級のデータを問合せ – 中間データ結合はインメモリで行う • データコネクタで外部ストレージ対応 • Javaで書かれている
  • 48.
    MapReduce vs. Presto http://treasure-data.hateblo.jp/entry/2014/09/04/133703
  • 49.
    Prestoユースケース • Hiveや一般用途のRDBMSの代替ではない • ビッグデータをアドホック/インタラクティブに問合せ – MapReduceクラスタと共存可能 – PrestoはHiveより早いケースが多くある • Hiveからの移行も簡単 • PrestoはANSI SQLを利用 – S3のデータをインタラクティブに問合せ • データをRedshiftにロードしなくて良い
  • 50.
    Presto on EMR • インスタンス用のブートストラップ アクションを提供 – AMI 3.x以上が条件 – http://bit.ly/1knbk19 • 対応データコネクタ – EMRクラスタのHDFSまたはHive • HBaseは未対応(開発中) – Cassandra – Amazon S3
  • 51.
    Impala on AmazonEMR http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-impala.html
  • 52.
    Impalaとは? • オープンソースの分散SQLクエリエンジン – MapReduceではない – Prestoとよく似ている • C++で書かれている
  • 53.
    Impalaの性能 • Hiveより数倍〜数十倍早い • 一部処理できないクエリもある 異なるクエリでHive(青)とImpala(赤)の処理時間比較。Q1からQ4、クエリの複数度が徐々に上がる。 http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/impala-optimization.html
  • 54.
    Impalaユースケース • Hiveや一般用途のRDBMSの代替ではない • ビッグデータをアドホック/インタラクティブに問合せ – MapReduceクラスタと共存可能 – ImpalaはHiveより早いケースが多くある – ほとんどのHiveQLがImpalaでも動く
  • 55.
    Impala on EMR • 数クリックで簡単インストール – AMI 3.x 以上が条件 • ストレージレイヤー – EMRクラスタのHDFSまはたHBase – Amazon S3が未対応 • HDFSに一旦コピーが必要 • ImpalaのロードマップにS3対応予定あり
  • 56.
    Spark on AmazonEMR http://aws.amazon.com/articles/Elastic-MapReduce/4926593393724923
  • 57.
    Apache Sparkとは? •⾼高速クラスタ コンピューティング エンジン – インメモリ処理理 • SQL、ストリーミングと複雑な分 析を1つのプラットフォームに • 既存のHadoopやAmazon S3の データをSparkで処理理可能
  • 58.
    Spark on EMR • Spark 1.1のインストール 用bootstrap actionを提 供 – http://bit.ly/1uZhF8w Master Node Master instance group HDFS HDFS 32GB Memory
  • 59.
    Spark on EMR • スポットでタスクノードを追加し クラスタのメモリ量を増やす • S3 または HDFSからRDDを 生成 • ⽣生成されたRDDで計算処理理 を⾏行行う • 結果RDDを S3 または HDFSに保存 Master Node Master instance group HDFS HDFS 32GB Memory 256GB Memory Input Output
  • 60.
    Spark on EMR • 処理が終わったらタスク ノードをシャットダウン Master Node Master instance group HDFS HDFS 32GB Memory
  • 61.
  • 62.
    EMR as aBig Data Platform Daily/hourly batch Hive / Pig Presto / Impala Dashboard BI Tools HDFS / S3 HBase Canssa Fast cluster processing Interactive query ndra MySQL Kinesis SQL on any data sets Streaming Spark Data analysis platform
  • 63.
    まとめ • AmazonEMRでHadoopをすぐに、簡単に利用できる • Hadoopアップデートやエコシステム対応 • Amazon EMRベストプラクティス – 最適なインスタンスを選ぶ – 一時的なクラスタの活用 – タスクノードの活用 – 小さいファイルの扱い • プラットフォームとしてのAmazon EMR – MapReduce以外の使い方 – HBase, Presto, Impala, Spark
  • 64.
    参考資料 • ドキュメント – http://aws.amazon.com/documentation/elastic-mapreduce/ • フォーラム – https://forums.aws.amazon.com/forum.jspa?forumID=52start=0 • AWS Big Data Blog – http://blogs.aws.amazon.com/bigdata
  • 65.
  • 66.
    Webinar資料の配置場所 • AWSクラウドサービス活用資料集 – http://aws.amazon.com/jp/aws-jp-introduction/
  • 67.
  • 68.
    Kinesis StreamをEMRで定期的に処理 •ストリームを定期的にバッチで処理 する • 一度処理済みのデータをスキップ • DynamoDBを使ってチェックポイント • Data Pipeline / Crontabで制御
  • 69.
    HBaseデータモデル • ソートされた巨大なハッシュテーブルのイメージ • 行キーでデータ アクセス http://www.n10k.com/blog/hbase-for-architects/
  • 70.
    HBaseアーキテクチャ • 書込:非常に早い, 非 常に高いスループット • 読込: 早い (よく設計 された場合) • ノード追加に比例して スケール http://blog.sematext.com/2012/07/16/hbase-memstore-what-you-should-know/
  • 71.
    Prestoアーキテクチャ Client Coordinator Worker Worker Worker Connec tor Plugin Storage / Metadata Discovery Service http://www.slideshare.net/frsyuki/presto-hadoop-conference-japan-2014
  • 72.
  • 73.
    Sparkアーキテクチャ • ドライバープログラム – メイン メソッドである。ジョブのスケジューリングを処理 – Workerまたはクライントで実行 • クラスタ マネージャー – リソース配布管理 – YARN, Mesos, Standalon • Worker – 各worker毎にApp Executorが1つ – Executor毎に複数のタスクを実行 http://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf http://www.cs.berkeley.edu/~matei/papers/2010/hotcloud_spark.pdf
  • 74.
    Sparkアーキテクチャ (続き) •Resilient Distributed Datasets (RDDs) – an efficient, general-purpose and fault-tolerant abstraction for sharing data in cluster applications. – In-memory – Partitioned – Immutable • RDDs support transformations and actions