Hadoop を使ってみる

インストール

http://hadoop.apache.org/core/ から、最新のバージョンをダウンロードします。

現時点では、0.20.0 が最新のため、そのバージョンであると仮定してこの先の記述を行います。

解凍し、conf/hadoop-env.sh で  JAVA_HOME を適切に設定してください。

Standaloneでつかってみる

まずは、Standalone でつかってみます。解凍したディレクトリに移動し、

$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-0.20.0-examples.jar grep input output ‘dfs[a-z.]+’
$ cat output/*

input ファイル以下のファイルから、dfs で始まるものの数をカウントします。出力先は output になります。

また、bin/hadoop を引数なしで実行することによって、hadoop スクリプトの実行方法が表示されます。

$ bin/hadoop
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
namenode -format     format the DFS filesystem
secondarynamenode    run the DFS secondary namenode
namenode             run the DFS namenode
datanode             run a DFS datanode
dfsadmin             run a DFS admin client
mradmin              run a Map-Reduce admin client
fsck                 run a DFS filesystem checking utility
fs                   run a generic filesystem user client
balancer             run a cluster balancing utility
jobtracker           run the MapReduce job Tracker node
pipes                run a Pipes job
tasktracker          run a MapReduce task Tracker node
job                  manipulate MapReduce jobs
queue                get information regarding JobQueues
version              print the version
jar <jar>            run a jar file
distcp <srcurl> <desturl> copy file or directories recursively
archive -archiveName NAME <src>* <dest> create a hadoop archive
daemonlog            get/set the log level for each daemon
or
CLASSNAME            run the class named CLASSNAME
Most commands print help when invoked w/o parameters.

複数マシンで動かす

ここでは、host1 と host2 というマシンで動かすこととします。host1 を master とします。

また、パスワードなしで ssh できるようにしてあるとします。

設定

まず、環境変数として、.bashrc などで、HADOOP_HOME を設定します。

その後、

conf/masters に、

host1

conf/slaves に、

host1

host2

conf/core-site.xml に、

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://host1:9000</value>
</property>
</configuration>

conf/mapred-site.xml に

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://host1:9001</value>
</property>
</configuration>

と記述します。

細かい設定に関しては、http://hadoop.apache.org/core/docs/current/cluster_setup.html を参照してください。

実行

まず、

$ bin/hadoop namenode -format

で、分散ファイルシステムをフォーマットします。

Hadoop のデーモンを起動します。

$ bin/start-all.sh

次に、

$ bin/hadoop fs -put conf input

を行い、conf ファイルの中身を分散ファイルシステム上の input ディレクトリにコピーします。

分散ファイルシステム上のファイルは直接扱うことができず、bin/hadoop fs を介して行います。ls を行うには、

$ bin/hadoop fs -ls

ですし、mkdir するためには、

$ bin/hadoop fs -mkdir

になります。bin/hadoop fs を引数なしで実行することで、可能なオプションが表示されます。

このコピーしたファイルに対して、

$ bin/hadoop jar hadoop-0.20.0-examples.jar grep input output ‘dfs[a-z.]+’

を行い、先ほどと同様に、input ファイル以下のファイルから、dfs で始まるものの数をカウントします。出力先は output になります。

この内容をみるには、以下のようにします。

$ bin/hadoop fs -get output output
$ cat output/*

もしくは、

$ bin/hadoop fs -cat output/*

でみることができます。

最後に、Hadoop のデーモンを終了します。

$ bin/start-all.sh

コメントをどうぞ