Hadoopをインストールしたのでメモ。
野良HadoopとportsのHadoop
Hadoopを野良で入れるか、portsから入れるか。
結局portsにした。その訳は。
hadoopはJavaで動作する。
ということは、Javaさえ入っていれば、インストールに特殊な手間の必要なくhadoopが動作するはず。
だからインストールを扱う記事、blog等々はhadoopをダウンロードしてtarで展開して…、というものがほとんど。
FreeBSDでだってそれは同じ。
しかしFreeBSDでは、hadoopがportsに収録されている。
portsだと依存するportsを一括で入れてくれるし、ユーザ追加や権限設定なども自動でしてくれる。
便利な一方、世の中の記事とは違うところ(おもにファイル配置)が出てきたり、ひょっとすると最新版を使えないリスクもある。
どっちもどっちだが、hadoopが初めてならportsから入れるのが良いと判断した。
Javaなど依存portsのインストールが面倒だし、そもそもやりたいことはHadoopのセットアップではなくてその先にあるわけだから。
なお2013/7/23時点でportsのhadoopは1.0.0の模様。
hadoopのインストール
ports、と言っておきながらなんだけど、けっこう量があるのでスピード重視でpackageから入れた。
まずpackageの入手先を近所のftpに設定する。~/.profileに書いとけ。
PACKAGEROOT="ftp://ftp2.jp.freebsd.org";export PACKAGEROOT
sudoを使うならvisudoで以下の行をアンコメントしておく。
Defaults env_keep += "PKG_PATH PKG_DBDIR PKG_TMPDIR TMPDIR PACKAGEROOT PACKAGESITE PKGDIR FTP_PASSIVE_MODE"
インストール。あそうそう、bashとrsyncも忘れずにね。
$ sudo pkg_add -r bash rsync hadoop
しばらく放置。
事前準備
一式が入ったのだが、hadoopを動かす前に準備がいる。
OpenJDK向け設定、ホスト名の設定、JAVA_HOMEの設定。
OpenJDK向けの設定
OpenJDKをインストールすると以下の表示が現れる。
素直に設定する。
===============================================================
This OpenJDK implementation requires fdescfs(5) mounted on /dev/fd and
procfs(5) mounted on /proc.
If you have not done it yet, please do the following:
mount -t fdescfs fdesc /dev/fd
mount -t procfs proc /proc
To make it permanent, you need the following lines in /etc/fstab:
fdesc /dev/fd fdescfs rw 0 0
proc /proc procfs rw 0 0
===============================================================
以下のように。
$ sudo mount -t fdescfs fdesc /dev/fd
$ sudo mount -t procfs proc /proc
$ mount
/dev/da0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
fdescfs on /dev/fd (fdescfs)
procfs on /proc (procfs, local)
/etc/fstabにも以下の通り記載しておく(空白はタブで)
fdesc /dev/fd fdescfs rw 0 0
proc /proc procfs rw 0 0
ホスト名の設定
hadoopはhostnameが解決できないと動作しない。
/etc/hostsにhostnameの記載があるか確認して、なければ加える。
DHCPでIPアドレス取得しているなら、127.0.0.1のところにホスト名を入れる。
以下はhostnameがvanillaの場合
127.0.0.1 localhost localhost.my.domain vanilla
JAVA_HOMEの設定
portsからHadoopをインストールしているなら不要。
/usr/local/etc/hadoop/envvars.d/000.java_home.envでJAVA_HOMEを設定している。
そして000.java_home.envは起動の都度、読み込まれる(後述)。
export JAVA_HOME=${JAVA_HOME:-/usr/local/openjdk6}
portsから入れていないんだったら、hadoopを使うユーザの~/.profileで設定しておく。
JAVA_HOME=/usr/local/openjdk6;export JAVA_HOME
ファイル配置
ファイル配置の確認。
portsから入れると、FreeBSDの流儀に沿ってファイルが配置される。
openjdk6の場所
/usr/local/openjdk6
hadoop関連
各ディレクトリの中身
openjdk6
$ ls /usr/local/openjdk6/
ASSEMBLY_EXCEPTION demo man
LICENSE include sample
THIRD_PARTY_README jre src.zip bin lib
hadoop関連ファイル
$ ls /usr/local/etc/hadoop
capacity-scheduler.xml hadoop-policy.xml
configuration.xsl hdfs-site.xml
core-site.xml log4j.properties
envvars.d mapred-queue-acls.xml
fair-scheduler.xml mapred-site.xml
hadoop-env.sh taskcontroller.cfg
hadoop-metrics2.properties
$ ls /usr/local/share/hadoop/
bin hadoop-core-1.0.0.jar lib
contrib hadoop-test-1.0.0.jar webapps
hadoop-ant-1.0.0.jar hadoop-tools-1.0.0.jar
$ ls /usr/local/share/examples/hadoop/
conf hdfs-default.xml
core-default.xml mapred-default.xml
hadoop-examples-1.0.0.jar
これでインストールはおしまい。
hadoopはこれだけでも動く。しかしその前に。
/usr/local/bin/hadoopってなんだ
FreeBSDのports特有のものと思うけど、/usr/local/bin/hadoopについて。
/usr/local/bin/hadoopを便宜的にhadoopコマンドと呼ぶ。
hadoop一式は/usr/local/share/hadoop下にあるのに一体これはなんだろう。
中身を見ればすぐ分かる。hadoopコマンドの正体はbashスクリプト。
もう少し見ると、環境変数を設定してからhadoopの実体を呼ぶwrapperであると分かる。
と同時に、環境変数の設定は/usr/local/etc/hadoop/envvars.dの下に置いておけばよいと言う点も分かる。
#!/usr/bin/env bash
for i in `ls /usr/local/etc/hadoop/envvars.d/*.env`
do
. ${i}
done
exec /usr/local/share/hadoop/bin/hadoop $@
続き
[FreeBSD] portsのHadoopで分散(x-distributed)モードを動かす準備
[Hadoop]Hadoop 擬似分散(Psuedo-distributed)モードの設定
[Hadoop]擬似分散モードで実験
[Hadoop] 擬似分散モードから完全分散モードへ(データノードの追加)