-
BI妹妹 初学数据Lv2
发表于2018-5-8 09:52
角色Client
client的主要作用是提交topology到集群
WorkerWorker是运行在Supervisor节点上的一个独立的JVM进程,主要作用是运行topology,一个topology可以包含多个worker,但一个worker只能属于一个topology
Exceutor在Worker中运行的线程,一个Executor可以对应一个或多个Task,每个Task(Spout或Bolt)必须对应一个Executor。
Task一个独立的处理逻辑的实例,每个Spout或Bolt都可以对应多个Task在集群中运行,每个线程对应到一个Executor线程上。
streaminggroup定义了如何从一堆Task发送数据到另外一堆Task上。
客户运行storm nimbus或storm supervisor时,在storm脚本内部实际对应了两个python函数,这两个函数最终会生成一条java命令,用于启动一个storm的java进程:
java -server xxxx.xxxx.nimbus/supervisor args任务提交
- 运行storm java xxxx.MainClass name,此时会执行Driver驱动类的main函数
- 在驱动类中,会调用topologyBuilder.createTopology()方法,该方法会生成spout和bolt的序列化对象
- 客户端把topology对应的jar上传的到nimbus的storm-local/nimbus/inbox目录下
- 首先,nimbus会将storm.jar复制到/home/hadoop/storm-local/nimbus/stormdist/wordcount01-2-1525621662目录下,根据第二步生成的序列化对象生成task的序列化文件和相关配置的序列化文件(wordcount01-2-1525621662为storm生成的一个唯一的topology名称),此时,nimbus就可以进行任务分配了
接下来进行任务分配,分配完成后会产生一个assegiment对象,该对象会被序列化后保存到zookeeper的/storm/assignments/wordcount01-2-1525621662目录下
supervisor通过zookeeper的watch机制感知/storm/assignments目录变化,拉取数据自己的topology(nimbus进行分配时,会指定task所属的supervisor)
supversior根据拉取到的信息在指定端口上启动worker,实际上就是执行一条java脚本
- worker启动后,根据分配的task信息开始执行。
- 本文转自CSDN