(レポート) BDT208: Amazon EMRの技術紹介 #reinvent
平田です。EMRについて興味があったので、re:Inventのセッションをまとめてみました。
このセッションの目的
- EMRに関するの技術の紹介
- 基本的な思想
- EMRの特徴
- 2PB規模のオンプレミスのHadoopクラスタからAWSへの移行についての経験
- Spark, Hadoopなどのフレームワークについての紹介はしない
Amazon EMRについて
- Managedな環境
- MapReduce, Apache Spark, Prestoなどが利用できる
- 数分でクラスタを構築可能
- オープンソースのディストリビューションとMapRに対応
- クラウドの拡張性を最大限に利用できる
- セキュリティに関する機能も組み込まれている
- 時間(hour)毎の課金と任意のタイミングでの保存
- 自由度の高い拡張
つまり、簡単・セキュアかつ費用効果の高いデータ処理フレームワークを構築するAWSサービス
クラスタ構築に必要なステップ
- インスタンスの選択
- 利用するソフトウェアの選択
- アクセス方法の選択
1. EMRクラスタの構成例
- Master Node
- 名前解決
- リソース管理
- Slave Node (3種類)
- Core Node
- 中間データの保存
- Task Node
- データ処理の実行
- 最低限要求されるリソースはリザーブドインスタンスで
- 一時的なリソース増強はスポットインスタンスで
2. インスタンスタイプの選択
- Generalタイプ (m1, m3系)
- バッチ処理
- CPU タイプ (c3, cc1, cc2系)
- 機械学習
- Memory タイプ (m2, r3系)
- インメモリ処理 (Spark, Presto)
- Disk/IO タイプ (d2, i2)
- 大容量HDFS
3. ソフトウェアの選択
- 良く利用されるソフトウェアをまとめたQuick Bundleを提供
- 個別にソフトウェアをインストールするカスタマイズもある
- Hadoop系のソフトウェアが利用可能
アクセスセキュリティの設定
- Role や Security Groupを指定する事で各ノードに制限を加える事ができる
EMRでのデータ処理
- EMRでは、様々なデータソースから処理を行うことができる
- HDFS
- EMRFS(S3)
- Dynamo DB
- Kinesis
オンプレミス環境の場合
- CPUとDiskは1セット
- 計算量に応じて、必要となるDisk容量は増加する
- 計算のピークに合わせて常に一定のリソースを確保しなければならない
- 複数のソフトウェアを走らせる場合、リソースの奪い合いが起こる
- CPUとDiskは1セットなので、一方のみを優先的に割り当てるということができない
EMRの場合
EMRではこの問題をどう解決したか? -> EMRFS
- 計算資源(CPU)と記憶媒体(Storage)の分離
- StorageにはS3を利用
- EMRFSの特徴
- S3を記憶媒体として利用
- S3から直接データをストリーム
- HDFSは処理の中間で利用
- 高いread/write性能とエラーハンドリングを実現
- 読み取り一貫性
EMRのメリット1 : S3(Storage)との接続 / 切断
- EMRを停止してもS3上のデータは残り続ける
- 自動停止などが可能に
- EMRによる処理を中間としたデータパイプラインが簡単に作れる
- 一時的な処理の際にのみEMRを利用
EMRのメリット2 : クラスタのリサイズ
- どうすればコストを抑えてクラスタを拡張できるか
- Spot Instanceの利用
- EMRでは、指定した価格・数量に応じて、自動的にSpot Instanceを購入する仕組みがある
- Spot Instanceの価格設定を支援するツールも準備されている (The Spot Bid Advisor)
- ただし、Spot Instanceは突然停止する場合がある。
- Task Nodeとしての利用なら、停止の影響は少ない
- 別ノードでジョブを再実行することでリカバリ可能
- スポットインスタンスを有効に用いることで、処理時間の短縮と費用の削減を両立できる
- 計算量に応じた柔軟なリソース割り当て
EMRの特徴まとめ
- 高速なクラスタのプロビジョニング
- Hadoop,Spark,Prestoなどのアプリケーションの利用
- 標準的なOSSのパッケージング
- 計算リソースとストレージの分離 / 個別のスケーリング
- 要求に応じたクラスタのリサイズ
- Spot Instanceを利用したコスト削減
おわりに
EMRの特徴や構成・機能の詳細について非常によくまとまっていて、勉強になりました。