调度Scheduler

Storm现在有4种内置调度程序:DefaultScheduler,IsolationScheduler,MultitenantScheduler,ResourceAwareScheduler。

Configuration

Storm有各种配置可用于调整nimbus, supervisors和running topologies的行为。 某些配置是系统配置,无法通过拓扑基础在拓扑上进行修改,而其他配置可以按拓扑进行修改。

守护进程容错

Storm有几个不同的守护进程。 Nimbus安排workers,Supervisors启动和杀死workers,log viewer提供日志访问权限,UI显示群集状态。

  • workers死后会发生什么?

    当workers死亡时,Supervisors将重新启动它。如果它在启动时连续失败并且无法接受Nimbus的心跳,Nimbus将重新安排workers。

  • 节点死亡时会发生什么?

    分配给该计算机的任务将超时,Nimbus会将这些任务重新分配给其他计算机。

  • 当Nimbus或Supervisor守护进程死亡时会发生什么?

    Nimbus和Supervisor守护进程设计为快速失败(遇到任何意外情况时进程自毁)和无状态(所有状态保存在Zookeeper或磁盘上)。如 Setting up a Storm cluster,Nimbus和Supervisor守护程序在如daemontools或monit之类的工具监督下运行。因此,如果Nimbus或Supervisor守护进程死亡,它们会重新启动,就像什么都没发生一样。

    最值得注意的是,Nimbus或Supervisor的死亡不会影响workers进程。

  • Nimbus是单点故障吗?

    如果丢失了Nimbus节点,workers仍将继续运行。此外,如果workers死亡,Supervisor将继续重新启动workers。但是,如果没有Nimbus,workers将不会在必要时重新分配给其他计算机(例如,如果您丢失了工作机器)。

    Storm Nimbus自1.0.0以来一直很受欢迎。更多信息请参阅Nimbus HA Design文档。

  • Storm如何保证数据处理?

    Storm提供了保证数据处理的机制,即使节点死亡或消息丢失也是如此。有关详细信息,请参阅保证消息处理。

Storm UI REST API

Storm UI守护程序提供REST API,允许您与Storm集群进行交互,其中包括检索度量数据和配置信息以及管理操作(如启动或停止拓扑)。

Understanding the parallelism of a Storm topology

运行拓扑的构成是:工作进程,执行程序和任务
What makes a running topology: worker processes, executors and tasks

Storm区分以下三个主要实体,这些实体用于在Storm集群中实际运行拓扑:

  • 工人流程Worker processes
  • 执行者(线程)Executors (threads)
  • 任务Tasks

以下是他们关系的简单说明:

一个工作进程执行拓扑的一个子集。一个工作进程属于特定拓扑,并且可以为该拓扑的一个或多个组件(Spout或Bolt)运行一个或多个执行器。一个正在运行的拓扑包含许多在Storm集群中的许多计算机上运行的此类进程。

一个执行者executor是一个线程,它是由一个worker进程催生的。它可以为同一组件(Spout或Bolt)运行一个或多个任务。

一个任务 task 执行实际的数据处理-在代码中实现的每个spout或bolt都会在整个群集中执行尽可能多的任务。在拓扑的整个生命周期中,组件的任务数始终相同,但组件的执行程序(线程)数量可能会随时间而变化。这意味着以下条件成立:#threads ≤ #tasks。默认情况下,任务数设置为与执行程序数相同,即Storm中每个线程运行一个任务。

配置拓扑的并行性

请注意,在Storm的术语中,“并行性”专门用于描述所谓的并行性提示,这意味着组件的执行者(线程)的初始数量。在本文档中,虽然我们在更一般意义上使用术语“并行性”来描述如何不仅可以配置执行程序的数量,还可以配置工作进程的数量和Storm拓扑的任务数量。我们将特别提到当“平行主义”用于正常,狭隘的Storm定义时。

以下部分概述了各种配置选项以及如何在代码中设置它们。虽然设置这些选项的方法不止一种,但表中只列出了其中一些选项。Storm当前具有以下配置设置优先顺序:defaults.yaml< storm.yaml<拓扑特定配置<内部组件特定配置<外部组件特定配置。

工作进程数

  • 描述:为群集中的计算机上的拓扑创建多少个工作进程。
  • 配置选项:TOPOLOGY_WORKERS
  • 如何设置代码:配置#setNumWorkers

执行者数(线程数)

  • 描述:每个组件生成多少个执行程序。
  • 配置选项:无(将parallelism_hint参数传递给setSpout或setBolt)
  • 如何设置代码(示例):
    TopologyBuilder#setSpout()
    TopologyBuilder#setBolt()

请注意,从Storm 0.8开始,parallelism_hint参数现在指定该Bolt的执行者的初始数量(不是任务!)。

任务数量

  • 描述:每个组件创建多少个任务。

  • 配置选项:TOPOLOGY_TASKS

  • 如何设置代码(示例):

    • ComponentConfigurationDeclarer#setNumTasks()

    • 以下是在实践中显示这些设置的示例代码段:

topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout");

在上面的代码中,我们配置了Storm来运行GreenBolt,它初始带有两个执行器和四个相关任务 。Storm中每个执行程序(线程)运行两个任务。如果您没有明确配置任务数,Storm将默认每个执行程序一个任务。

运行拓扑的示例

下图显示了简单拓扑在操作中的外观。拓扑结构由三个部分组成:一个叫做spout BlueSpout,两个叫做GreenBolt和YellowBolt。组件被链接,以便BlueSpout将其输出发送到GreenBolt,然后将其自己的输出发送到YellowBolt。

在GreenBolt被配置为每代码段以上而BlueSpout和YellowBolt仅设置并行提示(执行人数)。这是相关代码:

Config conf = new Config();
conf.setNumWorkers(2); // use two worker processestopologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4).shuffleGrouping("blue-spout");topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6).shuffleGrouping("green-bolt");StormSubmitter.submitTopology("mytopology",conf,topologyBuilder.createTopology());

当然,Storm附带了额外的配置设置来控制拓扑的并行性,包括:

  • TOPOLOGY_MAX_TASK_PARALLELISM:此设置为可以为单个组件生成的执行程序数量设置上限。它通常在测试期间用于限制在本地模式下运行拓扑时产生的线程数。您可以通过例如Config#setMaxTaskParallelism()设置此选项。

如何更改正在运行的拓扑的并行性

Storm的一个很好的功能是,您可以增加或减少工作进程和/或执行程序的数量,而无需重新启动集群或拓扑。这样做的行为称为再平衡。

您有两种方法可以重新平衡拓扑:

  • 使用Storm Web UI重新平衡拓扑。

  • 使用CLI工具风暴重新平衡,如下所述。

    • 以下是使用CLI工具的示例:
Reconfigure the topology "mytopology" to use 5 worker processes,the spout "blue-spout" to use 3 executors andthe bolt "yellow-bolt" to use 10 executors.```

Storm API文档,最值得注意的是类Config

常问问题

最佳实践

Storm的基础知识-调度,并行,守护进程等(3)相关推荐

  1. 进程线程(一)——基础知识,什么是进程?什么是线程?

    1. 什么是进程和线程 现代操作系统比如Mac OS X,UNIX,Linux,Windows等,都是支持"多任务"的操作系统. 1.1 百科解释 进程(Process) 是计算机 ...

  2. Linux的基础知识——mmap父子通信进程和匿名通信

    1.mmap父子进程通信 \qquad父子等有血缘关系的进程之间也可以通过mmap建立的映射区来完成数据通信.但相应的要在创建映射区时候指定对应的标志位参数flags: \qquadMAP_PRIVA ...

  3. Android基础知识巩固系列 Android之四大组件——ContentProvider(内容提供者)

    因为最近要面试,于是打算整理整理一下Android的基础知识,由于之前本人已经学习过大概的Android基础知识,这里主要讲这四大组件.五大存储.六大布局.网络请求等这些内容,其他一些等有时间再整理, ...

  4. java基础巩固-宇宙第一AiYWM:为了维持生计,四大基础之OS_Part_1整起(进程线程协程并发并行、进程线程切换进程间通信、死锁\进程调度策略、分段分页、交换空间、OS三大调度机制)

    PART0:OS,这货到底是个啥? OS,是个啥? OS的结构们: 存储器: 存储器的层次结构: 内存:我们的程序和数据都是存储在内存,我们的程序和数据都是存储在内存,每一个字节都对应一个内存地址.内 ...

  5. linux 进程及调度基础知识

    引用 Linux进程管理专题 Linux进程管理与调度-之-目录导航 Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五) 蜗窝科技-进程管 ...

  6. linux的基础知识——守护进程

    文章目录 1.守护进程 2.创建守护进程模型 3.创建守护进程的步骤 4.举例:创建一个守护进程 5.守护进程随着系统启动而启动 1.守护进程 2.创建守护进程模型 3.创建守护进程的步骤 4.举例: ...

  7. 大数据技术之_17_Storm学习_Storm 概述+Storm 基础知识+Storm 集群搭建+Storm 常用 API+Storm 分组策略和并发度

    大数据技术之_17_Storm学习 一 Storm 概述 1.1 离线计算是什么? 1.2 流式计算是什么? 1.3 Storm 是什么? 1.4 Storm 与 Hadoop 的区别 1.5 Sto ...

  8. 进程和线程基础知识(已经是最详细的啦)

    进程和线程基础知识 文章目录 进程和线程基础知识 一.前言 二.进程 1.引入 2.并发和并行有什么区别? 3.进程与程序的关系的类比 4.进程的状态 5.进程的控制结构 6.进程的控制 7.进程的上 ...

  9. Linux进程管理:进程和线程基础知识

    <Linux进程管理:进程和线程基础知识> <Linux-进程管理> <C语言进程的内存地址空间分配> <进程和线程模型> <(1)Linux进程 ...

最新文章

  1. JAVA Thread线程异常监控
  2. pygame (1) 移动小乌龟
  3. tkinter 笔记:创建输入框并显示结果 (莫烦python笔记)
  4. 每日温度—leetcode739
  5. eclipse开发cocos2dx 3.2环境搭建之三: ccp-tests项目编译 (this project is not a CDT project)
  6. 文献学习(part87)--Linearized Alternating Direction Method with Adaptive Penalty for Low-Rank ...
  7. js的深浅拷贝( 赋值后原值被覆盖的问题 )
  8. 数据结构中的树 --- 红黑树
  9. 【Sofa】Sofa比赛成绩记录
  10. 编写JAVA脚本的JSP页面
  11. 上传pdf图片 文件
  12. 创建枚举类 java_Java枚举类
  13. 堪萨斯州立大学计算机科学,美国留学:2019计算机专业最新排名
  14. matlab的wthcoef函数,小波去噪及其MATLAB中的函数.pdf
  15. 许晓斌_Maven实战(六)——Gradle,构建工具的未来?
  16. 一篇文章让你学会JWT令牌认证
  17. ietester测试本地html,网站浏览器兼容测试工具IETester
  18. 大数据面前,统计学的价值在哪里
  19. Windows远程桌面怎么使用,看完马上学会!
  20. 新概念二册 Lesson 45 A clear conscience问心无愧(复习被动语态+过去完成时被动语态)

热门文章

  1. Android自定义控件之onMeasure详解
  2. java腾讯云人脸识别接口
  3. 单内存16g和双8g差别大吗_电脑内存条单16G和双8G哪个好,单条是不是稳定
  4. 第1章 Stata管理变量与数据
  5. java+ssh+mysql新闻网站
  6. 很好的社交文章-如何在酒桌上较快地与陌生人建立起关系?
  7. homeassistant 百度语音服务的调用
  8. ssm框架搭建连接mysql_SSM框架集搭建
  9. 《黑客与画家》读书笔记三(完结)
  10. WIN10蓝牙不可用,操作中心没有蓝牙图标的解决方法