Hadoop を設定する

Pocket

会社で 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

[/サンプルプログラム実行]

コメントを残す