今回で本連載は12回目、最終回を迎えました。

 連載の序盤では、「ビッグデータ」の基盤としてApache Hadoopの基本として、生い立ち、ディストリビューション、アーキテクチャーを説明しました。そして、インストール、MapReduceアプリケーションの実行と進んでいきました。Apache Hadoopの初心者の方は、ある程度の理解は進んでいただけたことと思います。エキスパートの方向けにもHadoop最新情報などを冒頭でお伝えしてきました。

 さて、無駄か有益かの議論は別にして処理する情報(データ)はどんどん増え続けています。身の周りのCPU(中央演算処理装置)とメモリーも増える一方です。私が子供の頃の身近なCPUは、パソコン(NECのPC-9801)とゲーム機(任天堂のファミリーコンピュータ)でした。それが今やスマートフォン、タブレットをはじめ、ブルーレイレコーダー、テレビ、自動車、オートバイ全てCPUを搭載しています。コンシューマー側(クライアント側)でこの状況ですから、サーバー側ではとてつもない情報の洪水に見舞われているのです。

 本連載最終回では、Hadoopを軸にしてこのように増え続けるデータ、ビッグデータの用途を中心に、将来を展望したいと思います。

 今回までの内容で、Hadoopを利用するとどのようなメリットがあり何が実現できるか、技術的に(MapReduceにおいて)は理解いただけていると思います。しかし、大量データ処理システムはこれまでのトランザクションシステムとは少し異なった要件に基づいています。求めている情報がどのようにしたら得られるか、この「求めるデータ」を得るためには繰り返し検証実行する必要があります。

 以下に示す3つのユースケース別に考えていきましょう。

(a)Hadoopで大量データ分散処理
(b)Hadoopでデータ処理
(c)Hadoopでデータ管理

 ただし今後は、YARNが進化する事によりユースケースはさらに増える可能性があります。

(a)HADOOPで大量データ分散処理

 Hadoopが得意とする大量データ分散処理からです。分散ファイルシステムであるHDFSとMapReduceアプリケーションで大量データを適切な時間で処理(基本的にはバッチ処理)します。MapReduceアプリケーションのソースコードを確認しましたが、1つのMapReduceジョブで実現できるデータ処理はそれほど複雑なことはできません。従ってこのジョブを複数回繰り返して目的の情報を見つけだしていきます。

 大量データ分散処理でのHadoopクラスタのHDFSには、複数のデータソースからデータが書き込まれます。データの収集はFlumeや、FluentdSqoopが利用されます。このデータに対してMapReduceジョブ(基本的にJavaで実装)を実行してデータを加工していきます。加工された情報は次の段階に受け渡されます。次の段階とは、結果をそのままグラフ化して活用する場合もあるでしょうし、二次加工するためにデータウエアハウスに受け渡す場合もあるでしょう。

図1●Hadoopのデータ処理の流れ
図1●Hadoopのデータ処理の流れ
[画像のクリックで拡大表示]

 また、このデータ処理はMapReduceとは別の手段であるPigHive Impala Apache Drillといったフレームワークでも代替できます。

 これらツールはそれぞれ一長一短ですので、要件に応じて使い分けます。SQLの考え方が染み付いている我々ですので、まずHiveで実験し、データが取れなければ、次にMapReduceを実装して挑戦というステップになるでしょう。Impalaが安定化すればHadoopでのデータ取得の低遅延化が期待できます。