JStorm - 基础概念

原创
2017/02/22 19:27
阅读数 494

JStorm简介

JStorm 是一个类似Hadoop MapReduce的系统,相关的介绍在官网上很全,可以到官网进行查阅: JStorm 官网

1 基本概念

1.1 Topology

image
在JStorm中,一个topology相当于Hadoop中的一个Job,它代表要被JStorm集群执行的任务。
一个topology由多个spout和bolt节点组成,数据在节点间流动和处理。对一个topology,JStorm最终会调度成一个或多个worker,每个worker即为一个真正的操作系统执行进程,分布到一个集群的一台或者多台机器上并行执行。

1.2 Spout

spout代表输入的数据源,这个数据源可以是任意的,比如说kafaka,DB,HBase,甚至是HDFS等,JStorm从这个数据源中不断地读取数据,然后发送到下游的bolt中进行处理。
JStorm框架对spout组件定义了一个接口:nextTuple,顾名思义,就是获取下一条消息。执行时,可以理解成JStorm框架会不停地调这个接口,以从数据源拉取数据并往bolt发送数据。

1.3 Bolt

bolt代表处理逻辑,bolt收到消息之后,对消息做处理(即执行用户的业务逻辑),处理完以后,既可以将处理后的消息继续发送到下游的bolt,这样会形成一个处理流水线(pipeline,不过更精确的应该是个有向图);也可以直接结束。通常一个流水线的最后一个bolt,会做一些数据的存储工作,比如将实时计算出来的数据写入DB、HBase等,以供前台业务进行查询和展现。
bolt组件定义了一个接口:execute,这个接口就是用户用来处理业务逻辑的地方。

1.4 Tuple

JStorm当中将Stream中的数据抽象为了Tuple,一个Tuple就是一个Value List,List值的每个Value都有一个Name,并且该Value可以是基本类型,字符类型,字节数组等,当然也可以是其它可序列化的类型。 Topology的每个节点都要说明它所发射出的Tuple的字段的Name,其它节点只需要订阅该Name就可以接收处理相应的内容。

1.5 Slot

在JStorm当中,Slot的类型分为四种,他们分别是:CPU,Memory,Disk,Port;与Storm有所区别(Storm局限 于Port)。一个Supervisor可以提供的对象有:CPU Slot、Memory Slot、Disk Slot以及Port Slot。

  1. 在JStorm中,一个Worker消耗一个Port Slot,默认一个Task会消耗一个CPU Slot和一个Memory Slot
  2. 在Task执行较多的任务时,可以申请更多的CPU Slot
  3. 在Task需要更多的内存时,可以申请更多的额Memory Slot
  4. 在Task磁盘IO较多时,可以申请Disk Slot

2 系统架构

image

2.1 Nimbus

nimbus代表主控节点,运行Nimbus守护进程,类似于Hadoop中的jobtracker,负责在集群中分发代码,分配任务,负载均衡,状态并监控等工作。
nimbus定期从zookeeper中获取supervisor,worker,task 等组件的心跳信息,结合已分配的任务信息assignments、集群现有的topologies(已运行+未运行)等等信息,来进行任务分配。

2.2 Supervisor

supervisor代表工作节点,每个工作节点运行Supervisor守护进程,负责监听工作节点上已经分配的主机作业,启动和停止Nimbus已经分配的工作进程。
supervisor会定时从zookeeper获取topologies、任务分配信息assignments及各类心跳信息,以此为依据进行任务分配。在supervisor同步时,会根据新的任务分配情况来启动新的worker或者关闭旧的worker并进行负载均衡。
如果相关的topology代码不在本地,supervisor会从nimbus下载代码并写入本地文件。

2.3 Worker

每个worker即为一个真正的操作系统执行进程,分布到一个集群的一台或者多台机器上并行执行。是具体处理Spout/Bolt逻辑的进程,一个Worker只能执行一个topology,但是可以执行其中的多个任务线程。

2.4 Task

在每个worker中,又可以有多个task,分别代表一个执行线程。每个task就是上面提到的组件(component)的实现,要么是spout要么是bolt。

3 流程

image

topology的提交流程:

  1. 非本地模式下,客户端通过thrift调用nimbus接口,来上传代码到nimbus并触发提交操作。
  2. nimbus进行任务分配,并将信息同步到zookeeper。
  3. supervisor定期获取任务分配信息,如果topology代码缺失,会从nimbus下载代码,并根据任务分配信息,同步worker。
  4. worker根据分配的tasks信息,启动多个task线程,同时实例化spout、bolt、acker等组件,此时,等待所有connections(worker和其它机器通讯的网络连接)启动完毕,此storm-cluster即进入工作状态。
  5. 除非显示调用kill topology,否则spout、bolt等组件会一直运行。
展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部