会社で hadoop を使うことになりそうだ
管理などは自分でやらなくて済むが、わからないので手元のマシンで実験してみることにする
/opt/hadoop に hadoop-0.20.203.0rc1 をインストール
[hadoop インストール]
$ cd /opt/
# tar -zxvf hadoop-0.20.203.0rc1.tar.gz
# mv hadoop-0.20.203.0rc1 hadoop
[/hadoop インストール]
[java インストール]
Momonga Linux では gcj など入っている場合があるが、
oracle の java を使うことにする
ダウンロードしてきたのは、jdk-7-linux-i586.rpm
# rpm -ivh jdk-7-linux-i586.rpm
インストールすると、
/usr/java/jdk1.7.0 にモノが入る
[/java インストール]
[javaのパス設定]
Momonga Linux の場合、/etc/alternatives によくリプレースされそうなコマンドが並んでいる
java 系のコマンドもここに入っている可能性がある。
alternatives の中に設定されるようにしてみる
下記のシェルスクリプトを実行してみる(未テスト)
for i in /usr/java/jdk1.7.0/bin/* do BNAME=`basename ${i}` [ -f /etc/alternatives/${BNAME} ] && rm -rf /etc/alternatives/${BNAME} ln -s ${i} /etc/alternatives/${BNAME} if [ -f /usr/bin/${BNAME} ] || [ -L /usr/bin/${BNAME} ] ; then rm -rf /usr/bin/${BNAME} ln -s /etc/alternatives/${BNAME} /usr/bin/${BNAME} fi done
環境変数 JAVA_HOME は後ほど設定する /opt/hadoop/conf/hadoop-env.sh に
設定すれば問題なく動いたので書いてない。
[/javaのパス設定]
[/etc/hosts の設定]
/etc/hosts にマシンのIPたちを書いておく
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.1.1 master-machine 172.16.1.11 slave-machine-11 172.16.1.12 slave-machine-12 172.16.1.13 slave-machine-13 172.16.1.14 slave-machine-14 172.16.1.15 slave-machine-15
[//etc/hosts の設定]
[hadoop の設定(マスター・スレーブ編)]
設定するファイルは下記4つ
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml
最初に、/opt/hadoop/conf/hadoop-env.sh を設定する
jdk の場所と メモリがないので HEAPSIZE を低めに設定する。
# export JAVA_HOME=/usr/lib/j2sdk1.6-sun export JAVA_HOME=/usr/java/jdk1.7.0 # export HADOOP_HEAPSIZE=2000 export HADOOP_HEAPSIZE=256
次に、core-site.xml を記述する
ユーザー毎にディレクトリを分けるため、hadoop.tmp.dir を設定する。
設定しとけば quota で制限かけられそうですもんね。
fs.default.name は、マスターマシンの設定しておけばOKです。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/tmp/${user.name}</value> </property> <property> <name>fs.default.name</name> <value>hdfs://master-machine:9000</value> </property> </configuration>
次に hdfs-site.xml です。
データを何台のマシンに分割して持っておくかです。
シングルノードで実験するなら1にしておくしかないです。
今回は複数台のマシンがあるので2にしておきます。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
最後に mapred-site.xml です。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapred.job.tracker</name> <value>masuter-machine:9001</value> </property> </configuration>
[/hadoop の設定(マスター・スレーブ編)]
[hadoop の設定(マスター編)]
マスターにだけ2つだけファイルを作成する
/opt/hadoop/conf/masters
master-machine
/opet/hadoop/conf/slaves
slave-machine-11 slave-machine-12 slave-machine-13 slave-machine-14 slave-machine-15
[/hadoop の設定(マスター編)]
[環境変数設定]
エイリアスとパスの設定をする
面倒なので、/etc/profile.d/hadoop.sh を作成して対応してしまう
export PATH=$PATH:/opt/hadoop/bin:/opt/hadoop/contrib/hive/bin export HADOOP_HOME=/opt/hadoop alias dfsls='hadoop dfs -ls' alias dfscat='hadoop dfs -cat' alias dfsput='hadoop dfs -copyFromLocal' alias dfsget='hadoop dfs -copyToLocal'
[/環境変数設定]
[実行]
パス設定してあるので、下記コマンドで実行できる
# start-all.sh
面倒くさくなったら /etc/init.d/hadoop でも作ることにする
[/実行]
[自分でサンプルプログラムをコンパイル]
/opt/hadoop/src/examples 配下にサンプルプログラムがある
よく使われる WordCount は 下記ファイル。
/opt/hadoop/src/examples/org/apache/hadoop/examples/WordCount.java
$ mkdir /tmp/WordCount $ cp -a /opt/hadoop/src/examples/org/apache/hadoop/examples/WordCount.java /tmp $ cd /tmp $ javac -d /tmp/WordCount -classpath /opt/hadoop/hadoop-core-0.20.203.0.jar:/opt/hadoop/lib/commons-cli-1.2.jar WordCount.java $ mkdir WordCount/META-INF $ cat <<EOF > WordCount/META-INF/MANIFEST.MF Manifest-Version: 1.0 Main-Class: org/apache/hadoop/examples/WordCount EOF $ jar cmf WordCount/META-INF/MANIFEST.MF WordCount.jar -C WordCount .
[/自分でサンプルプログラムをコンパイル]
[サンプルプログラム実行]
WordCount をそのままコンパイルした
$ mkdir input $ cat <<EOF> input/hoge.txt hoge fuga hoge hoge fuga mokyu hulu EOF $ dfsput input $ hadoop jar WordCount.jar input output
[/サンプルプログラム実行]