Hadoopの導入方法(スタンドアロンモード)

Hadoop (大型本)Googleが2004年に提唱した分散処理技術MapReduceがあると、手続きをmapとreduceという2つの形式に分けて記述しさえすれば、データを複数の計算機で分散処理できるようになります。

Googleが利用しているMapReduceの実装は公開されていませんが、Hadoopというオープンソースの実装を利用することで、MapReduceを簡単に試すことができます。具体的な方法は以下の通りです(GNU/Linuxの場合)。詳細はクイックスタートを参照。

  1. SunのJDKをインストールする
  2. 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
    
  3. 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

つづく