水曜日 2 25, 2009

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 ダウンロード

■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 #

コメント
  • HTML文法 不許可