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 の中に設定されるようにしてみる
下記のシェルスクリプトを実行してみる(未テスト)

<br />
for i in /usr/java/jdk1.7.0/bin/*<br />
do<br />
    BNAME=`basename ${i}`<br />
    [ -f /etc/alternatives/${BNAME} ] &amp;&amp; rm -rf /etc/alternatives/${BNAME}<br />
    ln -s ${i} /etc/alternatives/${BNAME}<br />
    if [ -f /usr/bin/${BNAME} ] || [ -L /usr/bin/${BNAME} ] ; then<br />
        rm -rf /usr/bin/${BNAME}<br />
        ln -s /etc/alternatives/${BNAME} /usr/bin/${BNAME}<br />
    fi<br />
done<br />

環境変数 JAVA_HOME は後ほど設定する /opt/hadoop/conf/hadoop-env.sh に
設定すれば問題なく動いたので書いてない。
[/javaのパス設定]

[/etc/hosts の設定]
/etc/hosts にマシンのIPたちを書いておく

<br />
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4<br />
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6</p>
<p>172.16.1.1  master-machine<br />
172.16.1.11 slave-machine-11<br />
172.16.1.12 slave-machine-12<br />
172.16.1.13 slave-machine-13<br />
172.16.1.14 slave-machine-14<br />
172.16.1.15 slave-machine-15<br />

[//etc/hosts の設定]

[hadoop の設定(マスター・スレーブ編)]
設定するファイルは下記4つ
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-site.xml

最初に、/opt/hadoop/conf/hadoop-env.sh を設定する
jdk の場所と メモリがないので HEAPSIZE を低めに設定する。

<br />
# export JAVA_HOME=/usr/lib/j2sdk1.6-sun<br />
export JAVA_HOME=/usr/java/jdk1.7.0</p>
<p># export HADOOP_HEAPSIZE=2000<br />
export HADOOP_HEAPSIZE=256<br />

次に、core-site.xml を記述する
ユーザー毎にディレクトリを分けるため、hadoop.tmp.dir を設定する。
設定しとけば quota で制限かけられそうですもんね。
fs.default.name は、マスターマシンの設定しておけばOKです。

<br />
&lt;?xml version=&quot;1.0&quot;?&gt;<br />
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&gt;<br />
&lt;configuration&gt;<br />
    &lt;property&gt;<br />
        &lt;name&gt;hadoop.tmp.dir&lt;/name&gt;<br />
        &lt;value&gt;/opt/hadoop/tmp/${user.name}&lt;/value&gt;<br />
    &lt;/property&gt;<br />
    &lt;property&gt;<br />
        &lt;name&gt;fs.default.name&lt;/name&gt;<br />
        &lt;value&gt;hdfs://master-machine:9000&lt;/value&gt;<br />
    &lt;/property&gt;<br />
&lt;/configuration&gt;<br />

次に hdfs-site.xml です。
データを何台のマシンに分割して持っておくかです。
シングルノードで実験するなら1にしておくしかないです。
今回は複数台のマシンがあるので2にしておきます。

<br />
&lt;?xml version=&quot;1.0&quot;?&gt;<br />
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&gt;<br />
&lt;configuration&gt;<br />
    &lt;property&gt;<br />
        &lt;name&gt;dfs.replication&lt;/name&gt;<br />
        &lt;value&gt;2&lt;/value&gt;<br />
    &lt;/property&gt;<br />
&lt;/configuration&gt;<br />

最後に mapred-site.xml です。

<br />
&lt;?xml version=&quot;1.0&quot;?&gt;<br />
&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;configuration.xsl&quot;?&gt;<br />
&lt;configuration&gt;<br />
    &lt;property&gt;<br />
        &lt;name&gt;mapred.job.tracker&lt;/name&gt;<br />
        &lt;value&gt;masuter-machine:9001&lt;/value&gt;<br />
    &lt;/property&gt;<br />
&lt;/configuration&gt;<br />

[/hadoop の設定(マスター・スレーブ編)]

[hadoop の設定(マスター編)]
マスターにだけ2つだけファイルを作成する

/opt/hadoop/conf/masters

<br />
master-machine<br />

/opet/hadoop/conf/slaves

<br />
slave-machine-11<br />
slave-machine-12<br />
slave-machine-13<br />
slave-machine-14<br />
slave-machine-15<br />

[/hadoop の設定(マスター編)]

[環境変数設定]
エイリアスとパスの設定をする
面倒なので、/etc/profile.d/hadoop.sh を作成して対応してしまう

<br />
export PATH=$PATH:/opt/hadoop/bin:/opt/hadoop/contrib/hive/bin<br />
export HADOOP_HOME=/opt/hadoop</p>
<p>alias dfsls='hadoop dfs -ls'<br />
alias dfscat='hadoop dfs -cat'<br />
alias dfsput='hadoop dfs -copyFromLocal'<br />
alias dfsget='hadoop dfs -copyToLocal'<br />

[/環境変数設定]

[実行]
パス設定してあるので、下記コマンドで実行できる

<br />
# start-all.sh<br />

面倒くさくなったら /etc/init.d/hadoop でも作ることにする
[/実行]

[自分でサンプルプログラムをコンパイル]
/opt/hadoop/src/examples 配下にサンプルプログラムがある
よく使われる WordCount は 下記ファイル。
/opt/hadoop/src/examples/org/apache/hadoop/examples/WordCount.java

<br />
$ mkdir /tmp/WordCount<br />
$ cp -a /opt/hadoop/src/examples/org/apache/hadoop/examples/WordCount.java /tmp<br />
$ cd /tmp<br />
$ javac -d /tmp/WordCount -classpath /opt/hadoop/hadoop-core-0.20.203.0.jar:/opt/hadoop/lib/commons-cli-1.2.jar WordCount.java<br />
$ mkdir WordCount/META-INF<br />
$ cat &lt;&lt;EOF &gt; WordCount/META-INF/MANIFEST.MF<br />
Manifest-Version: 1.0<br />
Main-Class: org/apache/hadoop/examples/WordCount<br />
EOF<br />
$ jar cmf WordCount/META-INF/MANIFEST.MF WordCount.jar -C WordCount .<br />

[/自分でサンプルプログラムをコンパイル]

[サンプルプログラム実行]
WordCount をそのままコンパイルした

<br />
$ mkdir input<br />
$ cat &lt;&lt;EOF&gt; input/hoge.txt<br />
hoge<br />
fuga<br />
hoge<br />
hoge<br />
fuga<br />
mokyu<br />
hulu<br />
EOF<br />
$ dfsput input<br />
$ hadoop jar WordCount.jar input output<br />

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

コメントを残す