Exécutez Zookeeper x python (kazoo) sur Mac OS X

Qu'est-ce que le gardien de zoo?

Les conseils de la famille principale sont ici. Je comprends qu'il est facile de mettre en œuvre un traitement distribué des lots, ce qui est difficile lorsqu'il est assemblé correctement.

Installation

$ brew install zookeeper

Vérification

$ ls /usr/local/etc/zookeeper
defaults         log4j.properties zoo.cfg          zoo_sample.cfg

Exécuter en mode autonome

Même si vous comparez le fichier de configuration placé par défaut avec Tutorial, c'est presque le même, alors démarrez-le tel quel Essayer.

$ cat /usr/local/etc/zookeeper/zoo.cfg | egrep -v "#"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/var/run/zookeeper/data
clientPort=2181
$ which zkServer
/usr/local/bin/zkServer

$ sudo zkServer start
ZooKeeper JMX enabled by default
Using config: /usr/local/etc/zookeeper/zoo.cfg
Starting zookeeper ... STARTED

Le journal est sorti ci-dessous

$ tail -f /usr/local/var/log/zookeeper/zookeeper.log
2017-01-09 06:40:05 QuorumPeerMain [WARN] Either no config or no quorum defined in config, running  in standalone mode

Quelque chose est sorti. quorum fait référence au serveur de destination, un avertissement indiquant qu'il n'existe pas. C'est un essai autonome ici, donc peu importe qu'il soit sorti.

Test de connexion

Vous pouvez vous connecter au port spécifié comme clientPort dans le fichier de paramètres.

$ cat /usr/local/etc/zookeeper/zoo.cfg | grep clientPort
clientPort=2181

Puisque le port 2181 est spécifié, connectez-vous à celui-ci.

$ which zkCli
/usr/local/bin/zkCli

$ sudo zkCli -server 127.0.0.1:2181
Connecting to 127.0.0.1:2181
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 127.0.0.1:2181(CONNECTED) 0]

Vérifier les commandes disponibles

[zk: 127.0.0.1:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
	stat path [watch]
	set path data [version]
	ls path [watch]
	delquota [-n|-b] path
	ls2 path [watch]
	setAcl path acl
	setquota -n|-b val path
	history
	redo cmdno
	printwatches on|off
	delete path [version]
	sync path
	listquota path
	rmr path
	get path [watch]
	create [-s] [-e] path data acl
	addauth scheme auth
	quit
	getAcl path
	close
	connect host:port

Créer un znode

Suivez le Tutoriel. znode fait référence à chaque nœud de l'arborescence ZooKeeper.

#Vérification du répertoire
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]

#nœud(znode)Créer
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test_node my_test_data
Created /test_node

#Confirmation de création
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[test_node, zookeeper]

#Assurez-vous que les données que vous avez créées sont associées au nœud
[zk: 127.0.0.1:2181(CONNECTED) 3] get /test_node
my_test_data
cZxid = 0x8
ctime = Mon Jan 09 07:00:17 JST 2017
mZxid = 0x8
mtime = Mon Jan 09 07:00:17 JST 2017
pZxid = 0x8
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0

#Essayez de modifier les données associées
[zk: 127.0.0.1:2181(CONNECTED) 4] set /test_node replaced_my_test_data
cZxid = 0x8
ctime = Mon Jan 09 07:00:17 JST 2017
mZxid = 0x9
mtime = Mon Jan 09 07:03:21 JST 2017
pZxid = 0x8
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 21
numChildren = 0

#Vérification
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test_node
replaced_my_test_data # <-modifié
cZxid = 0x8
ctime = Mon Jan 09 07:00:17 JST 2017
mZxid = 0x9
mtime = Mon Jan 09 07:03:21 JST 2017
pZxid = 0x8
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 21
numChildren = 0

#Effacer
[zk: 127.0.0.1:2181(CONNECTED) 6] delete /test_node

#Vérification
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]

Essayez de l'utiliser avec python

python x zookeeper utilise une bibliothèque appelée kazoo. J'écrirai diverses choses selon les documents suivants. kazoo

installation de kazoo

$ pip install kazoo

Essayez grossièrement

hello_kazoo.py


# coding:utf-8
from kazoo.client import KazooClient
from kazoo.client import KazooState
from kazoo.client import KeeperState
from kazoo.handlers.gevent import SequentialGeventHandler
import logging
logging.basicConfig()

#racine znode
root = '/root'

#client gardien de zoo
zk = KazooClient(hosts='127.0.0.1:2181', read_only=True, handler=SequentialGeventHandler())

#Démarrer en mode asynchrone
event = zk.start_async()
event.wait(timeout=3)

#Suspendre le traitement si impossible de se connecter au serveur zookeeper
if not zk.connected:
    zk.stop()
    raise Exception("Unable to connect.")

def listener(state):
    '''
Auditeur lors du changement d'état
    '''
    print('current state is ' + state)

zk.add_listener(listener)

@zk.add_listener
def watch_for_ro(state):
    if state == KazooState.CONNECTED:
        if zk.client_state == KeeperState.CONNECTED_RO:
            print('state is read_only')
        else:
            print('state is writable')

def print_status(znode):
    '''
Obtenir l'état du nœud
    '''
    print('#####[DEBUG]#####')
    #Vérifier la version et les données d'enregistrement
    data, stat = zk.get(znode)
    print('Version: %s, data: %s' % (stat.version, data.decode('utf-8')))
    #Obtenir une liste des nœuds enfants racine
    children = zk.get_children(root)
    print("There are %s children with names %s" % (len(children), children))

def doAsync(async_obj):
    '''
Fonction de rappel de traitement asynchrone(Il n'y a pas de signification particulière dans le contenu du traitement)
    '''
    znodes = async_obj.get()
    try:
        children = async_obj.get()
        #Afficher les noms de tous les nœuds enfants
        print('#####[print child znodes]#####')
        for child in children:
            print(child)
    except (ConnectionLossException, NoAuthException):
        print("ERROR!!!")
        sys.exit(1)

if __name__ == '__main__':
    #Commencer la transaction
    tx = zk.transaction()
    ##Vérifiez l'utilisation de base
    #Génération de chemin
    zk.ensure_path(root)
    #Créer si znode n'a pas été créé
    znode = root + '/sample_znode'
    if zk.exists(znode) is None:
        zk.create(znode, b'sample_data')
    print_status(znode)
    #Mise à jour des données
    zk.set(znode, b'updated_data')
    print_status(znode)
    #Ajouter un nœud enfant
    znode2 = root + '/sample_znode2'
    if zk.exists(znode2) is None:
        zk.create(znode2, b'sample_data2')
    print_status(znode2)
    ##Le traitement asynchrone est utilisé comme ceci
    async_obj = zk.get_children_async(root)
    async_obj.rawlink(doAsync)
    #Supprimer le nœud
    zk.delete(root, recursive=True)
    #commettre
    results = tx.commit()
    print('#####[Result]#####')
    print(results)

Résultat d'exécution

$ python hello_kazoo.py
#####[DEBUG]#####
Version: 0, data: sample_data
There are 1 children with names ['sample_znode']
#####[DEBUG]#####
Version: 1, data: updated_data
There are 1 children with names ['sample_znode']
#####[DEBUG]#####
Version: 0, data: sample_data2
There are 2 children with names ['sample_znode', 'sample_znode2']
#####[print child znodes]#####
sample_znode
sample_znode2
#####[Result]#####
[]
$ sudo zkCli -server 127.0.0.1:2181

Vous pouvez vérifier divers mouvements en vous connectant au serveur ZooKeeper avec et en écrivant le code petit à petit tout en vérifiant.

Recommended Posts

Exécutez Zookeeper x python (kazoo) sur Mac OS X
Exécutez NASA CEA sur Mac OS X
Shpinx (Python Document Builder) sur Mac OS X
Exécutez Tensorflow 2.x sur Python 3.7
Mémo sur Mac OS X
Créer un environnement de développement Python sur Mac OS X
Installez Sphinx sur MacOSX
Installez mitmproxy sur Mac OS X
Installez pgmagick sur Mac OS X 10.9
Utilisation de plusieurs versions de Python sur Mac OS X (2) Utilisation
Utilisation du SDK NAOqi 2.4.2 Python avec Mac OS X El Capitan
python sur mac
Aws-cli installé sur Mac OS X Lion
Comment effacer Python 2.x sur Mac.
Utilisation de plusieurs versions de Python sur Mac OS X (1) Installation de plusieurs ver
Suite ・ Notes sur la préparation de l'environnement de développement Python sur Mac OS X
Installez lp_solve sur Mac OSX et appelez-le avec python.
Préparation à l'exécution d'ImageMagick + im4java sur Mac OS
Installez Python sur Mac
Installer Python 3 dans un environnement Mac
Mettez Python 2.7.x dans pyenv sur Mac OSX 10.15.5
Exécutez OpenMVG sur Mac
Installez Python 3.4 sur Mac
Exécutez le wrapper Python de l'API Qiita v2 dans un environnement Python 3 (Mac OS X 10.11 (El Capitan))
Préparation à l'utilisation de aws cli sur Mac OS X
Création d'un environnement pour "Tello_Video" sur Mac OS X
Créer un environnement Python d'apprentissage automatique sur Mac OS
Essayez d'utiliser E-Cell 4 sur Windows 7 ou Mac OS X
mac OS X 10.15.x pyenv Python Si vous ne pouvez pas installer
Installez PyQt5 avec homebrew sur Mac OS X Marvericks (10.9.2)
Créer un environnement de développement Python avec OS X Lion
Installer pygame sur python3.4 sur Mac
Mettez Python 3.x dans Ubuntu
Manipulation de python sur mac
Mettez à jour le python que vous aviez sur votre Mac à 3.7-> 3.8
Installez pandas 0.14 sur python3.4 [sur Mac]
Remarques sur l'installation de Python sur votre Mac
Exécutez le CGI de Python sur CORESERVER
Exécutez la commande unix sur python
Lorsque l'importation de tkinter n'est pas possible avec Mac OS X 10.11.3 (El Capitan) + pyenv + Python 3.5.1.
Instructions d'utilisation de l'interface de ligne de commande AWS (Python / awscli) sous Mac OS X
Nombre de mots avec Apache Spark et python (Mac OS X)
Tester Python avec Miniconda dans un environnement OS X et Linux avec travis-ci
Comment installer Theano sur Mac OS X avec homebrew
Remarque: lorsque Python est exécuté sur ImageJ Fiji, java.lang.IllegalArgumentException apparaît et sa solution (mac OS)
Construire un environnement Python sur Mac
Installez Python 3.8 sur Ubuntu 18.04 (norme du système d'exploitation)
Installez Python 3.8 sur Ubuntu 20.04 (norme du système d'exploitation)
Créer un environnement Python sur Mac (2017/4)
Mémo de construction de l'environnement Python sur Mac
Installez Python 3.7 Anaconda sur MAC, mais Python 2
Installez Scipy sur Mac OS Sierra
Installer python3 sur Mac (El Capitan)
Exécutez l'image Docker de TensorFlow sur Python3
Construire un environnement pour python3.8 sur Mac
Installez Python 3.9 sur Ubuntu 20.04 (norme du système d'exploitation?)
Si l'installation de Python 3.5.0 échoue sur Mac
Installez Python 2.7 sur Ubuntu 20.04 (norme du système d'exploitation?)
Étapes pour installer python3 sur Mac
Appeler C / C ++ depuis Python sur Mac