Hadoopでサービス構築する際に便利なHadoop周りのソフトウェア・ライブラリ群
最近ビッグデータを用いたビジネスやサービス開発が活発になってきて、かのニューヨーク・タイムズでも、ビッグデータを扱うデータアナリストは「21世紀で最も魅力的な職業」といったほど、世の中はデータに対する強い関心を集めているようだ。
実際私の周りで起業した同世代たちも、かなりの方がビッグデータに関するビジョンを持っている。
しかし、ビッグデータと一口に言っても、これを実際にサービスに実装することは熟年の技術者でも難しい。なぜなら、まずビッグデータという言葉自体の意味合いを理解することが難しく、さらにそれを日常のサービス開発に組み込んでいくとなったら一般的な経営者、技術者には困難を極める。
また、ビッグデータが適応される範囲の多くは、「交通情報やサーバーのログなど、日常的なデータ」からデータマイニング(有効なデータの抽出)を行うことであり、今まで気にしなかったデータをむさぼる訳であって、その気付きが発すること自体がビッグデータを一般になかなか浸透させられない原因の一つでもあると思う。
ただし、先ほど言及したように、ビッグデータに関するアイデアを実際に活用しようと試みる人もたくさんいるわけで、今後ビッグデータが身近により広まることは確実である。
今回は、そのビッグデータを用いたサービスを開発する際に、最初にぶち当たる「サービス実装の技術的困難性」を乗り越えるために使えるオープンソースをまとめてみた。
実際にHadoopなどを勉強したり触ったことのある人なら、ここに書いてあることはほとんどご存知だと思うが、今回はこれからビッグデータの砂漠に足を踏み入れようとする勇気ある青年たちに送る文章だと思って眺めていただきたい。
1. Apache Nutch
ビッグデータをまだ所有していないなら、Webページなどからデータを取ってくることも多いと思う。そうすれば大量のデータがタダで手に入る。
ただし、Webページを巡回するボットを作っても、Hadoopなどの分散型データベースに格納する方法は、今までのMySQLなどのデータベース操作とは一味違う。したがって、このNutchが提供する Web検索、Web情報処理機能を利用するのがいいと思う。
2. Apache HBase
分散型データベースソフト。操作を覚えるのには難易度が高く、始めは有効に機能を扱えないと思うが、使いこなせればかなりの恩恵を受けられる。
特に自然言語処理をする際に用いられるデータベース。
3. Apache Mahout
Apache Mahout: Scalable machine learning and data mining
ビッグデータの分析には難関大学でも上級レベルの統計学を用いることが多いが、その統計解析アルゴリズムを簡単に使えるようにライブラリにまとめたものがMahoutである。
有名なものとして、クラスタ分析、クラス分類、協調フィルタリングなどのアルゴリズムを提供。(詳しくはWikipediaなどで調べてください)
4. Apache Pig
実際にデータベースの操作をJavaでやるのは少し難易度が高いため、Hadoop用にPigLatinという高級言語が用意されている。
他にも、最近プログラマならよく耳にするであろう「Clojure」というLispの方言でも操作できるらしい(触ったことないけど)。Clojureならモバイル・アプリの開発もできるらしく、Clojureが好きすぎてClojure専門の会社を作った変態たちもいるらしい。
→Clojure,iOS・Androidアプリ開発の事ならニャンパス株式会社|ニャンパスが提供しているサービス
5. Apache Hive
通常Hadoopを操作するにはJavaのAPIを使って、今までとは違った操作の仕方をするのだが、HiveQLというSQLに似たデータベース操作言語を用いることによって、Hadoop操作をより簡単に実行できる。ただし、MySQLのようなRDBと同じ機能を提供しているわけではないことに注意。
6. Cascading
Cascading | Application Platform for Enterprise Big Data
Javaでシステムを構築する際に、0から構築するのは大変である。そこで、CascadingはJavaアプリケーションを構築するためのフレームワークを提供する。
7. Apache HCatalog
Welcome to Apache Hive™ - HCatalog!
基本的にHadoop周りのシステムはJavaで実装することが多いが、サービスのインターフェースなどはRuby on RailsやPerl, Djangoなどの多言語で実装することがほとんどである。したがって、JavaのシステムであるHadoopに多言語からアクセスしないといけないのだが、その際にそれぞれの言語ごとにデータ定義がバラバラだとデータの一貫性としてよろしくない。
そこでこのHCatalogは、異なる言語間のデータ定義を統一化し、それぞれでデータベースにアクセスすることが可能になる。
8. Apache Bigtop
Hadoopのアプリケーションのテスト、ビルド、パッケージングを自動化するツール。
個人的にはJUnitを気に入っていたので、現在JUnitを用いてHadoopのテスト自動化が出来ないか模索中。
9. Apache Hama
Hama - a general BSP framework on top of Hadoop
Hadoopは直感的に言うと、縦長なデータベースであるため、リレーショナルが関係してくるグラフ計算や行列計算を苦手とする。
そこでこのHamaは、Hadoopの苦手な計算をBSP方式を用いて可能にする機能を提供している。
10. Apache Giraph
Giraph - Welcome To Apache Giraph!
先ほどのHamaとカブるかもしれないが、グラフ計算のライブラリを提供。ページランクなどのアルゴリズムもあったような気がする。(うろ覚えなんで、自分で調べてください)
12. Apache Flume
Welcome to Apache Flume — Apache Flume
ビッグデータを活用しようと思いついた時、多くの場合はWebサーバーのログについてのアイデアだと思う。(私の場合も最初はサーバーログでした)
そのログの収集や、情報の抽出を行うためのツールがFlumeである。
13. Apache Chukwa
先ほどのFlumeと対立?しているツール。ログの集計機能を提供しているが、こちらはサーバーログの情報を表示、監視、分析する機能が優れていると思う。
14. Apache Oozie
Apache Oozie Workflow Scheduler for Hadoop
Hadoop周りのシステムのワークフロー内の各処理を監視、制御できるツール。
私はまだ使ったことが無いので、詳しいことはわかりません。
15. Apache Whirr
Hadoopのためのサービスをクラウド上で実行させるためのライブラリ。CloudStackとかでも活用できるみたいなので、今後CloudStackを用いたクラウド環境構築の記事でも紹介していこうと思う。
18. Apache Avro
コンピュータとコンピュータ同士でデータのやり取りをするための仕組みを提供。基本的にHadoopはサーバーを何台も使うことが多いが、基本的にはじめは1台のサーバーで動くように開発してから複数台のサーバーようにシステムを変換するため、このAvroを使えばその移転作業が効率化できる。
ぜいぜい。長くなりましたが、以上がHadoop周りの便利なツールキットで有名なものの紹介になります。正直全部使いこなしているわけでもない上、全く触ったことも無いものまで紹介してしまったため、一部誤りがあるかもしれないですが、いかんせん日本語のドキュメントも未だ少ないものなので、詳しい情報や実装例は日本語のページではあまり見受けられませんゆえに、この程度の紹介で終わらせていただこうと思います。