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