storm如何分配任务和负载均衡?

作者: 云计算机网 分类: 云计算知识 发布时间: 2016-04-08 22:10

背景

在上篇:storm的基础框架分析

基本探讨了storm的:

worker、executor等组件的关系. 线程模型和消息系统. 任务分配流程. topology提交到执行的过程.

但,感觉对nimbus、supervisor、并行度,任务分配和负载均衡的关系没有交代清楚,而且细节上也有些瑕疵,本篇做一个补充。

基础组件之间的关系

这里写图片描述

这里做一些补充:

worker是一个进程,由supervisor启动,并只负责处理一个topology,所以不会同时处理多个topology. executor是一个线程,由worker启动,是运行task的物理容器,其和task是1 -> N关系. component是对spout/bolt/acker的抽象. task也是对spout/bolt/acker的抽象,不过是计算了并行度之后。component和task是1 -> N 的关系.

supervisor会定时从zookeeper获取topologies、已分配的任务分配信息assignments及各类心跳信息,以此为依据进行任务分配。

在supervisor周期性地进行同步时,会根据新的任务分配来启动新的worker或者关闭旧的worker,以响应任务分配和负载均衡。

worker通过定期的更新connections信息,来获知其应该通讯的其它worker。

worker启动时,会根据其分配到的任务启动一个或多个executor线程。这些线程仅会处理唯一的topology。

executor线程负责处理多个spouts或者多个bolts的逻辑,这些spouts或者bolts,也称为tasks。

并行度的计算

相关配置及参数的意义

具体有多少个worker,多少个executor,每个executor负责多少个task,是由配置和指定的parallelism-hint共同决定的,但指定的并行度并不一定等于实际运行中的数目。

1、TOPOLOGY-WORKERS参数指定了某个topology运行时需启动的worker数目.

2、parallelism-hint指定某个component(组件,如spout)的初始executor的数目.

3、TOPOLOGY-TASKS是component的tasks数,计算稍微复杂点:
(1). 如果未指定TOPOLOGY-TASKS,此值等于初始executors数.
(2). 如果已指定,和TOPOLOGY-MAX-TASK-PARALLELISM值进行比较,取小的那个作为实际的TOPOLOGY-TASKS.

用代码来表达就是:

(defn- component-parallelism [storm-conf component]  (let [storm-conf (merge storm-conf (component-conf component))        num-tasks (or (storm-conf TOPOLOGY-TASKS) (num-start-executors component))        max-parallelism (storm-conf TOPOLOGY-MAX-TASK-PARALLELISM)        ]    (if max-parallelism      (min max-parallelism num-tasks)      num-tasks)))

4、对于acker这种特殊的bolt来说,其并行度计算如下:

(1). 如果指定了TOPOLOGY-ACKER-EXECUTORS,按这个值计算.

  • 在Linux中,有时为了简单起见,需要自动将文件上传到ftp,爱站技术频道小编介绍了如何在Linux实现文件上传ftp服务器的代码实现,一起来了解一下吧!

    在Linux中,有时为了简单起见,需要自动将文件上传到ftp,爱站技术频道小编介绍了如何在Linux实现文件上传ftp服务器的代码实现,一起来了解一下吧!

    具体的脚本sync.sh如下:

    #!/bin/bashsource ~/.bashrc# 模拟进入ftp命令行模式,其中EOF表示退出标记符ftp -niv lt;lt;- EOF# 根据ftp的ip地址与端口号,连接ftp服务器open ip port# 输入用户名与密码user userName password# 以bin模式进行传输,与ASCII模式有区别,使用bin模块能够防止乱码问题bin# 上传文件get $1# 结束bye#退出EOF

    然后将该脚本sync.sh加入环境变量,每次只需执行 sync.sh filename即可,具体的执行过程如下:

    Connected to *.*.*.*.220 Microsoft FTP Service331 Password required for userName.230 User logged in.Remote system type is Windows_NT.200 Type set to I.local: filename remote: filename200 PORT command successful.125 Data connection already open; Transfer starting.226 Transfer complete.112089125 bytes received in 44.62 secs (2453.3 kB/s)221 Goodbye.

    通过爱站技术频道小编介绍的内容,相信大家都有了一定的了解,想要了解更多的技术内容,请继续关注爱站技术频道吧!

  • 相关推荐:

  • 如何在Linux实现文件上传
  • 如何用win7创建个人ftp站
  • 阿里云:万亿新零售市场
  • 对话全球平台:变革与服
  • 如何增强基于云虚拟服务
  • 名词解析:如何理解私有
  • 如何为虚拟化数据中心添
  • 如何打造完善的桌面虚拟
  • 老生常谈如何打造服务器
  • 虚拟架构是如何影响安全
  • 网站内容禁止违规转载,转载授权联系中国云计算网