Googleが2004年に提唱した分散処理技術MapReduceがあると、手続きをmapとreduceという2つの形式に分けて記述しさえすれば、データを複数の計算機で分散処理できるようになります。
Googleが利用しているMapReduceの実装は公開されていませんが、Hadoopというオープンソースの実装を利用することで、MapReduceを簡単に試すことができます。具体的な方法は以下の通りです(GNU/Linuxの場合)。詳細はクイックスタートを参照。
- SunのJDKをインストールする
- Hadoopをダウンロード・展開する
wget http://ftp.kddilabs.jp/infosystems/apache/hadoop/core/hadoop-0.20.1/hadoop-0.20.1.tar.gz tar zxf hadoop-0.20.1.tar.gz cd hadoop-0.20.1
- conf/hadoop-env.shに、「JAVA_HOME=/usr/java/latest」のようにしてJDKの場所を記述する。
Hadoopには、スタンドアロンモードと疑似分散モード、完全分散モードという3つの動作モードがあります。運用時には完全分散モードにしなければなりませんが、ここではもっとも簡単なスタンドアロンモードで動作を、Hadoopに付属するサンプルで確認します(付属サンプルは「bin/hadoop jar hadoop-*-examples.jar」として確認できます)。
まず、入力データを用意します。
mkdir input echo 'a b c' > input/a echo 'a c b b a' > input/b
ディレクトリinputにあるファイルの中身の単語数は、サンプルのwordcountを使って次のようにして数えられます。
rm -rf output bin/hadoop jar hadoop-*-examples.jar wordcount input output cat output/* a 3 b 3 c 2
サンプルをもう一つ試します。
cat > problem.dat <<'EOF' 1 ? ? ? ? 7 ? 9 ? ? 3 ? ? 2 ? ? ? 8 ? ? 9 6 ? ? 5 ? ? ? ? 5 3 ? ? 9 ? ? ? 1 ? ? 8 ? ? ? 2 6 ? ? ? ? 4 ? ? ? 3 ? ? ? ? ? ? 1 ? ? 4 ? ? ? ? ? ? 7 ? ? 7 ? ? ? 3 ? ? EOF
この数独(Ai Escargot)は、サンプルのsudokuを使って次のように解けます(ファイルの形式はsrc/examples/org/apache/hadoop/examples/dancing/puzzle1.dtaを参照)。
bin/hadoop jar hadoop-*-examples.jar sudoku problem.dat 1 6 2 8 5 7 4 9 3 5 3 4 1 2 9 6 7 8 7 8 9 6 4 3 5 2 1 4 7 5 3 1 2 9 8 6 9 1 3 5 8 6 7 4 2 6 2 8 7 9 4 1 3 5 3 5 6 4 7 8 2 1 9 2 4 1 9 3 5 8 6 7 8 9 7 2 6 1 3 5 4 Found 1 solutions
つづく
- Hadoop コードのビルド方法
- 疑似分散モード
- Eclipseプラグイン
- 完全分散モード
- Cloudera’s Distribution for Hadoop