使用python操作zookeeper
kazoo 介绍
zookeeper的开发接口以前主要以java和c为主,随着python项目越来越多的使用zookeeper作为分布式集群实现,python的zookeeper接口也出现了很多,现在主流的纯python的zookeeper接口是kazoo。因此如何使用kazoo开发基于python的分布式程序是必须掌握的。
安装kazoo
pip3 install kazoo
基本操作
from kazoo.client import KazooClient
zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1
zk.start() #与zookeeper连接
zk.stop() #与zookeeper断开
创建节点
from kazoo.client import KazooClient
zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1
zk.start() #与zookeeper连接
#makepath=True是递归创建,如果不加上中间那一段,就是建立一个空的节点
zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True)
node = zk.get_children('/') # 查看根节点有多少个子节点
print(node)
zk.stop() #与zookeeper断开
执行输出:
['abc', 'zookeeper']
注意:空节点的值不能用set修改,否则执行报错!
删除节点
如果要删除这个/abc/JQK/XYZ/0001的子node,但是想要上一级XYZ这个node还是存在的,语句如下:
from kazoo.client import KazooClient
zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1
zk.start() #与zookeeper连接
#recursive=True是递归删除,就是无视下面的节点是否是空,都干掉,不加上的话,会提示子节点非空,删除失败
zk.delete('/abc/JQK/XYZ/0001',recursive=True)
node = zk.get_children('/') # 查看根节点有多少个子节点
print(node)
zk.stop() #与zookeeper断开
执行输出:
['abc', 'zookeeper']
更改节点
现在假如要在0001这个node里更改value,比如改成:"this is my horse!",
由于上面节点已经被删除掉了,需要先创建一次。
语句如下:
from kazoo.client import KazooClient
zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1
zk.start() #与zookeeper连接
zk.create('/abc/JQK/XYZ/0001',b'this is my house',makepath=True)
zk.set('/abc/JQK/XYZ/0001',b"this is my horse!")
node = zk.get('/abc/JQK/XYZ/0001') # 查看值
print(node)
zk.stop() #与zookeeper断开
执行输出:
(b'this is my horse!', ZnodeStat(czxid=4294967449, mzxid=4294967452, ctime=1544598301273, mtime=1544598308267, version=1, cversion=0, aversion=0, ephemeralOwner=0, dataLength=17, numChildren=0, pzxid=4294967449))
注意!set这种增加节点内容的方式是覆盖式增加,并不是在原有基础上增添。而且添加中文的话可能在ZooInspecter里出现的是乱码
查看节点
由于所有节点,都是在/ 节点上面的,直接查看根节点,就可以知道所有节点了
from kazoo.client import KazooClient
zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1
zk.start() #与zookeeper连接
node = zk.get_children('/')
print(node)
zk.stop() #与zookeeper断开
执行输出:
['abc', 'zookeeper']
一键清空zookeeper
有些时候,需要将zookeeper的数据全部清空,可以使用以下代码
from kazoo.client import KazooClient
zk = KazooClient(hosts='192.168.91.128:2181') #如果是本地那就写127.0.0.1
zk.start() #与zookeeper连接
jiedian = zk.get_children('/') # 查看根节点有多少个子节点
print(jiedian)
for i in jiedian:
if i != 'zookeeper': # 判断不等于zookeeper
print(i)
# 删除节点
zk.delete('/%s'%i,recursive=True)
zk.stop() #与zookeeper断开
注意:默认的zookeeper节点,是不允许删除的,所以需要做一个判断。
使用python操作zookeeper的更多相关文章
- [py]python操作zookeeper
参考: https://blog.csdn.net/heizistudio/article/details/79568188 1.安装zookeeper zookeeper-3.4.6.tar.gz ...
- python 操作zookeeper详解
ZooKeeper 简介 ZooKeeper 是一个分布式的.开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现,是 Hadoop 和 Hbase 的重要组件.它是一 ...
- Zookeeper集群搭建以及python操作zk
一.Zookeeper原理简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper设计目 ...
- Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现 by:授客 QQ:1033553122 测试环境 功能需求 实现思路 代码实践(关键技术点实现) 代码模块组织 ...
- kafka--通过python操作topic
修改 topic 的分区数 shiyanlou:bin/ $ ./kafka-topics.sh --zookeeper localhost:2181 --alter --topic mySendTo ...
- 【Hbase三】Java,python操作Hbase
Java,python操作Hbase 操作Hbase python操作Hbase 安装Thrift之前所需准备 安装Thrift 产生针对Python的Hbase的API 启动Thrift服务 执行p ...
- kafka实战教程(python操作kafka),kafka配置文件详解
kafka实战教程(python操作kafka),kafka配置文件详解 应用往Kafka写数据的原因有很多:用户行为分析.日志存储.异步通信等.多样化的使用场景带来了多样化的需求:消息是否能丢失?是 ...
- Python(九) Python 操作 MySQL 之 pysql 与 SQLAchemy
本文针对 Python 操作 MySQL 主要使用的两种方式讲解: 原生模块 pymsql ORM框架 SQLAchemy 本章内容: pymsql 执行 sql 增\删\改\查 语句 pymsql ...
- Python 【第六章】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
随机推荐
- 理解Cookie和Session
HTTP 无状态协议 HTTP 本身是一个无状态的连接协议,无状态的意思是:每条请求/响应都是独立进行的,服务端每处理完一个客户端的请求之后就会断开连接,并且每条请求/响应与其之前(或之后)的请求/响 ...
- 【转载】Python tips: 什么是*args和**kwargs?
转自Python tips: 什么是*args和**kwargs? 先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwa ...
- 梯度提升树GBDT总结
提升树的学习优化过程中,损失函数平方损失和指数损失时候,每一步优化相对简单,但对于一般损失函数优化的问题,Freidman提出了Gradient Boosting算法,其利用了损失函数的负梯度在当前模 ...
- ThinkPHP数据查询与添加语句
在ThinkPHP框架中实现数据的查询操作 function ShowAll() { //Model:数据库中每张表对应一个模型 //类名是表名,类里面的成员变量是列名 //把一张表对应一个类,其中一 ...
- PHP遍历目录下的文件夹和文件 以及遍历文件下内容
1.遍历目录下的文件夹和文件: public function bianli1($dir) { $files = array(); if($head = opendir($dir)) { while( ...
- 数据分析 - seaborn 模块
seaborn 模块 简述 对 matplotlib 模块进行了二次封装, 底层依旧使用还是 matplotlib 的, 但是在此基础上增加了很多的易用性模板, 更加方便使用 引用使用 import ...
- [LeetCode 206] Reverse Linked List 翻转单链表
本题要求将给定的单链表翻转,是校招面试手撕代码环节的高频题,能很好地考察对单链表这一最简单数据结构的理解:可以使用迭代和递归两种方法对一个给定的单链表进行翻转,具体实现如下: class Soluti ...
- 模板引擎总结(Thymeleaf,FreeMarker,Enjoy,Velocity,JSP等)
在java领域,表现层技术主要有以下几种, (1)jsp; (2)freemarker; (3)velocity; (4)thymeleaf; (5)Enjoy; 1.JSP 优点: 1.功能强大,可 ...
- Java垃圾收集器与内存分配策略
程序的计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈中的栈侦随着方法的进入和退出而有条不紊地执行出栈和如栈操作. 判断对象是不是已经死亡的方法: 一.引用计数算法: 给对象添加一个引用 ...
- 关于python脚本头部设置#!/usr/bin/python
今天又是贼几把菜的一天0.0 读别人程序的时候看到在python文件头部设置签名,感觉贼几把酷,自己也试着在文件前段设置了一下. 设置还是蛮简单的,设置过程如图所示. 设置后如图所示: 当然你也可能看 ...