Amazon Elastic MapReduce (Amazon EMR)を使えば、Apache Hadoopやビッグデータ関連のアプリケーションをAWS上で簡単に動作させられ、Hadoopやクラスタを管理の複雑さとコストを取り除いてくれる。投資なしで、ハードウエアの購入もなしで、最新のハイパフォーマンスなコンピューティング環境を数分で構築して性能が最適化されたHadoopクラスタを利用することができるのだ。
あたらに発表されたBest Practices for Amazon EMRというホワイトペーパーでは、AWSへデータを移行し、データを集め、圧縮し、集約する方法や、Amazon EMRの一般的なアーキテクチャパターンを説明している。コスト最適化やAmazon EC2のさまざまな購入オプションを活用する方法も紹介している。
まず、最初に説明するのは、ローカルストレージの大量のデータをAmazon Simple Storage Service (Amazon S3)へ移行したり、Amazon S3からAmazon EMRやHadoop Distributed File System (HDFS)へ移行するための方法だ。このようなデータ移行をする場合、(同書によれば)帯域幅を戦略的に利用することが重要だ。日に数テラバイトをアップロードするための最適化手法も多く紹介されている。
同書で紹介されているデータアップロードのツールは
- · DistCp (distributed copy) - 大規模にクラスタ間でデータをコピーするときに使えるツール。Amazon EMRを分散、エラーハンドリング、リカバリ、レポーティングに利用する。ファイルのリストやディレクトリをマップタスクの入力に変換し、各マップタスクはファイルの一部をコピーする。
- · S3DistCp - AWS、特にAmazon S3向けに最適化したDistCpの拡張。EMRのジョブフローのステップとしてS3DistCpを加えることで、Amazon S3からHDFSへ効率的にデータを転送できる。
- · Jets3t Java Library - Amazon S3を扱うアプリケーションを開発するのに使えるオープンソースのJavaツールキット。Amazon S3を扱うことができる低いレベルのAPIとツールを提供する。
- · Aspera Direct-to-S3 - UDPベースの高速ファイル転送を実現するプロプライエタリ なファイル転送プロトコルを提供する。ローカルのデータセンターからAmazon S3へデータを転送するのに効果を発揮する。
ひとつの場所からもうひとつの場所へデータを移動するにはデータのアップロードは適した方法だが、複数の場所のデータを集めるには、難しいデータ収集の実装が必要だ。同書では次のような方法を紹介されている。
- · Apache Flume - データを効率的に集め、集約し移行するサービス。分散化されており、信頼性が高く、ロバストで、耐障害性と可用性がある。シンプルで柔軟なアーキテクチャで、調整可能な信頼性の仕組みとフェールオーバー、リカバリの仕組みを持っている。
- · Fluentd - イベントとログを収集するオープンソースツール。収集されたデータは検索、分析用に保存され、S3とHadoop (HDFS)Hadoop (HDFS)にアーカイブされる。
データを収集すると次の重要な作業はデータを集約することだ。同書ではデータ集約のベストプラクティスについて詳しく説明している。集約したデータの大きさ、データのパーティショニング、データの圧縮などについてだ。
このホワイトペーパーの大部分はAWS EMRを使ったデータ処理について書かれている。同書の推奨事項は下記の通りだ。
- Amazon EMRをプロビジョニングする場合は適切なインスタンスサイズを選ぶ
- クラスタは適切な量のインスタンスで構成する
- ひとつのクラスタで使うマッパとリデューサの量を見積もる
- 揮発的なEMRクラスタか永続的なEMRクラスタ
- 適切なEC2インスタンスを使ってEMRクラスタのコストを最適化する
- EMRクラスタの性能を最適化する
また、このホワイトペーパーではEMRのパターンを多く取り上げ、次のようなアドバイスをしている。
- HDFSのかわりにS3
- S3とHDFSを一緒に使う
- Elastic EMRクラスタを使う
このホワイトペーパーはAWS Elastic Map-Reduceの利用を真剣に検討しているすべての人にとって貴重なガイドだ。