MacPortsでHadoopを動かす

HadoopMacPortsが登録されたので、次のように、最新の状態に更新すると利用できます。

 $ sudo port selfupdate
 ... 
 $ sudo port install hadoop
 --->  Fetching hadoop
 --->  Verifying checksum(s) for hadoop
 --->  Extracting hadoop
 --->  Applying patches to hadoop
 --->  Configuring hadoop
 --->  Building hadoop
 --->  Staging hadoop into destroot
 --->  Installing hadoop @0.20.203.0_0+pseudo
 --->  Activating hadoop @0.20.203.0_0+pseudo
 ********************************************************
 * To run on a single-node in a pseudo-distributed mode:
 * 1) Turn on Remote Login (sshd):
 *  check 'System Preferences > Sharing > Remote Login'
 * 2) Format a new distributed-filesystem:
 *  $ hadoop-bin hadoop namenode -format
 * 3) Start the hadoop daemons:
 *  $ hadoop-bin start-all.sh
 * 4) Perform operations you like. To see examples:
 *  $ open file:///opt/local/share/java/hadoop-0.20.203.0/docs/single_node_setup.html
 * 5) When you're done, stop the daemons with:
 *  $ hadoop-bin stop-all.sh
 ********************************************************
 $

hadoopユーザ・グループ

インストールを実行すると、hadoopのユーザとグループが登録されます。hadoopユーザはsshログイン時にパスワード入力を省略する設定になっているので、一度localhostにログインしておけば、次回からログイン時の確認作業はなくなります。hadoopユーザのホームディレクトリは、/opt/local/var/hadoopです。

インストール先

Hadoopの配布ファイルは、/opt/local/share/java/hadoop-0.20.203.0 にインストールされて、このディレクトリがHADOOP_HOMEになります。

portをデフォルトでインストールすると、hadoop @0.20.203.0_0+pseudo とあるように、単一マシンの疑似分散モード(pseudo-distributed mode)の設定になります。設定ファイルは$HADOOP_HOME/confで、confはconf.pseudoへのリンクになっています。なお、mapやreduceのタスクは、CPUコア数+2まで同時に実行されます。例えば、デュアルコアのシングルCPUなら同時実行タスク数は4までです。

一時ディレクト

HDFSなどの一時的なファイルは、/opt/local/var/hadoop 以下に作られます。デフォルトの設定のように、リブートなどによってファイルが消えてしまうことはなく、hadoop以外のユーザでも簡単に使えるように、パーミッションの設定は無効にしています。ログは/opt/local/var/hadoop/logに記録されます。

実行スクリプト

Hadoopのコマンドを実行するために、ラッパスクリプト/opt/local/bin/hadoop-bin が用意されています。これを使うと、環境変数JAVA_HOMEとHADOOP_HOMEをあらかじめ設定しておく必要がなく、hadoopユーザ権限で$HADOOP_HOME/binにあるスクリプトを実行できます。プロセスの状態を確認するときは、sudo -u hadoop jps とします。

実行例:wordcount

インストール時にportの使い方について表示がありますが、最もお手軽な単語カウントの例を実行する手順は次のようになります。

$ hadoop-bin hadoop namenode -format
$ hadoop-bin start-all.sh
$ hadoop-bin hadoop fs -put /opt/local/share/java/hadoop-0.20.203.0/conf input
$ hadoop-bin hadoop jar /opt/local/share/java/hadoop-0.20.203.0/hadoop-examples-0.20.203.0.jar grep input output 'dfs[a-z.]+'
$ hadoop-bin hadoop fs -cat output/*
$ hadoop-bin stop-all.sh