どぅーちゅいむーにー

これ、Twitterでよくね?という日々の記録かも

CLIクライアントからのテスト

そんなわけで前回(d:id:k155e1:20100420:1271755120)に引き続き ZooKeeper(バージョンは 3.3.0)の話ですが、以下、Getting Startedのサンプルをそのまま実行しただけのログです。

  • その前に

log4j.properties でファイルへのログを有効にしてみた。

# Format is "<default threshold> (, <appender>)+

# DEFAULT: console appender only
#log4j.rootLogger=INFO, CONSOLE

# Example with rolling log file
log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE

デフォルトをコメントアウトして、ROLLINGFILE を有効にしただけですが。
ログファイルのパスは

log4j.appender.ROLLINGFILE.File=/home/issei/app/logs/zookeeper.log



んで、起動。

myhdfs1> pwd
/home/issei/app/logs
myhdfs1> ls -ltr
合計 12
-rw-rw-r-- 1 issei issei 8782  420 18:35 zookeeper.log
myhdfs1> head -10 zookeeper.log
2010-04-20 18:35:58,573 - INFO  [main:QuorumPeerConfig@90] - Reading configuration from: /home/issei/app/zookeeper-3.3.0/bin/../conf/zoo.cfg
2010-04-20 18:35:58,579 - WARN  [main:QuorumPeerMain@105] - Either no config or no quorum defined in config, running  in standalone mode
2010-04-20 18:35:58,594 - DEBUG [main:AbstractDynamicMBean@124] - preRegister called. Server=com.sun.jmx.mbeanserver.JmxMBeanServer@7d8483, name=log4j:hiearchy=default
2010-04-20 18:35:58,595 - DEBUG [main:HierarchyDynamicMBean@254] - postRegister is called.
2010-04-20 18:35:58,601 - DEBUG [main:AbstractDynamicMBean@124] - preRegister called. Server=com.sun.jmx.mbeanserver.JmxMBeanServer@7d8483, name=log4j:logger=root
2010-04-20 18:35:58,602 - DEBUG [main:LoggerDynamicMBean@256] - Adding AppenderMBean for appender named CONSOLE
2010-04-20 18:35:58,607 - DEBUG [main:AppenderDynamicMBean@152] - getMBeanInfo called.
2010-04-20 18:35:58,609 - DEBUG [main:AppenderDynamicMBean@309] - preRegister called. Server=com.sun.jmx.mbeanserver.JmxMBeanServer@7d8483, name=log4j:appender=CONSOLE
2010-04-20 18:35:58,610 - DEBUG [main:AppenderDynamicMBean@191] - Adding LayoutMBean:CONSOLE,layout=org.apache.log4j.PatternLayout
2010-04-20 18:35:58,613 - DEBUG [main:LayoutDynamicMBean@138] - getMBeanInfo called.
myhdfs1>

という感じで、ファイルに出力されるようになりましたとさ。


本題。

  • ls してみる

接続は前回を参考に、./bin/zkCli.sh -server 127.0.0.1:2181で。
ls /を実行してみる。

[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]

結果は Getting Started の例と同じ(当たり前ですが)

  • znode を create

例にならい、create /zk_test my_dataを実行してみる。
これは、"my_data" という文字列で関連付けられた znode を生成する、という意味合いらしい。

[zk: 127.0.0.1:2181(CONNECTED) 1] create /zk_test my_data
Created /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[zookeeper, zk_test]

はい。これも問題ありません。
ちなみに、HDFS へのアクセスと違って、レスポンスはサクサク返ってきます。

  • 中身?を取得

作成した znode /zk_testの中身?を見てみる。

[zk: 127.0.0.1:2181(CONNECTED) 3] get /zk_test
my_data
cZxid = 0xa
ctime = Tue Apr 20 18:42:45 JST 2010
mZxid = 0xa
mtime = Tue Apr 20 18:42:45 JST 2010
pZxid = 0xa
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

内容はよくわかりません。

  • 更新してみる

"my_data" と関連付けられた、というものを "junk" という文字列に関連付けしてみる。

[zk: 127.0.0.1:2181(CONNECTED) 4] set /zk_test junk
cZxid = 0xa
ctime = Tue Apr 20 18:42:45 JST 2010
mZxid = 0xb
mtime = Tue Apr 20 18:46:12 JST 2010
pZxid = 0xa
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 5] get /zk_test
junk
cZxid = 0xa
ctime = Tue Apr 20 18:42:45 JST 2010
mZxid = 0xb
mtime = Tue Apr 20 18:46:12 JST 2010
pZxid = 0xa
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0

setしたあとのgetで、mtime(更新日時)が変わっていることがわかります。
1行目が "my_data" でなはなく "junk" になっています。
あとは、dataVersion が 0 から 1 になっているとか、ですかねー。
dataLength は値が変わったので当たり前か。

  • 最後に、削除

そんで、最後にdelete /zk_testで作成した znode を削除してみます。

[zk: 127.0.0.1:2181(CONNECTED) 6] delete /zk_test
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]

というわけで、最初の状態に戻りました。



Programmers Guideをみると、クライアントプログラムなどの作成方法などが解説されていますが、とりあえず今回は HBase のほうに進むということで、ZooKeeper についての話はいったんここで終わります。