Macでhadoopをちょっとだけ動かしてみる

  • 59
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

環境

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を編集。

libexec/etc/hadoop/core-site.xml
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
</configuration>
libexec/etc/hadoop/hdfs-site.xml
<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にアクセスすると、こんな感じの画面が見れる。

スクリーンショット 2014-05-03 18.51.53.png

YARN

YARN (Yet-Another-Resource-Negotiator) に関する設定。

libexec/etc/hadoop/yarn-site.xml
<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>
libexec/etc/hadoop/mapred-site.xml
<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にアクセスすると、こんな感じの画面が見れる。
まだ見方はよくわかってない。。

スクリーンショット 2014-05-03 18.59.28.png

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

擬似分散モードでもちゃんと動いた。