storm从入门到放弃(二),任务分配过程-核心机密
背景:目前就职于国内最大的IT咨询公司,恰巧又是毕业季,所在部门招了100多个应届毕业生,本人要跟部门新人进行为期一个月的大数据入职培训,特此将整理的文档分享出来。
集群环境
storm机器有4台节点(物理机),三台是supervisor,每一台supervisor上面启动4个work进程(JVM进程),一共有12个work进程。
Topology程序
public class WordCountTopologyMain {
public static void main(String[] args) throws Exception {
TopologyBuilder intsmaze= new TopologyBuilder();
intsmaze.setSpout("spout", new RandomSentenceSpout(),3);
intsmaze.setBolt("split", new SplitSentenceBolt(),9).shuffleGrouping("spout");
intsmaze.setBolt("count", new WordCountBolt(),3).fieldsGrouping("split",new Fields("word"));
Config conf = new Config();
conf.setDebug(false);
//定义你希望集群分配多少个工作进程给你来执行这个topology,这里3个进程(work)来运行15个execute(线程)
conf.setNumWorkers(3);
StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
}
}
supervisor1上面的task编号为1(spout); ,,(bolt task split); (bolt task wordcount) supervisor2上面的task编号为2(spout); ,,(bolt task split); (bolt task wordcount) supervisor3上面的task编号为3(spout); ,,(bolt task split); (bolt task wordcount)
Topology程序
public class WordCountTopologyMain {
public static void main(String[] args) throws Exception {
TopologyBuilder intsmaze= new TopologyBuilder();
intsmaze.setSpout("spout", new RandomSentenceSpout(),3).setNumTasks(9);
//3是说明该spout启动几个线程来运行。该组件每个线程执行3个task.
intsmaze.setBolt("split", new SplitSentenceBolt(),9).shuffleGrouping("spout");
//不指定默认一个线程一个task任务
intsmaze.setBolt("count", new WordCountBolt(),3).fieldsGrouping("split",new Fields("word"));
Config conf = new Config();
conf.setDebug(false);
//定义你希望集群分配多少个工作进程给你来执行这个topology,这里3个进程(work)来运行15个execute(线程)
conf.setNumWorkers(3);
StormSubmitter.submitTopologyWithProgressBar(args[0], conf, builder.createTopology());
}
}
supervisor1上面的task编号为spout -,spout1-(spout); split -, split -, split -(bolt task split); wordcount -(bolt task wordcount) supervisor2上面的task编号为spout2-,spout -(spout); split -, split -, split -(bolt task split); wordcount -(bolt task wordcount) supervisor3上面的task编号为spout -,spout -(spout); split -, split -, split -(bolt task split); wordcount -(bolt task wordcount)
配置并行度
efaults.yaml < storm.yaml < topology-specific configuration < internal component-specific configuration < external component-specific configuration
tasks的数目, 可以不配置, 默认和executor1:1, 也可以通过setNumTasks()配置。
Topology的worker数通过config设置,即执行该topology的worker(java)进程数。它可以通过storm rebalance 命令任意调整。
storm从入门到放弃(二),任务分配过程-核心机密的更多相关文章
- hive从入门到放弃(二)——DDL数据定义
前一篇文章,介绍了什么是 hive,以及 hive 的架构.数据类型,没看的可以点击阅读:hive从入门到放弃(一)--初识hive 今天讲一下 hive 的 DDL 数据定义 创建数据库 CREAT ...
- storm从入门到放弃(一),storm介绍
背景:目前就职于国内最大的IT咨询公司,恰巧又是毕业季,所在部门招了100多个应届毕业生,本人要跟部门新人进行为期一个月的大数据入职培训,特此将整理的文档分享出来. 原文和作者一起讨论:http:// ...
- storm从入门到放弃(三),放弃使用《StreamId》特性。
序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...
- Go语言从入门到放弃(二) 优势/关键字
本来这里是写数据类型的,但是规划了一下还是要一步步来,那么本篇就先介绍一下Go语言的 优势/关键字 吧 本章转载 <The Way to Go>一书 Go语言起源和发展 Go 语 言 起 ...
- storm从入门到放弃(三),放弃使用 StreamId 特性
序:StreamId是storm中实现DAG有向无环图的重要一个特性,但是从实际生产环境来看,这个功能其实蛮影响生产环境的稳定性的,我们系统在迭代时会带来整体服务的不可用. StreamId是stor ...
- FlaskWeb开发从入门到放弃(二)
第5章 章节五 01 内容概要 02 内容回顾 03 面向对象相关补充:metaclass(一) 04 面向对象相关补充:metaclass(二) 05 WTforms实例化流程分析(一) 06 WT ...
- robotium从入门到放弃 二 第一个实例
1.导入被测试的源码 我们先下载加你计算器源码,下载地址: https://robotium.googlecode.com/files/AndroidCalculator.zip 如果地址被墙无法现在 ...
- MyBatis从入门到放弃二:传参
前言 我们在mapper.xml写sql,如果都是一个参数,则直接配置parameterType,那实际业务开发过程中多个参数如何处理呢? 从MyBatis API中发现selectOne和selec ...
- Ldap 从入门到放弃(二)
OpenLDAP 服务器安装与配置 本文内容是自己通过官网文档.网络和相关书籍学习和理解并整理成文档,其中有错误或者疑问请在文章下方留言. 一.概述 本文以Centos 6.8(64bit)为例介绍 ...
随机推荐
- Ubuntu16.04更换漂亮绚丽flatabulous主题
作者:tongqingliu 转载请注明出处: Ubuntu16.04更换漂亮绚丽flatabulous主题 更新 sudo apt-get update sudo apt-get upgrade 安 ...
- .Net中关于等于的故事(一)
在.Net框架中,如果您查看所有类型的的基类:System.Object类,将找到如下4个与相等判断的方法: static Equals() virtual Equals() static Refer ...
- cordova.js的坑
最近在使用cordova开发app,一开始只引用了cordova.js,cordova通过function exec(){}来链接本地和H5,之前代码被下载到了本地,在苹果和android上都能实现功 ...
- 超好用的Redis管理及监控工具,使用后可大大提高你的工作效率!
Redis做为现在web应用开发的黄金搭担组合,大量的被应用,广泛用于存储session信息,权限信息,交易作业等热数据.做为一名有10年以上JAVA开发经验的程序员,工作中项目也是广泛使用了Redi ...
- RDLC报表纵向合并单元格。
在做RDLC报表时发现居然没有纵向合并单元格,震惊! 网上查了一些资料,有些方法很可爱,采用去除边框法,但是用这种方法如果要求文本属性居中的话那则达不到美观效果,还有些复杂一点的方法,我都没耐心看,然 ...
- spring的Convert机制
spring.core包内有Converter接口,方法是T convert(S source);从一个类型转为内容一个类型的实际转化器:converters可能非常多,需要一个注册器来集中管理使用, ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——S ...
- android studio gradle 两种更新方法更新
android studio gradle 两种更新方法更新 第一种.Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrappergradle-wrapper ...
- Symbol() 的使用方法
简介:ES5的对象属性名都是字符串,这就很容易造成属性名的冲突,比如一个项目很庞大,又不是一个人开发 的,就有可能会造成变量名冲突,如果有一个独一无二的名字就好了,这样就能从根本上防止属性名冲突.这就 ...
- ActiveMQ集群支持Master/Slave模式
现在ActiveMQ, 在Failover方面有两种解决方案:Pure Master Slave和Shared File System Master Slave. 先看Pure Master ...
