Hadoopを使ってみよう [1]
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
Hadoopとは
Apache Hadoopとは、大規模なデータを分散処理するためのJavaフレームワークです。米Googleが発表したMapReduceやGoogle File Systemに関する論文に触発されて開発されました。米Yahoo!や米Facebook、米Amazon.comや、米New York Timesなど、膨大なデータを扱う企業によって活用されていることが知られています。
HDFSとは
先に述べた通り、HadoopはGoogleのMapReduceやGoogle File Systemに関する論文に触発されて開発されました。HadoopにおいてGoogle File Systemに相当する要素がHDFS (Hadoop Distributed File System)です。
HDFSは簡単に言うと、多数のホストをまとめて1つの巨大なファイルシステムとして扱う仕組みです。さらに、データを複数のホストに分散して格納することで信頼性を確保するようになっており、個々のホストでRAIDのような仕組みを必要としないことも特長です。
HDFSは全体のデータの流れを管理するName Nodeと呼ばれるマスターサーバと、実際のデータを取り扱うData Nodesと呼ばれるスレーブサーバ群によって構成されています。Name NodeはHDFS全体の管理を行いますが、データそのものは扱いません。実際のデータの入出力や処理はData Nodesに任されています。この役割分担により、Name Nodeがボトルネックになりにくくなっており、Data Nodesはスケールアウトしやすい設計となっています。しかしながら、Hadoop 0.20系においてName Nodeは単一障害点となっており、高可用性が今後の課題となっています。
MapReduceとは
MapReduceとは、大規模なデータを効率的に分散処理するためのフレームワークです。まずMap処理によって大規模なデータを細かく分割して多数のサーバに割り振って並列処理を行わせます。次にReduce処理によって多数のサーバから処理結果を集約し、目的の答えを出力します。これによって大規模なデータを効率的に処理できるほか、処理途中であるサーバがダウンしてしまったとしてもその処理を他のサーバに再スケジュールするという障害に対する耐性も持っています。
Hadoopでは投入されたデータのMapタスク、Reduceタスクの割り振りはマスターサーバのJobTrackerデーモンが行い、実際のMapタスク、Reduceタスクの実行はスレーブサーバ群のTaskTrackerデーモンが行います。
Hadoopの長所と短所、今後の課題
Hadoopは大規模なデータのバッチ処理の性能を上げることに適しています。その反面、巨大なデータの中から特定のデータを素早く抽出したり、変更したりといった処理には向いていません。そのような処理はRDBMSやKVSが得意としています。しかし、Hadoop上に構築されたKVSとしてHBaseなどがあります。
サーバハードウェアやネットワークインフラの構成が難しいことが今後の課題です。特に、先に述べた通りマスターサーバが単一障害点となっているため、Hadoop以外のDRDBやHeartbeatといった技術を用いてHA構成を自前で準備する必要があります。
また、MapReduceフレームワークの開発手法が一般化しているとは言い難く、習得や活用が難しいことも問題点です。これを解消するために、MapReduceのロジックをより簡単に記述することのできるPigやHiveといったプロジェクトが進められています。