Hadoopとは何かを解説し、実際にHadoopを使って大規模データを対象にしたテキストマイニングを行います。テキストマイニングを行うサンプルプログラムの作成を通じて、Hadoopの使い方や、どのように活用できるのかを解説します
「Apache Hadoop」は今、最も注目を集めている技術の1つです。Hadoopとは、大量のデータを手軽に複数のマシンに分散して処理できるオープンソースのプラットフォームです。
Hadoopを活用している企業は年々増え続けていて、不可欠な技術になりつつあるといえるでしょう。
本連載では、Hadoopとは何か、Hadoopがどう活用できるのかということを、「テキストマイニング」に焦点を当てて解説していきたいと思います。
複数のマシンに処理を分散させるには、プロセス同士の通信、監視、障害時の対応などを考えなければならず、プログラマにとってハードルが高いものです。しかし、Hadoopはそういった面倒くさい処理を一手に引き受けてくれ、プログラマは、やりたい処理だけに集中できます。
例えば、Hadoopを使うと、1台で数日かかっていたような重い処理を、複数のマシンに分散させることで、数時間で終わらせる、といったことも可能になります。
Hadoopは、大きく分けてMapReduceとHDFSで構成されています。
MapReduceとは、Hadoopで処理を記述するプログラミングモデルで、シンプルながら、さまざまな処理に柔軟に対応できます。
HDFSは、MapReduceで処理するデータを扱う分散ストレージで、複数のマシンを1つのストレージとして、扱えます。
一部のマシンが故障しても、データが失われないように設計されていて、データ量に応じてスケールアウトすることが可能です。
では、MapReduceについて、例を挙げて詳しく説明していきます。
MapReduceは、「Map」「Shuffle」「Reduce」の3つのフェイズに分かれます。ユーザーは、Mapフェイズ、Reduceフェイズで繰り返し呼び出される、map関数、reduce関数に行いたい処理を記述します。Shuffleフェイズは内部で自動的に行われます。
例えば、あるテキストの中で出現する単語をカウントする処理を考えてみましょう。「THE END OF MONEY IS THE END OF LOVE」というテキストがあったとすると、各単語の出現数は、以下になります。
これをMapReduceで処理してみます。
Mapは、「THE END OF MONEY IS THE END OF LOVE」というテキストを入力として読み込みます。そして、それぞれの単語に「1」という値を割り当てます。
MapReduceのデータは、KeyとValueのペアで表されます。Key、Valueのペアを
"THE END OF MONEY IS THE END OF LOVE" ↓ [ <THE,1> <END,1> <OF,1> <MONEY,1> <IS,1> <THE,1> <END,1> <OF,1> <LOVE,1> ]
Mapの出力をキー順にソートし、同じKeyを持つペアを束ねるのがShuffleです。キー順にソートすることにより、同じKeyを持つペア同士が隣り合います。そして、隣り合った同じKeyを持つペアは、束ねられます。
Shuffleは、MapからReduceにデータを渡す際に自動的に行われます。
[ <THE,1> <END,1> <OF,1> <MONEY,1> <IS,1> <THE,1> <END,1> <OF,1> <LOVE,1> ] ↓ [ <END,1> <END,1> <IS,1> <LOVE,1> <MONEY,1> <OF,1> <OF,1> <THE,1> <THE,1> ] ↓ [ <END,[1,1]> <IS,1> <LOVE,1> <MONEY,1> <OF,[1,1]> <THE,[1,1]> ]
Shuffleの結果を入力として処理を行います。WordCountでは、同じKeyのValueを足し合わせます。
[ <END,[1,1]> <IS,1> <LOVE,1> <MONEY,1> <OF,[1,1]> <THE,[1,1]> ] ↓ [ <END,2> <IS,1> <LOVE,1> <MONEY,1> <OF,2> <THE,2> ]
このように各単語の出現数がカウントされて出力されるわけです。
次ページでは、Hadoopの活用方法を具体的に見ていき、テキストマイニングについて解説します。
Copyright © ITmedia, Inc. All Rights Reserved.