環境
Mac OSX 10.9.2で試した。
$ java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
インストール
homebrew使う。v2.4.0がインストールされた。
$ brew install hadoop
$ brew info hadoop
hadoop: stable 2.4.0
http://hadoop.apache.org/
/usr/local/Cellar/hadoop/2.4.0 (5592 files, 236M) *
Built from source
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/hadoop.rb
==> Caveats
In Hadoop's config file:
/usr/local/Cellar/hadoop/2.4.0/libexec/etc/hadoop/hadoop-env.sh,
/usr/local/Cellar/hadoop/2.4.0/libexec/etc/hadoop/mapred-env.sh and
/usr/local/Cellar/hadoop/2.4.0/libexec/etc/hadoop/yarn-env.sh
$JAVA_HOME has been set to be the output of:
/usr/libexec/java_home
スタンドアロンで動かす
『Hadoopファーストガイド』読みながら進めてる。
hadoopがインストールされてるディレクトリまで移動
$ cd /usr/local/Cellar/hadoop/2.4.0
Hadoop組み込みの、ワードカウントを動かす。
入力ファイルを用意。
$ mkdir input
a b c
a a b c c c
計算を実行。
$ hadoop jar libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jar wordcount input output
(出力用のoutputディレクトリは勝手にできる)
output/part-r -00000
というファイルが生成されている。
a 3
b 2
c 4
ちゃんとワードカウントが動いたことが分かる。
擬似分散モードで動かす
localhostにSSHログインできるようにする
localhostにパスワード無しでSSHログインできるようにする必要があるらしい。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ ssh localhost
これでログインできればOK。
Macのシステム環境設定で、「共有」のリモートログインのところにチェックを入れておく必要がある。
設定ファイル追記、フォーマット
$ cd /usr/local/Cellar/hadoop/2.4.0
core-site.xml
, hdfs-site.xml
を編集。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
Hadoopの分散ファイルシステム、HDFSのフォーマット。
$ hdfs namenode -format
これで、/tmp/hadoop-<ユーザー名>/dfs/name
以下に、HDFSの管理ファイルが作られる。
起動
hadoopのパッケージに付いてるシェルスクリプトを使う。
$ sbin/start-dfs.sh
シェルが実行されると、Javaのプロセス (namenodeやdatanodeなど) が起動する。
起ち上がっているのは以下のプロセスたち。
$ jps
26353 Jps
26172 DataNode
26278 SecondaryNameNode
26084 NameNode
http://localhost:50070
にアクセスすると、こんな感じの画面が見れる。
YARN
YARN (Yet-Another-Resource-Negotiator) に関する設定。
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
起動のシェルスクリプトを実行。
$ sbin/start-yarn.sh
先ほどのプロセスに加え、ResourceManager, NodeManagerが起動している。
$ jps
26172 DataNode
26609 ResourceManager
26278 SecondaryNameNode
26084 NameNode
26745 Jps
26703 NodeManager
http://localhost:8088
にアクセスすると、こんな感じの画面が見れる。
まだ見方はよくわかってない。。
sbin/stop-dfs.sh
, sbin/stop-yarn.sh
で上記プロセスは停止できる。
処理の実行
$ hdfs dfs -mkdir /hadoop
HDFS上に(仮想)ディレクトリを作成。
hdfs dfs
コマンドのオプションはLinuxぽい感じ。
スタンドアロンモードの時に使ったinput
ディレクトリをHDFS上に置く。
$ hdfs dfs -put input /hadoop/input
先ほどと同様、wordcountの計算実行。
$ hadoop jar libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jar wordcount /hadoop/input /hadoop/output
$ hdfs dfs -cat /hadoop/output/part-r-00000
(中略)
a 3
b 2
c 4
擬似分散モードでもちゃんと動いた。