そんなわけで前回(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 4月 20 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 についての話はいったんここで終わります。