googleの分散fileシステムとして有名なGoogle File Systemには、オープンソースクローンのhadoopというものが存在するするそうです。分散ファイルシステム程度であれば「Googleを支える技術」で知っていますが、今のところ、大規模分散ファイルシステムを必要としていない為、その詳細までは把握していません。
そこで今回は、せっかくの機会ですので、hadoopに触れてみようと思います。
http://codezine.jp/article/corner/30
参考サイト
今回はhadoopのinstallまでを codezineとhadoopのドキュメントを参考に進めます。
http://codezine.jp/article/detail/2485
前準備(パスワードなしlogin, /etc/hosts )
codezineやhadoopのドキュメントによれば、hadoopにはsshやrsyncの他にパスワードなしlogin や 自hostのipアドレスが必要です。
パスワードなしlogin
「パスワードなしlogin」の設定手順は様々なサイトでも紹介されていますが、次のエントリにも記載しているので参考にしてください。
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のinstall
hadoopはjavaで書かれていますが、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の設定
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]$