AWSを使ったHadoop分散処理環境のトポロジー。EC2とEMRの比較。
ここまでの(長い)前置きで、Amazon Web Serviceを使った分散処理環境を試してみた。
今回は、Hadoopの実行環境として、EC2とEMRを使ってみた結果を簡単に比較する。
EC2をつかって構築する場合
Amazon Elastic Compute Cloud(EC2)を使ってHadoopの実行環境を構築した場合のイメージ図が下になる。
各クラスターを構成する要素(EC2インスタンス)にHadoopの実行環境を構築し、NameNode、JobTracker(マスタ系ノード)、DataNode、TasckTracker(スレーブ系ノード)をセッテイングする。基本的には、同じ構成のAMIからインスタンスを生成して、マスター系とスレーブ系では起動デーモンを変える格好になる。
データの保管領域として、S3とのやり取りも可能である。
ただし、テンポラリーの実験として利用するには、各設定関連やノード間で交換するキーのやりとりなどの煩わしさが残ってしまう。
EMRを使って構築する場合
Amazon Elastic MapReduce(EMR)を使う場合には、実行環境として最低限必要なイメージは以下となる。
当然のことだが、大きな設定の手間はなく、気軽にMapReduceによる処理を体験することができる。設定に注意が必要なのは、セキュリティーグループ程度の感想である。
また、先のログでみたように、上の図をもう少し細かく書くと、EMR自身が以下の構成になっていることがわかる。
構成的には、EC2で構成したときとなんら変わりがなく、LinuxVM上にセッティングされたHadoop環境とみることができる。
違いは、各ノードのカスタマイズ(実行環境の変更、プログラムのインストールや配備)にBootStrapアクションを定義することである程度解消可能である。
また、Hadoopはデフォルトで64MBのブロックサイズのファイルシステム機能(HDFS)を提供し、その単位でMapperインスタンスを生成する。EMRでは、Mapper数に制限が持たされている、詳しくは「Hadoopファーストガイド」でも詳しく解説されている。
比較結果
さて、それではどちらがいいのか? ということであるが、完璧に(Hadoopを含めた)ソフトウェアの構成要素をコントロールしたいのであれば、EC2上に構成するのがよいのであろう。実際、Hadoopのバージョンは、EMRの場合、AWSによって変更されてしまう。他に込み入った設定が必要なソフトウェアを導入したい場合もこれに含まれると思う。
ただし、この場合、EC2がいいのか、それともVPSがいいのかということを、必要なスケーラビリティーを考慮にいれて検討する価値はあると思う。
MapReduce専用のクラスタを組む場合には、EMRは非常に魅力的な選択肢だと思う。
単純に、AWSやHadoopを使うとスケーラビリティーが確保できる、という訳ではなく、自前で構築したHadoopをスケールアウトさせる場合には、細々とした設定変更やテストが必要になる。EMRであれば、JobFlowのノード数を設定するだけでよい。