2008/10/05

Hadoopをインストール

先日のOSC2008でHadoopのセッションを聞いてきたのですが、イマイチしっくりきませんでした。
一緒に紹介されたLustreという分散ファイルシステムの方が良いのでは?(POSIX互換だし)と思っているのですが、話題にされるには何か理由があるだろうということでちょっとインストールしてみつつ、理解を深めてみようかと思います。

ちなみに以下の記事を参考にしました。というより下記の記事の手順以上のことはしてません。


まず、JDKをインストールします。
yumだとgcjが入る模様なので、Sunのサイトからダウンロードしてきました。
バージョンは6 Update7でした。

次に、SSHでlocalhostにパスワードなしで入れるようにします。
下記のような操作を行います。

$ ssh-keygen -t rsa -P ""
$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys


ちなみに.ssh/authorized_keysがない場合は作成後パーミッションを600にしておきます。
これでパスワードなしで入ることができるようになります。

次にHadoopをダウンロードします。
Hadoop CoreというのがHadoopの本体なようです。
バージョンは私が検証したときは0.18.1でした。
ダウンロードしたら、展開しディレクトリに入ります。
ディレクトリ以下のconf/hadoop-env.shのJAVA_HOMEを設定します。
私の場合は/usr/java/jdk1.6.0_07に設定しました。
次にconf/hadoop-default.xmlをconf/hadoop-site.xmlにコピーし、hadoop-site.xmlを編集します。
たくさん項目がありますが、下記の3つについて編集を行いました。

<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop</value>
</property>

<property>
<name>fs.default.name</name>
<value>hdfs://localhost:54310</value>
</property>

<property>
<name>mapred.job.tracker
<value>localhost:54311
</property>


いろいろ設定できるらしいですが、あとで調べてみます。
とりあえず今はこのまま進めます。

次にフォーマットと起動を行います。
./bin/hadoop namenode -formatでフォーマットを行い、./bin/start-all.shで起動することができます。
停止する際は./bin/stop-all.shで停止することができます。
起動確認はjpsがなかったので、psとnetstatで確認しました。

とりあえず付属のサンプルを使って試してみます。
ファイル中の文字列出現数を計測するサンプルを実行してみます。
$ mkdir inputs
$ cat > inputs/file1
hoge hoge hoge fuga fuga
$ ./bin/hadoop dfs -copyFromLocal inputs inputs/
$ ./bin/hadoop dfs -ls
Found 1 items
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:49 /user/hiroki/inputs
$ ./bin/hadoop jar hadoop-0.18.1-examples.jar wordcount inputs outputs
08/10/05 21:51:11 INFO mapred.FileInputFormat: Total input paths to process : 1
08/10/05 21:51:11 INFO mapred.FileInputFormat: Total input paths to process : 1
08/10/05 21:51:11 INFO mapred.JobClient: Running job: job_200810052142_0001
08/10/05 21:51:12 INFO mapred.JobClient: map 0% reduce 0%
08/10/05 21:51:24 INFO mapred.JobClient: map 100% reduce 0%
08/10/05 21:51:39 INFO mapred.JobClient: Job complete: job_200810052142_0001
08/10/05 21:51:39 INFO mapred.JobClient: Counters: 16
08/10/05 21:51:39 INFO mapred.JobClient: File Systems
08/10/05 21:51:39 INFO mapred.JobClient: HDFS bytes read=39
08/10/05 21:51:39 INFO mapred.JobClient: HDFS bytes written=14
08/10/05 21:51:39 INFO mapred.JobClient: Local bytes read=36
08/10/05 21:51:39 INFO mapred.JobClient: Local bytes written=158
08/10/05 21:51:39 INFO mapred.JobClient: Job Counters
08/10/05 21:51:39 INFO mapred.JobClient: Launched reduce tasks=1
08/10/05 21:51:39 INFO mapred.JobClient: Launched map tasks=2
08/10/05 21:51:39 INFO mapred.JobClient: Data-local map tasks=2
08/10/05 21:51:39 INFO mapred.JobClient: Map-Reduce Framework
08/10/05 21:51:39 INFO mapred.JobClient: Reduce input groups=2
08/10/05 21:51:39 INFO mapred.JobClient: Combine output records=4
08/10/05 21:51:39 INFO mapred.JobClient: Map input records=1
08/10/05 21:51:39 INFO mapred.JobClient: Reduce output records=2
08/10/05 21:51:39 INFO mapred.JobClient: Map output bytes=45
08/10/05 21:51:39 INFO mapred.JobClient: Map input bytes=25
08/10/05 21:51:39 INFO mapred.JobClient: Combine input records=7
08/10/05 21:51:39 INFO mapred.JobClient: Map output records=5
08/10/05 21:51:39 INFO mapred.JobClient: Reduce input records=2
$ ./bin/hadoop dfs -ls
Found 2 items
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:49 /user/hiroki/inputs
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:51 /user/hiroki/outputs
$ ./bin/hadoop dfs -ls outputs
Found 2 items
drwxr-xr-x - hiroki supergroup 0 2008-10-05 21:51 /user/hiroki/outputs/_logs
-rw-r--r-- 3 hiroki supergroup 14 2008-10-05 21:51 /user/hiroki/outputs/part-00000
$ ./bin/hadoop dfs -cat outputs/part-00000
fuga 2
hoge 3


ふむふむ、確かにできている。
これ実態はどこにいるんでしょうか。
もしかしてhadoop.tmp.dir?
とすると、/tmp以下はめちゃくちゃヤバいですね。
とりあえず今回は動いているところを見ることが目的だったので、もう一度資料を見直してみます。

いまいちHadoopの力を享受できている気がしないので、もうちょっと調べてみます。
あと、そもそもMapReduceの話とかももう少し詳しく調べてみようと思います。

0 件のコメント: