设为首页 收藏本站
查看: 1193|回复: 0

[经验分享] python zookeeper 学习笔记

[复制链接]

尚未签到

发表于 2015-9-6 09:23:46 | 显示全部楼层 |阅读模式
  1.安装zookeeper
  下载zookeeper后,解压,安装



cd zookeeper-3.4.5/src/c  
./configure  
make   
make install
  2.启动zookeeper服务



cd zookeeper-3.4.5/conf
mv zoo_sample.cfg zoo.cfg
vim zoo.cfg #修改dataDir=/data/database/zookeeper
mkdir -p /data/database/zookeeper
cd ..
zookeeper-3.4.5-cdh5.0.0]# cd bin/
./zkServer.sh start  #启动服务
./zkServer.sh status #查看启动状态
  如果显示

Mode: standalone
则表示启动成功
如果显示 It is probably not running,原因是没有安装jdk或者没有配置JAVA_HOME路径
  3.安装zkpython
  在https://pypi.python.org/pypi/zkpython/0.4.2 下载,然后解压后安装
  如果 import zookeeper就表示成功安装
  4.python连接和操作zookeeper
  输入python进入python界面



>>> import zookeeper
>>> zk=zookeeper.init("localhost:2181")  #初始化zookeeper连接
#创建zookeeper节点
>>> zookeeper.create(zk,"/zk_for_py","mydata1",[{"perms":4,"scheme":"world","id":"anyone"}],0)
'/zk_for_py'
#获取'/'下面的所以节点
>>> zookeeper.get_children(zk,"/",None)
['app', 'zookeeper', 'zk_for_py']
#创建zookepper节点
>>> zookeeper.create(zk,"/zk_for_py1","mydata1",[{"perms":0x1f,"scheme":"world","id":"anyone"}],0)
'/zk_for_py1'
#获取节点信息
>>> zookeeper.get(zk,"/zk_for_py1")
('mydata1', {'pzxid': 9L, 'ctime': 1398512377068L, 'aversion': 0, 'mzxid': 9L, 'numChildren': 0, 'ephemeralOwner': 0L, 'version': 0, 'dataLength': 7, 'mtime': 1398512377068L, 'cversion': 0, 'czxid': 9L})
>>> zookeeper.get_children(zk,"/zk_for_py1",None)
[]
>>> zookeeper.get_children(zk,"/")         
['app', 'zookeeper', 'zk_for_py1',
'zk_for_py']
#节点的数据只能是字符串
>>> zookeeper.set(zk,"/zk_for_py1",{"k":"v"})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: must be string or read-only buffer, not dict
>>> zookeeper.set(zk,"/zk_for_py1","hello")  
0
>>> zookeeper.get(zk,"/zk_for_py1")              
('hello', {'pzxid': 9L, 'ctime': 1398512377068L, 'aversion': 0, 'mzxid': 10L, 'numChildren': 0, 'ephemeralOwner': 0L, 'version': 1, 'dataLength': 5, 'mtime': 1398512533595L, 'cversion': 0, 'czxid': 9L})
>>> zookeeper.delete(zk,"zk_for_py")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
zookeeper.BadArgumentsException: bad arguments
>>> zookeeper.delete(zk,"/zk_for_py")
0
>>> zookeeper.get(zk,"/zk_for_py1")  
('hello', {'pzxid': 9L, 'ctime': 1398512377068L, 'aversion': 0, 'mzxid': 10L, 'numChildren': 0, 'ephemeralOwner': 0L, 'version': 1, 'dataLength': 5, 'mtime': 1398512533595L, 'cversion': 0, 'czxid': 9L})


  这是可以新开一个shell页面,在python中再初始化一个连接,可以获取前面set的数据“hello"



>>> import zookeeper
>>> zk=zookeeper.init("localhost:2181")

>>> zookeeper.get(zk,"/zk_for_py1")
('hello', {'pzxid': 9L, 'ctime': 1398512377068L, 'aversion': 0, 'mzxid': 10L, 'numChildren': 0, 'ephemeralOwner': 0L, 'version': 1, 'dataLength': 5, 'mtime': 1398512533595L, 'cversion': 0, 'czxid': 9L})
#定义一个监听器
>>> def myWatch(zk,type,state,path):
...     print "zk:",str(type),str(state),str(path)
...     zookeeper.get(zk,path,myWatch)
...
>>> data=zookeeper.get(zk,"/zk_for_py1",myWatch)#设定监听节点
#当在上面的shell中改变这个节点的数据时,这个shell就会有这样的输出
>>> TypeError: 'str' object is not callable

zk: 3 3 /zk_for_py1
zk: 3 3 /zk_for_py1
  创建节点说明:
  zookeeper.create(self.handle, path, data, [acl2], flags) zk创建节点的api,flags可以为EPHEMERAL SEQUENCE 或0,如果设置为EPHEMERAL ,这个节点只会短暂存在,即过期就好被删除,过期的时间为session的时间,SEQUENCE a unique monotonically increasing sequence number is appended to the path name ,可能是排序的意思。
  
  zookeeper.create(handler,"/zkpython_create_node","mydata1",[{"perms":0x1f,"scheme":"world","id":"anyone"}]),0);
  这个地方需要详细的解释一下,第一个参数就是我们刚才建立的链接,第二个参数是创建的节点的路径,第三个是创建的节点的数据,第四个是acl(zookeeper中的访问控制列表),第四个是创建的节点的类型(0表示持久化的,1表示持久化+序号,2表示瞬时的,3表示瞬时加序号型的)
  好...疑问来了,acl的描述为什么是这样的,首先第一个参数是perms,这个代表了控制这个节点的权限,具体值参考如下:
  int READ = 1 << 0;
        int WRITE = 1 << 1;
        int CREATE = 1 << 2;
        int DELETE = 1 << 3;
        int ADMIN = 1 << 4;
也就是说,这是一个数字,而我们例子中为什么是1f呢?实际上就是 READ | WRITE | CREATE | DELETE | ADMIN的结果,这下明白是什么意思了吧??好,后面还有两个参数,实际上现在java和c的api中定义的值只有两种,除了例子中的还有一种是
  "scheme":"auth","id":""组合的,但是实际上,官方的文档中是有四种的,有兴趣的同学可以参考:
  http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html 里的内容
  监听器说明:
  首先,我们先要定义一个watch方法,比如这里的myWatch方法,之后在调用get方法的时候,把这个watch传递进去就可以了
  接下来详细解释下watcher中的各个参数的意思
  handler:就是我们创建连接之后的返回值,我试了下,发现好像指的是连接的一个索引值,以0开始
  type:事件类型,-1表示没有事件发生,1表示创建节点,2表示节点删除,3表示节点数据被改变,4表示子节点发生变化
  state:客户端的状态,0:断开连接状态,3:正常连接的状态,4认证失败,-112:过期啦
  path:这个状态就不用解释了,znode的路径
  
  
  参考资料:http://justfansty.blog.sohu.com/218331818.html
  http://justfansty.blog.sohu.com/217953183.html
  http://blog.iyunv.com/chenyi8888/article/details/6626302

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109986-1-1.html 上篇帖子: ZooKeeper 笔记(3) 实战应用之【统一配置管理】 下篇帖子: hadoop+hive+hbase+zookeeper安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表