環境
インストール
Homebrewから入れます。
brew install hadoop
バージョン
公式によると、2017/05/22時点では2.8.0が最新版らしいです。
インストール先
入りました。
/usr/local/Cellar/hadoop/2.8.0
名前衝突
ちなみに、nodeパッケージマネージャーのyarn
をインストール済みの場合、名前衝突が起きます。
その結果、hadoop自体のインストールは終わりますが、brew link
が失敗している状態になります。
設定
hadoopをmac上で使い始める前にいくつかの設定を行います。
hadoop-env.shの編集
/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/hadoop-env.sh
にて、以下を、
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"
以下のように変更。
export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.security.krb5.kdc="
Core-site.xmlの編集
`/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/core-site.xml
の<conficuration />
を以下のように変更。
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/Cellar/hadoop/hdfs/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>
mapred-site.xmlの編集
/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/mapred-site.xml
の<conficuration />
を以下のように変更。
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9010</value> </property> </configuration>
ちなみに、自分の場合はファイル自体が無く、mapred-site.xml.template
というファイルがあったのでそれを複製しました。
hdfs-site.xmlの編集
/usr/local/Cellar/hadoop/2.8.0/libexec/etc/hadoop/hdfs-site.xml
の<conficuration />
を以下のように変更。
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
xx_profileの編集
~/.bash_profile
、~/.zshrc
等にaliasを追記します。
alias hstart="/usr/local/Cellar/hadoop/2.6.0/sbin/start-dfs.sh;/usr/local/Cellar/hadoop/2.6.0/sbin/start-yarn.sh" alias hstop="/usr/local/Cellar/hadoop/2.6.0/sbin/stop-yarn.sh;/usr/local/Cellar/hadoop/2.6.0/sbin/stop-dfs.sh"
ターミナル上で、aliasを再読込。
source ~/.profile
SSH Localhost
~/.ssh/id_rsa
と~/.ssh/id_rsa.pub
があるかどうかチェック。無ければ以下のコマンド。
ssh-keygen -t rsa
リモートログイン
Macの環境設定(system preference)をいじります。 環境設定 > 共有(Sharing) > リモートログイン(Remote Login)を有効にします。
SSH鍵認証
システムがログインを受け入れるようにします。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh localhost
ログインが成功します。exit
でログアウトです。
Hadoop起動
起動。
hstart
停止。
hstop
ブラウザで確認
無事にhadoopが起動していれば、以下のポートでそれぞれ様子を確認できます。
- Resource Manager: http://localhost:50070
- JobTracker: http://localhost:8088
- Specific Node Information: http://localhost:8042
参考にした記事
ここまでの手順で参考にした記事です。
単語数カウント
さて、Hadoopの世界でのHello Worldとも言われる、単語数カウントをやってみます。
ディレクトリ・ファイル作成
まず、材料となるファイルをローカルに作っておきます。ちなみに、今は、/usr/local/Celler/hadoop/2.8.0
にいる状態です。
mkdir input touch input/a.txt input/b.txt
ファイルに書き込みをします。
echo "a a b b b c b c" > input/a.txt echo "ab a b b c c c" > input/b.txt
次にHadoopを起動して、Hadoopのファイルシステム上にディレクトリとファイルを作成します。
hstart // 起動後… hadoop fs -mkdir /user/hoge/input hadoop fs -put input/a.txt input/ hadoop fs -put input/b.txt input/
put
はローカルにあるファイルをhadoopのファイルシステム上にコピーします。
その他のファイルシステム系のコマンドはhelpか以下のサイトからどうぞ。
ちなみに、ディレクトリ構造についてはブラウザからも確認できます。
http://localhost:50070/explorer.html#/
実行
コマンドを実行します。
hadoop jar libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar wordcount input output
上記のコマンドを実行すると、inputディレクトリにおいたファイルを読んで、outputディレクトリ以下に結果を吐き出します。(outputディレクトリは自動生成されます。)
生成されたoutput/part-r-00000
の中身は以下の通り。
a 3 ab 1 b 6 c 5
きちんと単語の数がカウントされていますね。