作者:
xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://xumingming.sinaapp.com/466/twitter-storm-code-analysis-zookeeper-dirs/
网址: http://xumingming.sinaapp.com/466/twitter-storm-code-analysis-zookeeper-dirs/
我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeeper上面写状态信息来分配任务,supervisor,task通过从zookeeper中读状态来领取任务,同时supervisor, task也会定义发送心跳信息到zookeeper, 使得nimbus可以监控整个storm集群的状态, 从而可以重启一些挂掉的task。ZooKeeper 使得整个storm集群十分的健壮 — 任何一台工作机器挂掉都没有关系,只要重启然后从zookeeper上面重新获取状态信息就可以了。本文主要介绍Twitter Storm在ZooKeeper中保存的数据目录结构,源代码主要是: backtype.storm.cluster, 废话不多说,直接看下面的结构图:
一个要注意的地方是,作者在代码里面很多地方用到的storm-id
, 其实就是topology-id
的意思。我在邮件列表里面问了他一下, 他说以前他把topology叫做storm, 代码里面还没有改过来。
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/-{storm-zk-root} -- storm在zookeeper上的根
| 目录
|
|-/assignments -- topology的任务分配信息
| |
| |-/{topology-id} -- 这个下面保存的是每个
| topology的assignments
| 信息包括: 对应的
| nimbus上的代码目录,所有
| task的启动时间,
| 每个task与机器、端口的映射
|
|-/tasks -- 所有的task
| |
| |-/{topology-id} -- 这个目录下面id为
| | {topology-id}的topology
| | 所对应的所有的task-id
| |
| |-/{task-id} -- 这个文件里面保存的是这个
| task对应的component-id:
| 可能是spout-id或者bolt-id
|
|-/storms -- 这个目录保存所有正在运行
| | 的topology的id
| |
| |-/{topology-id} -- 这个文件保存这个topology
| 的一些信息,包括topology的
| 名字,topology开始运行的时
| 间以及这个topology的状态
| (具体看StormBase类)
|
|-/supervisors -- 这个目录保存所有的supervisor
| | 的心跳信息
| |
| |-/{supervisor-id} -- 这个文件保存的是supervisor
| 的心跳信息包括:心跳时间,主
| 机名,这个supervisor上worker
| 的端口号运行时间
| (具体看SupervisorInfo类)
|
|-/taskbeats -- 所有task的心跳
| |
| |-/{topology-id} -- 这个目录保存这个topology的所
| | 有的task的心跳信息
| |
| |-/{task-id} -- task的心跳信息,包括心跳的时
| 间,task运行时间以及一些统计
| 信息
|
|-/taskerrors -- 所有task所产生的error信息
|
|-/{topology-id} -- 这个目录保存这个topology下面
| 每个task的出错信息
|
|-/{task-id} -- 这个task的出错信息
|
顶…
Pingback 引用通告: Twitter Storm源代码分析之Worker本地目录结构简介 | 徐明明
Pingback 引用通告: Twitter Storm源代码分析之Topology的执行过程 | 徐明明
/taskerrors/{topology-id} /{task-id}下面还有一级目录 是发生错误的时间{time}
请教一个简单问题:”storm在zookeeper上的根目录”是在zookeeper的哪个目录下?我怎么找不到对应的这些目录?难道是因为我在查看这些目录之前,样例程序已经执行完并将这些目录已经删除了?所以看不到。多谢!
1). 这个目录是可以指定的,默认是在
/storm
。2). 你可以在topology正在运行的时候去查看呀。另外记得使用remote cluster哦。使用本地模式的时候zookeeper是线程内模拟的。
谢谢,找到答案了。
另外,能否给我们初学者介绍一下,如何将storm-starter例子导入eclipse工程,如何采用lein或maven进行编译并打包成jar,以便使用storm jar命令进行执行。
storm-starter主页有详细介绍:https://github.com/nathanmarz/storm-starter
Super jazzed about getting that knwooh-w.
徐老师,storm状态的按理会保存storm.zookeeper.root: “/storm”下,但是服务起来后没有发现, 模式是storm.cluster.mode: “distributed”
请教下怎么回事呢
信息太少,解答不了。先确认一下你的topology都能正常工作么?storm ui上有显示么?
我也遇到同样的问题
ui显示正常,topology工作正常
但是zookeeper服务器上没有/storm目录
是什么原因啊
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://xumingming.sinaapp.com/483/twitter-storm-code-analysis-local-dir/ 我们知道,storm集群里面工作机器分为两种一种是nimbus, 一种是supervisor, 他们通过zookeeper来进行交互,nimbus通过zookeeper来发布一些指令,supervisor去读zookeeper来执行这些指令,具体nimbus和supervisor在zookeeper上交换了哪些信息可以看一下这篇文章: Twitter Storm源代码分析之ZooKeeper中的目录结构。知道了他们在zookeeper存的信息之后,大家一定想知道nimbus和zookeeper在自己本机存了什么信息呢?这篇文章给你介绍。代码主要包括config.clj, nimbus.clj, supervisor.clj, worker.clj。 注意:下面目录结构里面, nimbus机器上面只有/nimbus目录,supervisor机器上面只有/supervisor目录和/workers目录。
我也遇到了这个问题。我的storm配置文件是这样的:
java.library.path: “/usr/local/lib:/opt/local/lib:/usr/lib”
### storm.* configs are general configurations
# the local dir is where jars are kept
storm.local.dir: “/var/lib/storm/data”
storm.zookeeper.servers:
- “10.4.124.144″
storm.zookeeper.port: 2181
storm.zookeeper.root: “/storm”
storm.zookeeper.session.timeout: 20000
storm.cluster.mode: “distributed” # can be distributed or local
storm.local.mode.zmq: false
### nimbus.* configs are for the master
nimbus.host: “10.4.124.144″
nimbus.thrift.port: 6627
nimbus.childopts: “-Xmx2048m”
nimbus.task.timeout.secs: 30
nimbus.supervisor.timeout.secs: 60
nimbus.monitor.freq.secs: 10
nimbus.task.launch.secs: 240
nimbus.reassign: true
nimbus.file.copy.expiration.secs: 600
ui.port: 8080
drpc.port: 3772
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
supervisor.childopts: “-Xmx2048m”
#how long supervisor will wait to ensure that a worker process is started
supervisor.worker.start.timeout.secs: 240
#how long between heartbeats until supervisor considers that worker dead and tries to restart it
supervisor.worker.timeout.secs: 30
#how frequently the supervisor checks on the status of the processes it’s monitoring and restarts if necessary
supervisor.monitor.frequency.secs: 3
#how frequently the supervisor heartbeats to the cluster state (for nimbus)
supervisor.heartbeat.frequency.secs: 5
supervisor.enable: true
### worker.* configs are for task workers
worker.childopts: “-Xmx768m”
worker.heartbeat.frequency.secs: 1
task.heartbeat.frequency.secs: 3
task.refresh.poll.secs: 10
zmq.threads: 1
zmq.linger.millis: 5000
在编写topology时写的是:
StormSubmitter.submitTopology(……)
也是按照分布式部署。
ui上也能显示,但就是在/storm 什么都没有~
hi 不知道你的问题解决了没有 我在zookeeper下也没有找到storm
hi 不知道你的问题解决了没有 我在zookeeper下也没有找到storm
请问:assignment中task和机器、端口的映射能从zookeeper中看到吗?主要是想看看task具体在哪台机器上跑。
Pingback 引用通告: IT-Homer 博客 » Storm 相关技术总结
如题。使用zkCli的get命令想要获取supervisors下的某个子目录信息时候,返回乱码。请问这个节点力存的是二进制字节流吗?
我也遇到乱码,有解决方法吗?