2009/11/29

Ubuntu 8.04 LTSでhadoop環境構築

■javaインストール

$ sudo apt-get install sun-java6-*


■javaのバージョン確認

$ java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) Client VM (build 11.0-b15, mixed mode, sharing)


■sun java使う設定

$ sudo update-alternatives --config java



■phpインストール(hadoop streamingでphpを動かす場合)

$ sudo apt-get install php5 php5-cli


■ユーザー追加

$ sudo adduser hadoop


■ssh_configが変だったので修正(なぜ?)

$ sudo vi /etc/ssh/ssh_config
PermitRootLoginをコメントアウト


■hadoopユーザ設定(パスなしユーザ設定)

$su - hadoop
$ssh-keygen -t rsa -P ""
$cat .ssh/id_rsa.pub >> .ssh/authorized_keys


■パスなしログイン確認

$ ssh localhost


■hadoopダウンロード、展開

$ wget http://www.meisei-u.ac.jp/mirror/apache/dist/hadoop/core/hadoop-0.20.1/hadoop-0.20.1.tar.gz
$ tar xvzf hadoop-0.20.1.tar.gz
$ ln -s hadoop-0.20.1 hadoop
$ vi hadoop/conf/hadoop-env.sh
export JAVA_HOME=/usr/lib/jvm/java-6-sun
$ cd hadoop


■hadoopテスト(シングルモード)

$ mkdir input
$ cp conf/*.xml input
$ bin/hadoop jar hadoop-*-examples.jar grep input output 'dfs[a-z.]+'
$ cat output/*


■hadoopテスト(疑似分散モード)

$ cd hadoop


☆以下のファイル編集

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>


conf/hdfs-site.xml:

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>


conf/mapred-site.xml:

<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>


■フォーマット

$ bin/hadoop namenode -format


■起動

$ bin/start-all.sh


■動作確認

NameNode :http://localhost:50070/
JobTracker:http://localhost:50030/


■起動確認

$ jps
3815 DataNode
3964 JobTracker
4059 TaskTracker
3894 SecondaryNameNode
3736 NameNode
12858 Jps


■テストデータ作成
・サンプルデータ

$ cat /home/hadoop/sample/sample.txt
a b c d e f g
a b c d e f
a b c d e
a b c d
a b c
a b
a


・phpでmap処理:標準入力の文字列を空白で分割して、タブ区切りの行として出力

#!/usr/bin/php
while ( !feof(STDIN) ) {
$line = trim(fgets(STDIN));
foreach ( preg_split('/\s+/', $line) as $word ) {
if ( $word !== '' ) {
echo "${word}\t1\n";
}
}
}
?>


・phpでreduce処理:標準入力の文字列を数え上げる

$ cat /home/hadoop/sample/reduce.php
#!/usr/bin/php
$value ) {
echo "${key}\t${value}\n";
}
?>


■テスト
・テストデータ登録

$ cd hadoop
$ bin/hadoop fs -put /home/hadoop/sample/sample.txt input


・実行

$ bin/hadoop jar contrib/streaming/hadoop-0.20.1-streaming.jar \
-input input/sample.txt \
-output output_sample \
-mapper 'php /home/hadoop/sample/map.php' \
-reducer 'php /home/hadoop/sample/reduce.php'


・結果表示:単語ごとに出現回数表示

$ bin/hadoop fs -cat output_sample/*
a 7
b 6
c 5
d 4
e 3
f 2
g 1


■ストップ

$ bin/stop-all.sh

0 件のコメント: