Stormが使うZookeeperの中ってどうなっているの?
こんにちは。
最近テーマ・・・というのも無くなりつつあるので、
とりあえずその日その日で思いついた雑多ネタを投稿していくようなノリになりそうです。ハイ。
とまぁ、そういうぼやきはさておき。
1.StormはZookeeperを何に使用しているのか?
StormはZookeeperを状態管理/同期に使用しているらしい・・・
というのがまずWikiを読んでみたことからわかることです。
ただ、実際にどんな情報をZookeeperに保持しているかはわかりません。
なので、まずは実際にのぞいてみようと思います。
2.コマンドラインでのぞいてみる
まずは下記の構成でStormクラスタを立ち上げます。
その上で、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を見てみたいと思います。