Hadoop というと、分散環境ということで、マシンを複数用意しないといけないイメージがあり、なかなか手を付けられなかったのですが、OpenSolaris のプロジェクトの一つに OpenSolaris Hadoop LiveCD というものがあり、LiveCD 上で、しかも Solaris コンテナ(ゾーン)を使用して、Hadoop 環境を構築できるんです。
今回それを試してみました。
# そして、後で気づいたのですが、既に下道さんのブログに掲載されていたんですね。(^^;
# ほぼ同じような内容になってしまいますが、私の方にも載せておきます。
■そもそも Hadoop とは?
- 巨大なデータを扱うアプリケーションを簡単に開発するためのソフトウェアプラットフォームのこと
- Hadoopは大規模分散ファイルシステムHDFS(Hadoop Distributed File System)、および大規模分散計算フレームワークHadoop MapReduce Frameworkから構成されています。
- Google の基盤技術に対応させると前者はGoogle File System、後者はMapReduceに対応され、これらのオープンソースクローンにあたる。
- 分散ファイルシステムとは、複数のマシンのディスクを組み合わせて1つのファイルシステムとして見せる技術のこと
- MapReduce により、大規模なデータを複数の FileSplits に分割して、大量のマシンで並列に処理させることが可能になる。
Hadoop 環境は、 Amazon EC2 上の OpenSolaris の環境で使用可能とのことなので、こちらを利用するのも面白いかもしれませんね!
■OpenSolaris Hadoop LiveCD プロジェクト
■OpenSolaris Hadoop LiveCD ダウンロード
- http://opensolaris.org/os/project/livehadoop/Downloads/
- in-preview2-OSLH.iso をダウンロード、CD-R に焼く。
■OpenSolaris Hadoop LiveCD 用の PC スペック要件
- 1 台の x86-based PC or Mac computer
- CD-ROM ドライブ
- 少なくとも 1GB memory は必要。(768MB で試したら、LiveCD は起動したのですが、Hadoop コマンド実行しても上手く動作しませんでした。)
■今回使用する LiveCD のバージョンについて
- OpenSolaris snv79 (結構古い・・・。), including sparse Zone support
- Hadoop 0.17.1
- Java build 1.6.0_03-b05
■今回の Hadoop 環境の簡易構成図
■Hadoop お試し手順
1.まず OpenSolaris Hadoop LiveCD 起動
PCに作成した LiveCDを入れて起動。下記のようなデスクトップ画面が起動してくる。

ゾーンの状態確認
LiveCD の状態で(ハードディスクにインストールしない状態で)、ゾーンが作成、起動されている。LiveCD でゾーンを動作させる都合上、メモリを 1GB は必要なのだろうと考えられる。
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ zoneadm list -cv ID NAME STATUS PATH BRAND IP 0 global running / native shared 1 node1 running /zones/node1 native excl 2 node2 running /zones/node2 native excl |
既に LiveCD 上でゾーンが出来ている。
2.Hadoop コマンド実行
HDFS のフォーマット
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./hadoop namenode -format 09/02/24 09:31:17 INFO dfs.NameNode: STARTUP_MSG: /************************************************************ STARTUP_MSG: Starting NameNode STARTUP_MSG: host = localhost/127.0.0.1 STARTUP_MSG: args = [-format] STARTUP_MSG: version = 0.17.1 STARTUP_MSG: build = http://svn.apache.org/repos/asf/hadoop/core/branches/branch-0.17 -r 669344; compiled by 'hadoopqa' on Thu Jun 19 01:18:25 UTC 2008 ************************************************************/ 09/02/24 09:31:18 INFO fs.FSNamesystem: fsOwner=jack,staff 09/02/24 09:31:18 INFO fs.FSNamesystem: supergroup=supergroup 09/02/24 09:31:18 INFO fs.FSNamesystem: isPermissionEnabled=true 09/02/24 09:31:19 INFO dfs.Storage: Storage directory /tmp/hadoop-jack/dfs/name has been successfully formatted. 09/02/24 09:31:19 INFO dfs.NameNode: SHUTDOWN_MSG: /************************************************************ SHUTDOWN_MSG: Shutting down NameNode at localhost/127.0.0.1 ************************************************************/ jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ |
Hadoop dfs デーモンの起動
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./start-dfs.sh starting namenode, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-namenode-opensolaris.out 192.168.50.12: Warning: Permanently added '192.168.50.12' (RSA) to the list of known hosts. 192.168.50.11: Warning: Permanently added '192.168.50.11' (RSA) to the list of known hosts. 192.168.50.11: starting datanode, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-datanode-node1.out 192.168.50.12: starting datanode, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-datanode-node2.out 192.168.50.1: Warning: Permanently added '192.168.50.1' (RSA) to the list of known hosts. 192.168.50.1: starting secondarynamenode, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-secondarynamenode-opensolaris.out jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ |
Hadoop Map reduce デーモン起動
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./start-mapred.sh starting jobtracker, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-jobtracker-opensolaris.out 192.168.50.11: starting tasktracker, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-tasktracker-node1.out 192.168.50.12: starting tasktracker, logging to /opt/hadoop/hadoop-0.17.1/bin/../logs/hadoop-jack-tasktracker-node2.out jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./hadoop fs -mkdir /myinput jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./hadoop fs -ls /myinput |
ローカルから HDFS 上に適当なファイル(今回は xml ファイル)をコピーして、そのファイルに含まれるwordの出現回数をカウントするサンプルプログラム wordcount を実行してみる。
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./hadoop fs \ -copyFromLocal ../conf/*.xml /myinput jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./hadoop jar \ ../hadoop-0.17.1-examples.jar wordcount /myinput /myoutput 09/02/24 09:42:24 INFO mapred.FileInputFormat: Total input paths to process : 2 09/02/24 09:42:28 INFO mapred.JobClient: Running job: job_200902240938_0001 09/02/24 09:42:29 INFO mapred.JobClient: map 0% reduce 0% 09/02/24 09:42:38 INFO mapred.JobClient: map 66% reduce 0% 09/02/24 09:42:39 INFO mapred.JobClient: map 100% reduce 0% 09/02/24 09:42:44 INFO mapred.JobClient: map 100% reduce 11% 09/02/24 09:42:45 INFO mapred.JobClient: map 100% reduce 100% 09/02/24 09:42:46 INFO mapred.JobClient: Job complete: job_200902240938_0001 09/02/24 09:42:46 INFO mapred.JobClient: Counters: 16 09/02/24 09:42:46 INFO mapred.JobClient: File Systems 09/02/24 09:42:46 INFO mapred.JobClient: Local bytes read=40720 09/02/24 09:42:46 INFO mapred.JobClient: Local bytes written=81674 09/02/24 09:42:46 INFO mapred.JobClient: HDFS bytes read=45579 09/02/24 09:42:46 INFO mapred.JobClient: HDFS bytes written=19289 09/02/24 09:42:46 INFO mapred.JobClient: Job Counters 09/02/24 09:42:46 INFO mapred.JobClient: Launched map tasks=3 09/02/24 09:42:46 INFO mapred.JobClient: Launched reduce tasks=1 09/02/24 09:42:46 INFO mapred.JobClient: Data-local map tasks=3 09/02/24 09:42:46 INFO mapred.JobClient: Map-Reduce Framework 09/02/24 09:42:46 INFO mapred.JobClient: Map input records=1365 09/02/24 09:42:46 INFO mapred.JobClient: Map output records=4274 09/02/24 09:42:46 INFO mapred.JobClient: Map input bytes=42003 09/02/24 09:42:46 INFO mapred.JobClient: Map output bytes=56464 09/02/24 09:42:46 INFO mapred.JobClient: Combine input records=4274 09/02/24 09:42:46 INFO mapred.JobClient: Combine output records=1617 09/02/24 09:42:46 INFO mapred.JobClient: Reduce input groups=1216 09/02/24 09:42:46 INFO mapred.JobClient: Reduce input records=1617 09/02/24 09:42:46 INFO mapred.JobClient: Reduce output records=1216 jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ |
/myoutput ディレクトリ以下に作成された part-00000 ファイルを cat で見てみる。
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./hadoop fs -cat /myoutput/part-00000 | more
"_logs/history/" 1
"all".</description> 1
"block"(trace 1
"dir"(trac 1
"false", 1
"local", 2
"local". 2
"none". 1
"package.FactoryClassName". 1
"true" 1
"true", 1
$jobId 1
$jobStatus. 1
${hadoop.log.dir}/history. 1
'@' 2
'lost' 1
'value' 2
(4096 1
(DNS) 2
(JobTracker). 1
(fs.SCHEME.impl) 2
(host:port) 1
--- 途中省略 ---
words, 2
work 1
worker 2
working 1
would 1
write 1
writes 1
writing 3
x) 1
x. 1
x86), 1
you 2
your 1
zero 3
zero, 1
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin
|
それぞれの word の出現回数をちゃんと表示できている模様。
MapReduce デーモンの停止
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./stop-mapred.sh stopping jobtracker 192.168.50.11: stopping tasktracker 192.168.50.12: stopping tasktracker |
dfs デーモンの停止
jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ ./stop-dfs.sh stopping namenode 192.168.50.11: stopping datanode 192.168.50.12: stopping datanode 192.168.50.1: stopping secondarynamenode jack@opensolaris:/opt/hadoop/hadoop-0.17.1/bin$ |
以上で完了です。




やっぱりnative zoneなのですね:)
ipkg zoneを、Live CDの上で動かすのは苦労しましたもの・・・。
Posted by 瀧 on 2月月 25日, 2009年 at 07:16 午後 JST #
なるほど、そちらの方がお気になったのですね。(^^;
今回試した Hadoop 用の LiveCD は、snv_b79 なので、
最新の OpenSolaris b1** のモノと動作が多少異なる可能性が
ありますので、native と ipkg とで、どちらが良いか?は、私分かってないですね。。
Posted by funasaki on 2月月 26日, 2009年 at 02:06 午後 JST #