`
woodding2008
  • 浏览: 289698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Storm Worker中的线程

 
阅读更多

worker中的每个计时器都对应一个java线程,使用计数器进行心跳保持以及获取元数据更新信息。

创建woker 

mk-worker函数用于创建worker进程,主要工作包括:

  •   启动相应计时器
  •   创建worker中对应的executor
  •   启动接收消息线程

 

worker心跳信息 

do-heartbeat函数用户产生worker的心跳信息,这些信息被写入本地文件系统中。

supervisor会读取这些心跳信息以判断worker的状态,然后决定是否重启worker。

心跳信息包括如下信息:
current-time-secs:当前时间
storm-id:topologyId
executors:worker中包含的executer列表
port:worker对应的端口号

 

worker获取executor  

read-worker-executor函数用来计算分配到该worker的executor,它通过调用storm-cluster-state的assignment-info函数获取所有topology的分配信息,然后利用worker的assignment-id以及port进行过滤,获得摸个worker所有的executor,assignment-id对应于node。

 

下载topology配置以及代码 

在执行一个topology任务是,supervisor将从nimbus下载三个文件: 

  •   stormconf.ser topology配置项的序列化文件,执行任务前需要反序列化。

  •   stormcode.ser topology的定义文件。

  •   stormjar.jar  用户的资源文件以及源码等。

 

executor心跳信息 

do-executor-heartbeats函数用来发送Executor的心跳信道到zookeeper中,该心跳信息保存了Executor中Task的运行统计,Nimbus利用这些心跳信息判断Executor是否处于活跃状态,并且在storm ui上显示这些运行信息。

 

topology状态信息 

worker需要获知其执行的topology的状态,如果状态为deactive,spout应停止向外发送消息。
refresh-storm-active函数用于获取topology的状态信息。

 

worker数据接收 

mk-receive-queue-map函数用于为worker中的每一个executor创建接收队列,并将其存储hash表,key为 executorId,值为Disruptor Queue对象。

executorId实际是一个一元数组[startTaskId,endTaskId],表示要执行任务的区间。

 

 

worker数据发送  

mk-transfer-fn函数主要用于executor数据发送。 

  • 消息的目标taskId与发送taskId属于同一个worker,直接发送至接收端executor的接收队列,避免网络开销。
  • 消息的目标taskId与发送taskId不属于同一个worker,将消息通过netty发送出去。

 

关闭worker 

  •  关闭消息接收线程
  •  关闭worker中所有executor线程
  •  关闭消息发送队列和线程
  •   关闭所有计时器线程
  •   从zookeeper中清楚该worker的心跳信息
  •   断开zookeeper的链接

worker中线程以及通信关系图

 

  • 大小: 87.6 KB
分享到:
评论

相关推荐

    Storm源码走读笔记

    本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...

    STORM学习文档

    五、Worker 进程中的线程种类及用途 Worker 进程中有多种线程,包括: * 接收和发送线程:负责接收和发送消息。 * zk client 线程:负责向 Zookeeper 发送心跳消息。 * 定时器线程:负责定期执行一些任务,例如...

    Storm 源码分析

    - **Executor**:Executor是在Worker内部执行Spout或Bolt的线程,每个Executor可以运行多个任务实例。 - **Task**:Task是最小的计算单元,一个Spout或Bolt可以被分解为多个Task实例,并行运行在不同的Executor中。 ...

    storm原理分析

    4. **Executor**:Executor 是由 Worker 启动的一个 Java 线程,负责执行 Bolt 或 Spout 中的 Task。 5. **Task**:最小的工作单元,通常每个 Executor 包含一个或多个 Task。Task 实际上执行了用户自定义的逻辑。 ...

    Storm的文档详解

    - **Non Grouping**:默认分组,与 Shuffle Grouping 效果相似,但可能在同一线程中执行。 - **Direct Grouping**:直接分组,允许上游组件指定下游 Task 来处理 Tuple。 Storm 提供了丰富的 API 和组件,使其...

    storm剖析(pdf)

    任务(Task)通常在Executor线程中执行,并且一个Worker可以运行多个Task。 Storm集群中的状态可以保存在Zookeeper或者本地磁盘上。Nimbus和Supervisor节点都是无状态(state-less)的,并且设计为快速失败(fail-...

    Apache Hadoop---Storm.docx

    Workers运行具体的Spout和Bolt任务,每个worker可以包含多个task,这些task在executor线程中运行。Spout作为数据源,从外部数据源拉取数据并转化为内部的Tuple;Bolt接收Tuple进行处理,并决定数据是否继续传递到下...

    storm安装软件包

    - **Worker**:实际执行拓扑任务的进程,包含多个线程,每个线程运行一个Bolt或Spout实例。 - **Spout**:负责读取数据源并生成数据流。 - **Bolt**:处理数据流,进行计算、过滤、聚合等操作。 - **Zookeeper**:...

    storm一个简单实例

    3. **Storm集群部署**:实例在集群中运行,说明会涉及Zookeeper协调、Nimbus节点分配任务、Supervisor管理worker进程等集群管理内容。 4. **Java编程**:作为主要开发语言,Java提供了丰富的类库和工具,使得开发、...

    storm深入学习.pdf

    Executor是Storm中执行Bolt和Spout的线程,worker是JVM进程,负责运行一个或多个executor。Task是Storm中的最小执行单元,每个Task执行一个特定的Bolt或Spout的实例。优化Storm性能时,需要关注如何合理配置executor...

    02、Storm入门到精通storm3-0.pptx

    在本节中,我们将深入探讨Storm的核心概念和特性,包括它的记录级容错原理、配置详解、批处理、TOPN操作、流程聚合、DRPC(Direct RPC)以及executor、worker、task之间的关系和调优。 **Storm记录级容错原理** ...

    storm实时计算

    4. **Task**:Worker进程中的一个线程,执行具体的Spout或Bolt任务。 5. **Slots**:表示系统总的进程数量,每个Slot可以运行一个Worker进程。 6. **Nimbus与Supervisors**:通过Zookeeper集群进行交互和协调。...

    批量下载】storm环境搭建v1等.zip

    6. **配置优化**:在搭建环境中,可能需要对Storm的配置参数进行调整,如worker数量、executor线程数、心跳间隔等,以适应不同的性能需求。 7. **监控和调试**:Storm提供了一套监控工具,包括Web UI,可以查看拓扑...

    藏经阁-RESOURCE AWARE SCHEDULING IN APACHE STORM.pdf

    Executors是Worker进程中spawn的线程,执行Component的逻辑。Worker Process是Storm.spawn的进程,可以运行一个或多个Executors。 Storm的调度机制包括默认的轮询调度策略和多租户调度策略。默认调度策略使用naïve...

    Storm实战培训教程.pptx

    - Supervisor负责在工作节点上启动和管理Worker进程,每个Worker进程中包含多个线程,线程则运行任务(Task),任务是实际处理数据的实体。 - Nimbus是主控节点,负责分配和调度Topologies到各个Supervisor上,...

    Storm深入学习.pdf

    - **Executor、Worker 和 Task**:Executor 是在 Worker 进程中执行的线程,负责处理 Tuple。Worker 是 JVM 实例,可以包含多个 Executor。Task 是执行特定计算逻辑的基本单元,分配给 Executor 执行。 了解这些...

    storm集群的搭建-java示例代码.zip

    根据实际需求,还可以调整其他参数,如worker内存、线程数等。 4. **启动Zookeeper**:在所有服务器上启动Zookeeper服务,确保其正常运行。 5. **启动Storm**:在Nimbus节点上启动`bin/storm nimbus`,在其他...

    漫谈大数据第四期-storm

    Storm可以方便地在一个计算机集群中编写与扩展复杂的实时计算,Storm之于实时处理,就好比Hadoop之于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒可以处理数以百万计的消息。更棒的...

Global site tag (gtag.js) - Google Analytics