初めてEMR(Amazon Elastic MapReduce)を使う人が読むページ
イントロ
仕事で EMR を触っていて知見が溜まってきた気がするので、output していきます。
今後記事を連載する予定。
この記事では EMR にまつわる巨大な背景を説明します。
個別に検索すればもっと詳しいページはゴマンとあります。
ただそれらが EMR とどう関係しているのか、というのはあまり見かけなかったので書いてみました。
あ、コード一行も出てきません。
目次
EMR って何?
全体像
こんな感じ
出典元: What is Amazon EMR? - Amazon Elastic MapReduce
構成
EMR を起動するとどうなる?
- EC2 インスタンスが起動する
- Hadoop 実行環境が自動で install される
- s3 に配置されている input 用データを読み込んで、処理が行われる
- (何かの処理を実行)
- 処理が終了後、s3 に結果を自動で upload
- EC2 インスタンスが terminate する
基本的には起動したクラスタは Terminate されるので、よくわからないうちに、料金ががが... ということにはならず、安全に利用できるようになっている。
気になる一回あたりの料金は...
当然処理の内容によってまちまち。
けど以下の料金の合計が一回あたりに Amazon に支払う金額である。
- S3利用代金
- EC2 インスタンス利用料金
- EMR 利用料金
重要なのは EC2 インスタンスの料金 + EMR の料金がかかるという点。 EC2 の上に hadoop を乗っけて処理を行うので、EC2 の利用料金とhadoop を動かす料金を支払います。
料金 - Amazon Elastic MapReduce(Hadoopクラスター Amazon EMR) | アマゾン ウェブ サービス(AWS 日本語)
EMR の長所短所
どんな時に EMR 使えばいいの? どうして EMR を使うの?という話ですが、当然個人のユースケースによります。
「うちはこれがやりたかったから EMR を使った」というだけで誰もが使って幸せになれる万能ツールというわけではありません。
そこで個人的に考える長所短所をまとめてみました。
これらを眺めてみて、やりたいことにマッチしていれば、試しに使ってみるで良いかと思います。
長所
- サーバーを自前で用意する必要がない
- 自前で頑張るとめんどいので、それらから開放される
- 故障した時どうする?
- サーバー拡張するときどうする?
- サーバー買うと一気にお金すっ飛ぶ...
- セットアップする人的リソース、時間
- 試しに使ってみたい時というユースケース
- 自前で頑張るとめんどいので、それらから開放される
- AWSサービスとの連携
- S3 を始めとした AWS 一式を一緒に使える、処理に組み込める
- Hive, Pig, mahout などのツールの手厚いサポート
- ソフトウェアの更新を自分でやる必要がない
- Amazon 任せにできるので手間が減る
- version が古すぎるということはない(個人的な感想)
- 簡単に使える
- GUI, CUI どっちもござれ
- サポート加入すればわからないこと聴き放題
- money, money, money だけど...
短所
- デバッグ大変
- 簡単に使える ≠ 簡単に使いこなせる
- デフォルトでは自動で terminate されるため
- 良くも悪くもインスタンスに乗っているソフトウェアは、Amazon 任せ
- ruby が 1.8.7 だったり...
- (頑張れば変えられるけど、起動時間がさらに伸びる)
- インスタンスのスペックがある程度固定
仕事で使った時
以下の様な事を考えて EMR + Hadoop Streaming を選択しました
- 大規模なデータを処理する際に、既存のサーバーに付加をかけたくなかった
- 長い間処理すると、当然その分付加がかかっている状態は長く続く
- データのダウンロード、アップロードで回線圧迫
- よくない
- 処理時間の短縮したかった
- できれば処理時間は短いに越したことはない
- サーバー調達、セットアップに時間がかかる
- 自社でサーバー購入する → 時間かかる + めんどい
- じゃあ AWS でサーバー建てる? → それ EMR でいいんじゃね?
- かなり複雑な処理をする予定だった
- Hive のような簡易言語を使えない
- Java を使える人が少なかった
- ruby の会社なので
色々あって、今振り返ると別に EMR 使わなくても... というのもあったりしますが、それは別の話。
Hadoop って何?
さっきから Hadoop という単語が出てきますが、これって一体何?って話です。
- 分散処理をしてくれるソフトウェアのこと
- MapReduce とは hadoop が行う分散処理のこと
- 実際は Map 関数と Reduce 関数を、あるルールに従って書くだけで良い
- 後はよしなに複数台のサーバーで分散処理をしてくれる
- 入力ファイル → (hadoop) → 出力ファイル
- 基本的には、動作はバッチ実行
- 「こういう結果がきたら MapReduce を行って、そうでない場合は行わない」のような条件分岐は苦手
- できなくはないけど、ちと面倒
- Master/Slave アーキテクチャ を持つ
- 親サーバーのことを MasterNode と呼ぶ
- 子サーバーの事を SlaveNode(= CoreNode) と呼ぶ
出典元: What is Amazon EMR? - Amazon Elastic MapReduce
構成
一口に Hadoop と言っても
のような layer がある。順に説明する。
HDFS
- Hadoop Distributed File System の略
- 公式
- Hadoop で使われる独自の分散ファイルシステムのこと
- Master/Slave アーキテクチャ
- 複数のサーバーに置かれてあるファイルを、ひとつのサーバーに置かれているものとして取り扱えるもの
- 「どのサーバーにどのファイルが置かれてある?」という事を一切気にしないで良い
- 巨大なデータを配置するのに適したアーキテクチャである
- EMR では s3 が HDFS の役割を担ってくれる
- EMR の強みポイント、その1
- s3 にファイル置いておけば、EMR はそのファイルを自由に参照することが可能
- HDFS の構成
- NameNode
- MasterNode が使う Node のこと
- 責務は DataNode の管理
- 多数の DataNode がどのようなデータを持っているかを知っている
- DateNode
- SlaveNode が使う Node のこと
- 分割されたデータを実際に保持していて、編集などを行う
- NameNode
Hadoop
- MapReduce 処理を行うメインの Application のこと
- MasterNode の責務
- CoreNode の Task の管理を行う
- CoreNode が生きている?死んでいる?など
- どの CoreNode に Task を割り当てるか
- 実際に Task の管理を行う人を JobTracker という
- CoreNode の Task の管理を行う
- SlaveNode の責務
- 実際の map/reduce 処理(Task)を行う
- MasterNode に成功などの結果を通知
- 実際に Task を実行する人を TaskTracker という
- Hadoop は Java で書かれている
ツール層
まとめ
EMR とその周辺の話をまとめてみました。
長くなってしまいましたが、それだけ色々な技術が積み重なって EMR が生まれたってことですね。
冒頭にも書いたとおり、詳しい話はググってみたり、公式のリファレンスを参照してみてください。