ちょっと話題の記事

AWS再入門 Amazon Elastic MapReduce編

2015.12.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

当エントリはDevelopers.IOで弊社AWSチームによる2015年アドベントカレンダー 『AWS サービス別 再入門アドベントカレンダー 2015』の8日目のエントリです。 昨日7日目のエントリは大栗の『Amazon RDS』でした。

このアドベントカレンダーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。 本日8日目のテーマは『Amazon EMR』です。

Amazon Elastic MapReduce(Hadoopクラスター Amazon EMR) | アマゾン ウェブ サービス(AWS 日本語)

目次

Amazon EMRとは

Amazon Elastic MapReduce (Amazon EMR) は、大量のデータを迅速、容易に、かつコスト効果よく処理するためのウェブサービスです1。具体的には分散処理基盤であるHadoopクラスタの構築と運用、およびHadoopクラスタ上での分散アプリケーションの実行を行ってくれます。

分散処理基盤

EMRはHadoopクラスタの構築と運用を行ってくれます。マネジメントコンソールでHadoopクラスタに利用するEC2インスタンスのノード数とインスタンスタイプを指定すると、10分ほどでHadoopクラスタを構築してくれます。Hadoopクラスタで構成するEC2インスタンスに異常があれば、異常のあったインスタンスは破棄して新規にインスタンスを起動してくれます。

分散アプリケーション

Hadoopクラスタ上で分散アプリケーションを実行することができます。例えばSQLライクにログデータの集計などを行いたい場合はApache Hiveを利用することができますし、対話的に処理したいのであればImpalaPrestoを利用することもできます。機械学習ということであればApache Mahoutを実行することもできますし、汎用的な処理したいのであればApache Sparkを利用することもできます2

EMRを利用することで前述のような分散アプリケーションを対話的に利用することもできますし、バッチジョブとして実行することもできます。バッチジョブの場合はStepという形でEMRのAPIを利用することでジョブの登録と実行を行うことができるようになっています。

伸縮自在性

EMRで構築したHadoopクラスタは利用するEC2インスタンスの数を実行時に増減可能なため、ジョブに応じてコストの最適化を図ることができます。例えば特定のジョブのみ処理対象となるレコード数が多い場合に一時的にインスタンス数を増やして処理時間を短縮し、後続のジョブではそれ程インスタンス数が不要な場合は減らしてコストの最適化を図ることができます。

安全性

EMRによってHadoopクラスタは専用のSecurity Group内に構築されます。分散アプリケーション上で利用されるデータについてもEMRFSというEMRが提供するファイルシステムを利用することで透過的に暗号化・復号化が実施されます。S3の暗号化と併用することでデータを常に暗号化しながらアプリケーション側では透過的に利用することが可能です。

ユースケース

任意の分散アプリケーションを実行できるためユースケースは色々と考えられます。ここでは弊社ブログで紹介したユースケースについてご紹介します。

CloudFrontのアクセスログの集計と分析

CloudFrontのアクセスログを集計・分析したい! Hiveを利用してCloudFrontのログの集計と分析を行っています。前述のブログではsshでログインしてCLI上でHiveクエリを実行していますが、バッチジョブとして実行することも可能です。なお、Hadoopクラスタの起動をマネジメントコンソールから行っていますが、現在のマネジメントコンソールとは画面デザインが異なるためご注意下さい。

機械学習によるレコメンデーションエンジンの構築

EMR上でMahoutを使ってレコメンデーション Mahoutを利用して映画のレコメンデーションエンジンを作成しています。こちらもsshでログインしてMahoutのジョブを実行しています。なお、Hadoopクラスタの構築はAWS CLIで行っているので、そういう意味でも参考になるかと思います。

EMR上でZeppelinとSparkを使ってレコメンデーション こちらはSparkのMLlibを利用して同じく映画のレコメンデーションエンジンを作成しています。また、Sparkの操作はApache Zeppelin経由で行っており、Zeppelinのりようイメージが分かるかと思います。

あわせて読みたい

さいごに

以上、『AWS サービス別 再入門アドベントカレンダー 2015』の8日目のエントリ『Amazon EMR編』でした。 EMRは任意の分散アプリケーションを実行できるという意味で自由度が大きいため他のAWSのサービスと比べると分かりにくいかもしれません。そのため、まずはHiveを利用してSQLで集計ができるというような部分から始めて行くのが分かりやすいのではないかと思います。

明日12/09(水)は森永のAWS Configです。お楽しみに!


  1. 公式ドキュメントから引用しています。 
  2. 当然MapReduceジョブも実行できますし、PigスクリプトやHBaseも利用できます。