在我们讨论worker和客户端的步骤之前,我们先来创建三个非常重要的父节点:/workers,/tasks和/assign。
[zk: localhost:2181(CONNECTED) 0] create /workers ""
Created /workers
[zk: localhost:2181(CONNECTED) 1] create /tasks ""
Created /tasks
[zk: localhost:2181(CONNECTED) 2] create /assign ""
Created /assign
[zk: localhost:2181(CONNECTED) 3] ls /
[assign, tasks, workers, master, zookeeper]
[zk: localhost:2181(CONNECTED) 4]
这三个节点都是持久化的节点,并不包含数据。在本例中我们使用这些节点来告诉我们哪些worker是可用的,还有哪些任务等着被分配,同时分配给worker的任务。
在现实的应用中,这些节点要么是被主进程在分配任务之前创建的,要么是某些引导步骤创建的。不论它们是如何创建的,一旦它们被创建,主节点就需要监视孩子节点/workers和/tasks的变化:
[zk: localhost:2181(CONNECTED) 4] ls /workers true
[]
[zk: localhost:2181(CONNECTED) 5] ls /tasks true
[]
[zk: localhost:2181(CONNECTED) 6]
注意到我们在ls命令中使用了可选参数true,像我们之前在master上使用stat一样。true参数在本例中设置了相应节点的孩子节点变化的监视器。