【Zookeeper在storm中扮演的角色】
一、Zookeeper在storm充当的作用
Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeeper上面写状态信息来分配任务,
supervisor,task通过从zookeeper中读状态来领取任务,同时supervisor, task也会定义发送心跳信息到zookeeper,
使得nimbus可以监控整个storm集群的状态,从而可以重启一些挂掉的task。
ZooKeeper 使得整个storm集群十分的健壮,任何一台工作机器挂掉都没有关系,只要重启然后从zookeeper上面重新获取状态信息就可以了。
二、Trident主要有5类操作:
1、作用在本地的操作,不产生网络传输。
2、对数据流的重分布,不改变流的内容,但是产生网络传输。
3、聚合操作,有可能产生网络传输。
4、作用在分组流(grouped streams)上的操作。
5、Merge和join
三、Strom在Zookeeper中的目录结构
/assignments -> 任务分配信息
/storms -> 正在运行的topology的ID
/supervisors -> 所有的Supervisors的心跳信息
/workerbeats -> 所有的Worker的心跳
/errors -> 产生的出错信息
/-{storm-zk-root} -- storm在zookeeper上的根目录(默认为/storm)
|
|-/assignments -- topology的任务分配信息
| |
| |-/{topology-id} -- 这个目录保存的是每个topology的assignments信息包括:对应的nimbus上
| -- 的代码目录,所有task的启动时间,每个task与机器、端口的映射。操作为
| -- (assignments)来获取所有assignments的值;以及(assignment-info storm-id)
| -- 来得到给定的storm-id对应的AssignmentInfo信息
| -- 在AssignmentInfo中存储的内容有:
| -- :executor->node+port :executor->start-time-secs :node->host
| -- 具体定义在common.clj中的
| -- (defrecord Assignment[master-code-dir node->host executor->node+port executor->start-time-secs])
|
|-/storms -- 这个目录保存所有正在运行的topology的id
| |
| |
| |-/{topology-id} -- 这个文件保存这个topology的一些信息,包括topology的名字,topology开始运行
| -- 的时间以及这个topology的状态。操作(active-storms),获得当前路径活跃的下
| -- topology数据。保存的内容参考类StormBase;(storm-base storm-id)得到给定的
| -- storm-id下的StormBase数据,具体定义在common.clj中的
| -- (defrecord StormBase [storm-name launch-time-secs status num-workers component->executors])
|
|-/supervisors -- 这个目录保存所有的supervisor的心跳信息
| |
| |
| |-/{supervisor-id} -- 这个文件保存supervisor的心跳信息包括:心跳时间,主机名,这个supervisor上
| -- worker的端口号,运行时间(具体看SupervisorInfo类)。操作(supervisors)得到
| -- 所有的supervisors节点;(supervisor-info supervisor-id)得到给定的
| -- supervisor-id对应的SupervisorInfo信息;具体定义在common.clj中的
|
| -- (defrecord SupervisorInfo [time-secs hostname assignment-id used-ports meta scheduler-meta uptime-secs])
|
|-/workerbeats -- 所有worker的心跳
| |
| |-/{topology-id} -- 这个目录保存这个topology的所有的worker的心跳信息
| |
| |-/{supervisorId-port} -- worker的心跳信息,包括心跳的时间,worker运行时间以及一些统计信息
|
| -- 操作(heartbeat-storms)得到所有有心跳数据的topology,
| -- (get-worker-heartbeat storm-id node port)得到具体一个topology下
| -- 的某个worker(node:port)的心跳状况,
| -- (executor-beats storm-id executor->node+port)得到一个executor的心跳状况
|
|-/errors -- 所有产生的error信息
|
|-/{topology-id} -- 这个目录保存这个topology下面的错误信息。操作(error-topologies)得到出错
| -- 的topology;(errors storm-id component-id)得到
| -- 给定的storm-id component-id下的出错信息
|-/{component-id}
即