Führen Sie Zookeeper x Python (Kazoo) unter Mac OS X aus

Was ist Tierpfleger?

Die Anleitung der Hauptfamilie ist hier. Ich verstehe, dass es einfach ist, die verteilte Verarbeitung von Chargen zu implementieren, was bei ordnungsgemäßer Montage schwierig ist.

Installation

$ brew install zookeeper

Bestätigung

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

Im Standalone-Modus ausführen

Selbst wenn Sie die standardmäßig platzierte Einstellungsdatei mit Tutorial vergleichen, ist sie fast dieselbe. Starten Sie sie also so, wie sie ist Versuchen.

$ 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

Das Protokoll wird unten ausgegeben

$ 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

Etwas ist raus. Quorum bezieht sich auf den Zielserver, eine Warnung, dass er nicht vorhanden ist. Es ist eine eigenständige Testversion, daher spielt es keine Rolle, ob sie ausfällt.

Verbindungstest

Sie können eine Verbindung zu dem in der Einstellungsdatei als clientPort angegebenen Port herstellen.

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

Da Port 2181 angegeben ist, stellen Sie eine Verbindung dazu her.

$ 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]

Überprüfen Sie die verfügbaren Befehle

[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

Erstellen Sie einen Znode

Folgen Sie dem Tutorial. znode bezieht sich auf jeden Knoten im ZooKeeper-Baum.

#Verzeichnisprüfung
[zk: 127.0.0.1:2181(CONNECTED) 0] ls /
[zookeeper]

#Knoten(znode)Erstellen
[zk: 127.0.0.1:2181(CONNECTED) 1] create /test_node my_test_data
Created /test_node

#Erstellungsbestätigung
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[test_node, zookeeper]

#Stellen Sie sicher, dass die von Ihnen erstellten Daten dem Knoten zugeordnet sind
[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

#Versuchen Sie, die zugehörigen Daten zu ändern
[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

#Bestätigung
[zk: 127.0.0.1:2181(CONNECTED) 5] get /test_node
replaced_my_test_data # <-geändert
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

#Löschen
[zk: 127.0.0.1:2181(CONNECTED) 6] delete /test_node

#Bestätigung
[zk: 127.0.0.1:2181(CONNECTED) 7] ls /
[zookeeper]

Versuchen Sie es mit Python

python x zookeeper verwendet eine Bibliothek namens kazoo. Ich werde verschiedene Dinge gemäß den folgenden Dokumenten schreiben. kazoo

Installation von Kazoo

$ pip install kazoo

Versuchen Sie es grob

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()

#znode root
root = '/root'

#Tierpfleger Client
zk = KazooClient(hosts='127.0.0.1:2181', read_only=True, handler=SequentialGeventHandler())

#Starten Sie im asynchronen Modus
event = zk.start_async()
event.wait(timeout=3)

#Unterbrechen Sie die Verarbeitung, wenn keine Verbindung zum Zookeeper-Server hergestellt werden kann
if not zk.connected:
    zk.stop()
    raise Exception("Unable to connect.")

def listener(state):
    '''
Listener beim Ändern des Status
    '''
    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):
    '''
Knotenstatus abrufen
    '''
    print('#####[DEBUG]#####')
    #Überprüfen Sie die Versions- und Registrierungsdaten
    data, stat = zk.get(znode)
    print('Version: %s, data: %s' % (stat.version, data.decode('utf-8')))
    #Rufen Sie eine Liste der untergeordneten Stammknoten ab
    children = zk.get_children(root)
    print("There are %s children with names %s" % (len(children), children))

def doAsync(async_obj):
    '''
Rückruffunktion für die asynchrone Verarbeitung(Der Verarbeitungsinhalt hat keine besondere Bedeutung)
    '''
    znodes = async_obj.get()
    try:
        children = async_obj.get()
        #Geben Sie die Namen aller untergeordneten Knoten aus
        print('#####[print child znodes]#####')
        for child in children:
            print(child)
    except (ConnectionLossException, NoAuthException):
        print("ERROR!!!")
        sys.exit(1)

if __name__ == '__main__':
    #Transaktion starten
    tx = zk.transaction()
    ##Überprüfen Sie die Grundverwendung
    #Pfadgenerierung
    zk.ensure_path(root)
    #Erstellen, wenn kein Knoten erstellt wurde
    znode = root + '/sample_znode'
    if zk.exists(znode) is None:
        zk.create(znode, b'sample_data')
    print_status(znode)
    #Datenaktualisierung
    zk.set(znode, b'updated_data')
    print_status(znode)
    #Fügen Sie einen untergeordneten Knoten hinzu
    znode2 = root + '/sample_znode2'
    if zk.exists(znode2) is None:
        zk.create(znode2, b'sample_data2')
    print_status(znode2)
    ##So wird die asynchrone Verarbeitung verwendet
    async_obj = zk.get_children_async(root)
    async_obj.rawlink(doAsync)
    #Knoten löschen
    zk.delete(root, recursive=True)
    #verpflichten
    results = tx.commit()
    print('#####[Result]#####')
    print(results)

Ausführungsergebnis

$ 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

Sie können verschiedene Bewegungen überprüfen, indem Sie eine Verbindung zum ZooKeeper-Server herstellen und den Code während der Überprüfung nach und nach schreiben.

Recommended Posts

Führen Sie Zookeeper x Python (Kazoo) unter Mac OS X aus
Führen Sie NASA CEA unter Mac OS X aus
Shpinx (Python Document Builder) unter Mac OS X.
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Hinweise zur Vorbereitung der Python-Entwicklungsumgebung unter Mac OS X.
Erstellen Sie eine Python-Entwicklungsumgebung unter Mac OS X.
Installieren Sie Sphinx unter MacOSX
Installieren Sie mitmproxy unter Mac OS X.
Installieren Sie pgmagick unter Mac OS X 10.9
Verwenden mehrerer Versionen von Python unter Mac OS X (2) Verwendung
Verwenden von NAOqi 2.4.2 Python SDK mit Mac OS X El Capitan
Python auf Mac
Installiert aws-cli Unter Mac OS X Lion
So löschen Sie Python 2.x auf einem Mac.
Verwenden mehrerer Versionen von Python unter Mac OS X (1) Installation von Multiple Ver
Fortsetzung ・ Hinweise zur Vorbereitung der Python-Entwicklungsumgebung unter Mac OS X.
Installieren Sie lp_solve unter Mac OSX und rufen Sie es mit Python auf.
Vorbereiten der Ausführung von ImageMagick + im4java unter Mac OS
Installieren Sie Python auf dem Mac
Installieren von Python 3 in einer Mac-Umgebung
Fügen Sie Python 2.7.x in pyenv unter Mac OSX 10.15.5 ein
Führen Sie OpenMVG auf einem Mac aus
Installieren Sie Python 3.4 auf einem Mac
Führen Sie den Qiita API v2 Python-Wrapper in einer Python 3-Umgebung aus (Mac OS X 10.11 (El Capitan)).
Vorbereiten der Verwendung von aws cli unter Mac OS X.
Erstellen einer Umgebung für "Tello_Video" unter Mac OS X.
Erstellen Sie eine Python-Umgebung für maschinelles Lernen unter Mac OS
Versuchen Sie es mit E-Cell 4 unter Windows 7 oder Mac OS X.
mac OS X 10.15.x pyenv Python Wenn Sie nicht installieren können
Installieren Sie PyQt5 mit Homebrew unter Mac OS X Marvericks (10.9.2).
Erstellen Sie eine Python-Entwicklungsumgebung mit OS X Lion
Installieren Sie pygame auf python3.4 auf dem Mac
Setzen Sie Python 3.x in Ubuntu ein
Umgang mit Python auf Mac
Aktualisieren Sie die Python, die Sie auf Ihrem Mac hatten, auf 3.7-> 3.8
Installieren Sie pandas 0.14 auf python3.4 [auf Mac]
Hinweise zur Installation von Python auf Ihrem Mac
Führen Sie Pythons CGI auf CORESERVER aus
Führen Sie den Unix-Befehl auf Python aus
Wenn der Import von tkinter unter Mac OS X 10.11.3 (El Capitan) + pyenv + Python 3.5.1 nicht möglich ist.
Anweisungen zur Verwendung der AWS-Befehlszeilenschnittstelle (Python / awscli) unter Mac OS X.
Word Count mit Apache Spark und Python (Mac OS X)
Testen Sie Python mit Miniconda unter OS X und Linux mit travis-ci
So installieren Sie Theano unter Mac OS X mit Homebrew
Hinweis: Wenn Python auf ImageJ Fiji ausgeführt wird, wird java.lang.IllegalArgumentException und seine Lösung (Mac OS) angezeigt.
Erstellen einer Python-Umgebung auf einem Mac
Installieren Sie Python 3.8 unter Ubuntu 18.04 (Betriebssystemstandard)
Installieren Sie Python 3.8 unter Ubuntu 20.04 (Betriebssystemstandard)
Erstellen Sie eine Python-Umgebung auf dem Mac (2017/4)
Konstruktionsnotiz für die Python-Umgebung auf dem Mac
Installieren Sie Python 3.7 Anaconda auf dem MAC, aber Python 2
Installieren Sie Scipy unter Mac OS Sierra
Installieren Sie python3 auf einem Mac (El Capitan)
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Erstellen einer Umgebung für Python3.8 auf einem Mac
Installieren Sie Python 3.9 unter Ubuntu 20.04 (Betriebssystemstandard?)
Wenn die Installation von Python 3.5.0 auf einem Mac fehlschlägt
Installieren Sie Python 2.7 unter Ubuntu 20.04 (Betriebssystemstandard?)
Schritte zum Installieren von python3 auf einem Mac
Rufen Sie C / C ++ von Python auf dem Mac auf