読者です 読者をやめる 読者になる 読者になる

夢とガラクタの集積場

落ちこぼれ三流エンジニアである管理人の夢想=『夢』と、潰えた夢=『ガラクタ』の集積場です。

Stormが使うZookeeperの中ってどうなっているの?

こんにちは。

最近テーマ・・・というのも無くなりつつあるので、
とりあえずその日その日で思いついた雑多ネタを投稿していくようなノリになりそうです。ハイ。

とまぁ、そういうぼやきはさておき。

1.StormはZookeeperを何に使用しているのか?

StormはZookeeperを状態管理/同期に使用しているらしい・・・
というのがまずWikiを読んでみたことからわかることです。

ただ、実際にどんな情報をZookeeperに保持しているかはわかりません。
なので、まずは実際にのぞいてみようと思います。

2.コマンドラインでのぞいてみる

まずは下記の構成でStormクラスタを立ち上げます。

StormUIから見るとこういう状態になりますね。

その上で、hyperionサーバで「zkCli.sh」コマンドを実行すると下記の結果となります。

/usr/lib/zookeeper/bin/zkCli.sh
[zk: localhost:2181(CONNECTED) 0] ls /
[storm, zookeeper]

うん、実際Stormのディレクトリが存在しますね。
では、Stormの配下に何があるか見てみましょう。

[zk: localhost:2181(CONNECTED) 1] ls /storm
[workerbeats, storms, supervisors, errors, assignments]

いかにもStormで使用していそうな情報が出てきました。
では、各ディレクトリの内部を見てみましょう。

[zk: localhost:2181(CONNECTED) 3] ls /storm/workerbeats
[]
[zk: localhost:2181(CONNECTED) 4] ls /storm/storms
[]
[zk: localhost:2181(CONNECTED) 5] ls /storm/supervisors
[2f5998de-eaec-4470-8905-034aa1330148, 75292ffd-b16c-4f8a-907f-456305f293e7]
[zk: localhost:2181(CONNECTED) 6] ls /storm/errors
[]
[zk: localhost:2181(CONNECTED) 7] ls /storm/assignments
[]

とりあえず、Workerが起動していない状態ではsupervisorの配下以外には何もないようです。
あと、supervisorの配下にはホストの台数と同じ2個のオブジェクトがありました。
supervisorの配下にあるオブジェクトの配下には現状特に何もないようです。

[zk: localhost:2181(CONNECTED) 8] ls /storm/supervisors/2f5998de-eaec-4470-8905-034aa1330148
[]
[zk: localhost:2181(CONNECTED) 9] ls /storm/supervisors/75292ffd-b16c-4f8a-907f-456305f293e7
[]

では、実際にどんな値が保存されているのかな・・・と見てみると。

[zk: localhost:2181(CONNECTED) 10] get /storm/supervisors/2f5998de-eaec-4470-8905-034aa1330148
??sr+backtype.storm.daemon.common.SupervisorInfo?
k???'L__extmaptLjava/lang/Object;L__metaq~Lhostnameq~Lmetaq~Lscheduler_metaq~L	time_secsq~L
uptime_secsq~xpppthyperionsrclojure.lang.LazySeqj?.???
LfntLclojure/lang/IFn;LstLclojure/lang/ISeq;Lsvq~xrclojure.lang.Obj
!a7r??L_metatLclojure/lang/IPersistentMap;xpppsrclojure.lang.ChunkedCons&~?????
L_moreq~LchunktLclojure/lang/IChunk;xrclojure.lang.ASeq\?>?V???
xq~psq~ppppsrclojure.lang.ArrayChunk???	K??
IendIoff[arrayt[Ljava/lang/Object;xpur[Ljava.lang.Object;??X?s)lxpsrjava.lang.Integer????
8Ivaluexrjava.lang.Number???
???xp,sq~-sq~.sq~/ppsq~PeKsrjava.lang.Long;???#?Jvaluexq~?
cZxid = 0x1c7e
ctime = Fri Sep 28 15:40:24 JST 2012
mZxid = 0x1e66
mtime = Fri Sep 28 16:00:42 JST 2012
pZxid = 0x1c7e
cversion = 0
dataVersion = 244
aclVersion = 0
ephemeralOwner = 0x13a0b6e1f2c0006
dataLength = 814
numChildren = 0

オブジェクトのシリアライズされた結果がそのまま帰ってくるらしく、中身はさっぱりです。
ただ、「backtype.storm.daemon.common.SupervisorInfo」というエンティティが
保存されていることについてはわかりました。

とりあえず、Zookeeperの構造っぽい何かが見えることが分かりましたので、
次は実際にTopologyが動作している状態のZookeeperを見てみたいと思います。