end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

分散ファイルシステムhadoopに触れてみる

googleの分散fileシステムとして有名なGoogle File Systemには、オープンソースクローンのhadoopというものが存在するするそうです。分散ファイルシステム程度であれば「Googleを支える技術」で知っていますが、今のところ、大規模分散ファイルシステムを必要としていない為、その詳細までは把握していません。
そこで今回は、せっかくの機会ですので、hadoopに触れてみようと思います。

http://codezine.jp/article/corner/30

参考サイト

今回はhadoopのinstallまでを codezinehadoopのドキュメントを参考に進めます。
http://codezine.jp/article/detail/2485

前準備(パスワードなしlogin, /etc/hosts )

codezinehadoopのドキュメントによれば、hadoopにはsshrsyncの他にパスワードなしlogin や 自hostのipアドレスが必要です。

パスワードなしlogin

「パスワードなしlogin」の設定手順は様々なサイトでも紹介されていますが、次のエントリにも記載しているので参考にしてください。

http://d.hatena.ne.jp/end0tknr/20081213/1229168575

colinuxの場合、自hostのipアドレスを/etc/hostsに登録

今回はcolinux環境にinstallしますが、hostnameからipアドレスが逆引きできない場合、hadoopのformat時等に次のように java.net.UnknownHostException が発生します。もし、installするhostをdnsに登録していない場合、/etc/hostsに自hostのipアドレスを登録してください。

[endo@colinux hadoop]$ ./bin/hadoop namenode -format
08/12/14 13:57:23 INFO dfs.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = java.net.UnknownHostException: colinux: colinux
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.17.2.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.17 -r 684969; compiled by 'oom' on Wed Aug 20 22:29:32 UTC 2008
************************************************************/
08/12/14 13:57:23 INFO fs.FSNamesystem: fsOwner=endo,endo
08/12/14 13:57:23 INFO fs.FSNamesystem: supergroup=supergroup
08/12/14 13:57:23 INFO fs.FSNamesystem: isPermissionEnabled=true
08/12/14 13:57:33 INFO util.MetricsUtil: Unable to obtain hostName
java.net.UnknownHostException: colinux: colinux
        at java.net.InetAddress.getLocalHost(InetAddress.java:1353)
        at org.apache.hadoop.metrics.MetricsUtil.getHostName(MetricsUtil.java:86)
        at org.apache.hadoop.metrics.MetricsUtil.createRecord(MetricsUtil.java:75)
        at org.apache.hadoop.dfs.FSDirectory.initialize(FSDirectory.java:67)
        at org.apache.hadoop.dfs.FSDirectory.<init>(FSDirectory.java:62)
        at org.apache.hadoop.dfs.FSNamesystem.<init>(FSNamesystem.java:360)
        at org.apache.hadoop.dfs.NameNode.format(NameNode.java:763)
        at org.apache.hadoop.dfs.NameNode.createNameNode(NameNode.java:838)
        at org.apache.hadoop.dfs.NameNode.main(NameNode.java:855)
08/12/14 13:57:33 INFO dfs.Storage: Storage directory /tmp/hadoop-endo/dfs/name has been successfully formatted.
08/12/14 13:57:33 INFO dfs.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at java.net.UnknownHostException: colinux: colinux
************************************************************/
[endo@colinux hadoop]$

hadoopの入手

http://hadoop.apache.org/

現在(2008/12/14)のhadoopの最新版は ver.0.19.0でしたが、今回は安定版であるver.0.17.2.1を使用することにしました。

hadoopのinstall

hadoopjavaで書かれていますが、installといってもconfigureやmakeは必要なくtar.gzを展開して、配備するだけで完了です。

[endo@colinux local]$ pwd
/home/endo/local
[endo@colinux local]$ tar -zxvf ~endo/tmp/hadoop-0.19.0.tar.gz
[endo@colinux local]$ ln -s hadoop-0.19.0 hadoop

hadoopの設定

JAVA_HOMEの設定、又はconf/hadoop-env.shの編集&実行

hadoopはjdk1.6以上?を必要としますが、環境変数:JAVA_HOMEも必要とします。hadoop-env.shを次のように編集して、これを実行することで環境変数を設定しても
構わないと思います。

conf/hadoop-site.xml

最低限動作させる為には、hadoop-default.xmlをconf/hadoop-site.xmlにcopyし次のように編集してください。

[endo@colinux conf]$ diff hadoop-default.xml hadoop-site.xml
<   <value>file:///</value>
>   <value>hdfs://localhost:54310</value>

<   <value>local</value>
>   <value>localhost:54311</value>

hadoopのformat

[endo@colinux hadoop]$ ./bin/hadoop namenode -format
08/12/28 14:49:51 INFO dfs.NameNode: STARTUP_MSG: 
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = colinux/192.168.0.5
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 0.17.2.1
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.17 -r 684969; compiled by 'oom' on Wed Aug 20 22:29:32 UTC 2008
************************************************************/
08/12/28 14:49:52 INFO fs.FSNamesystem: fsOwner=endo,endo
08/12/28 14:49:52 INFO fs.FSNamesystem: supergroup=supergroup
08/12/28 14:49:52 INFO fs.FSNamesystem: isPermissionEnabled=true
08/12/28 14:49:52 INFO dfs.Storage: Storage directory /tmp/hadoop-endo/dfs/name has been successfully formatted.
08/12/28 14:49:52 INFO dfs.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at colinux/192.168.0.5
************************************************************/
[endo@colinux hadoop]$ 

hadoopの起動と動作確認

[endo@colinux hadoop]$ ./bin/start-all.sh 
namenode running as process 30588. Stop it first.
localhost: starting datanode, logging to /home/endo/local/hadoop/bin/../logs/hadoop-endo-datanode-colinux.out
localhost: starting secondarynamenode, logging to /home/endo/local/hadoop/bin/../logs/hadoop-endo-secondarynamenode-colinux.out
jobtracker running as process 30802. Stop it first.
localhost: starting tasktracker, logging to /home/endo/local/hadoop/bin/../logs/hadoop-endo-tasktracker-colinux.out
[endo@colinux hadoop]$ /usr/local/java/bin/jps 
31090 DataNode
30802 JobTracker
31316 TaskTracker
30588 NameNode
31423 Jps
31191 SecondaryNameNode
[endo@colinux hadoop]$