关闭

Storm中进程,线程,任务和实例的关系

1649人阅读 评论(0) 收藏 举报
分类:
以一个具体的例子来阐述“Storm中进程,线程,任务和实例的关系”


假设现在有一个Topology实例,在该Topology实例中,配置为整个Topology实例服务的进程数量为10,配置了Spout单元和Bolt单元以及Spout单元和Bolt单元之间的数据流,为这些Spout和Bolt单元服务的线程和任务数量分别为:Spout单元,10个线程,20个任务;Bolt单元,20个线程,20个任务。
那么一旦将该Topology实例提交给Nimbus,接下来就会由Nimbus控制运行。
在Nimbus的控制下,有些Supervisor会在所在的worker node上建立一个进程,整个Supervisor集群中共建立10个进程,这些进程都为该Topology实例服务。这些进程可以运行在多个worker node上,也可以运行在同一台worker node上。每个进程都持有对项目JAR包的引用。


现在一共需要30个线程来为Spout和Bolt单元服务,那么10个进程中,每个进程上运行3个线程。一个进程中的3个线程可以分别为不同的Spout单元和Bolt单元服务。每个线程都创建一份Spout单元或者Bolt单元的实例。


Spout单元共有10个线程,20个任务为其服务,那么每个线程上运行2个任务,同理为Bolt单元服务的20个线程中的每个线程上运行1个任务。


每个线程中的任务使用线程所持有的Spout实例或者Bolt实例,同一个线程中的多个任务间是串行执行的关系,因而在一个线程有多个任务的情况下,不会产生并发问题。


比如某个线程中持有一个Spout实例spoutInstance,配置该线程中需要运行5个任务,那么Storm的框架代码有可能是这么实现的:
for(int i=0;i<5;i++)
{
   spoutInstance.nextTuple();

}


参考文献:

[1]:http://blog.csdn.net/dslztx/article/details/46789443

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:466955次
    • 积分:7282
    • 等级:
    • 排名:第3026名
    • 原创:302篇
    • 转载:78篇
    • 译文:0篇
    • 评论:23条
    最新评论