关于Storm的几点困惑释疑

一、Storm的文档中提及为Spout和Bolt单元设置的“线程数量”为“初始线程数量”,难道还可以改变?
在一个具体的Topology实例运行起来后,可以动态调整为Spout单元和Bolt单元服务的线程的“线程数量”,因此称刚开始设置的线程数量为初始线线程数量”。

参考文献:
[1]:http://blog.csdn.net/dslztx/article/details/46789443


二、在Storm中已经有了进程,线程,为何还需要任务?
在Storm中已经有了进程和线程,为何还需要任务?任务对于提升并发性没有意义,因为同一个线程中的多个任务间是串行执行的。
这样做的主要原因是:
当我们只有进程和线程两个层次的时候,如果需要将Tuple根据某个值进行分组(即采用fieldsGrouping分组方式),那么刚开始设定的线程数量就不能改变,否则就会出错。
比如刚开始设定线程数量为3,那么值1和4的Tuple被分配到线程1,值2和5的Tuple被分配到线程2,值3和6的Tuple被分配到线程3。而如果此时动态将线程数量改为4,那么值1和5的Tuple被分配到线程1,值2和6的Tuple被分配到2,值3的Tuple被分配到线程3,值4的Tuple被分配到线程4。
那么由于是在线动态改变的,线程2就可能会有2,5,6值的Tuple,这就导致了数据的不一致。
而在Storm中,不像Hadoop中,很多时候需要调整参数,必须是在线动态的,而不能是离线静态的。
因而,才设置了任务这个层次,这时候,分组根据任务数量来进行分配,Storm中可以动态调整进程数量和线程数量,但是某个单元的任务数量是静态不可动态调整的


参考文献:
[1]:http://blog.csdn.net/dslztx/article/details/46789443
[2]:http://stackoverflow.com/questions/17257448/what-is-the-task-in-storm-parallelism
[3]:http://www.quora.com/What-is-a-task-in-Storm-topology

你可能感兴趣的:(大数据)