scramble cadenza

技術ネタのガラクタ置き場

初めてEMR(Amazon Elastic MapReduce)を使う人が読むページ

イントロ

仕事で EMR を触っていて知見が溜まってきた気がするので、output していきます。
今後記事を連載する予定。

この記事では EMR にまつわる巨大な背景を説明します。
個別に検索すればもっと詳しいページはゴマンとあります。
ただそれらが EMR とどう関係しているのか、というのはあまり見かけなかったので書いてみました。

あ、コード一行も出てきません。

目次

EMR って何?

全体像

こんな感じ

f:id:mgi:20140503163126p:plain

出典元: What is Amazon EMR? - Amazon Elastic MapReduce

構成

EMR を起動するとどうなる?

  1. EC2 インスタンスが起動する
  2. Hadoop 実行環境が自動で install される
  3. s3 に配置されている input 用データを読み込んで、処理が行われる
  4. (何かの処理を実行)
  5. 処理が終了後、s3 に結果を自動で upload
  6. EC2 インスタンスが terminate する

基本的には起動したクラスタは Terminate されるので、よくわからないうちに、料金ががが... ということにはならず、安全に利用できるようになっている。

気になる一回あたりの料金は...

当然処理の内容によってまちまち。
けど以下の料金の合計が一回あたりに Amazon に支払う金額である。

重要なのは 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 どっちもござれ
    • サポート加入すればわからないこと聴き放題

短所

  • デバッグ大変
    • 簡単に使える ≠ 簡単に使いこなせる
    • デフォルトでは自動で terminate されるため
  • 良くも悪くもインスタンスに乗っているソフトウェアは、Amazon 任せ
    • ruby が 1.8.7 だったり...
    • (頑張れば変えられるけど、起動時間がさらに伸びる)
  • インスタンスのスペックがある程度固定

仕事で使った時

以下の様な事を考えて EMR + Hadoop Streaming を選択しました

  • 大規模なデータを処理する際に、既存のサーバーに付加をかけたくなかった
    • 長い間処理すると、当然その分付加がかかっている状態は長く続く
    • データのダウンロード、アップロードで回線圧迫
    • よくない
  • 処理時間の短縮したかった
    • できれば処理時間は短いに越したことはない
  • サーバー調達、セットアップに時間がかかる
    • 自社でサーバー購入する → 時間かかる + めんどい
    • じゃあ AWS でサーバー建てる? → それ EMR でいいんじゃね?
  • かなり複雑な処理をする予定だった
    • Hive のような簡易言語を使えない
  • Java を使える人が少なかった
    • ruby の会社なので

色々あって、今振り返ると別に EMR 使わなくても... というのもあったりしますが、それは別の話。

Hadoop って何?

さっきから Hadoop という単語が出てきますが、これって一体何?って話です。

  • 分散処理をしてくれるソフトウェアのこと
    • HDFS, Hadoop, Hive, Pig など、取り巻く技術は沢山ある
  • MapReduce とは hadoop が行う分散処理のこと
    • 実際は Map 関数と Reduce 関数を、あるルールに従って書くだけで良い
    • 後はよしなに複数台のサーバーで分散処理をしてくれる
  • 入力ファイル → (hadoop) → 出力ファイル
    • 基本的には、動作はバッチ実行
    • 「こういう結果がきたら MapReduce を行って、そうでない場合は行わない」のような条件分岐は苦手
      • できなくはないけど、ちと面倒
  • Master/Slave アーキテクチャ を持つ
    • 親サーバーのことを MasterNode と呼ぶ
    • 子サーバーの事を SlaveNode(= CoreNode) と呼ぶ

f:id:mgi:20140503192258p:plain

出典元: What is Amazon EMR? - Amazon Elastic MapReduce

構成

一口に Hadoop と言っても

のような layer がある。順に説明する。

HDFS
  • Hadoop Distributed File System の略
  • 複数のサーバーに置かれてあるファイルを、ひとつのサーバーに置かれているものとして取り扱えるもの
    • 「どのサーバーにどのファイルが置かれてある?」という事を一切気にしないで良い
    • 巨大なデータを配置するのに適したアーキテクチャである
  • EMR では s3 が HDFS の役割を担ってくれる
    • EMR の強みポイント、その1
    • s3 にファイル置いておけば、EMR はそのファイルを自由に参照することが可能
  • HDFS の構成
    • NameNode
      • MasterNode が使う Node のこと
      • 責務は DataNode の管理
        • 多数の DataNode がどのようなデータを持っているかを知っている
    • DateNode
      • SlaveNode が使う Node のこと
      • 分割されたデータを実際に保持していて、編集などを行う

Hadoop
  • MapReduce 処理を行うメインの Application のこと
  • MasterNode の責務
    • CoreNode の Task の管理を行う
      • CoreNode が生きている?死んでいる?など
      • どの CoreNode に Task を割り当てるか
    • 実際に Task の管理を行う人を JobTracker という
  • SlaveNode の責務
    • 実際の map/reduce 処理(Task)を行う
    • MasterNode に成功などの結果を通知
    • 実際に Task を実行する人を TaskTracker という
  • HadoopJava で書かれている

ツール層
  • Hadoop を簡単に使えるようにするプラグイン
    • Java 以外で MapReduce 処理を書くことが可能
    • 最近はこれらのどれかを使って MapReduce 書くのがメジャーになりつつある
  • その分制約はある
    • 処理が遅い(という噂)
    • 簡単な処理しかできない(ツールによるが)
  • 具体例
    • Hive
      • SQL ライクな文法
    • Pig
      • Pig Script という文法
    • Hadoop Streaming
      • 任意の言語で MapReduce を書ける
      • 任意の言語の例 = ruby, php, python, R, etc...
        • 標準入出力をサポートしていればなんでもいい
    • 他にもある...
      • 探すと色々ある
      • 時は戦国時代だけど、Hive が一番人気

まとめ

EMR とその周辺の話をまとめてみました。
長くなってしまいましたが、それだけ色々な技術が積み重なって EMR が生まれたってことですね。

冒頭にも書いたとおり、詳しい話はググってみたり、公式のリファレンスを参照してみてください。