在我们讨论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参数在本例中设置了相应节点的孩子节点变化的监视器。