Storm并行机制与常见参数配置

一、Strom并行机制

1.概述:

    Storm集群中的并发度主要由以下四个概念来决定:

1)Nodes--服务器

        指的是Storm集群中的一个服务器,会执行Topology的一部分运算,一个Storm集群中包含一个或者多个Node。

2)Workers--JVM进程

       指一个Node上相互独立运作的JVM进程,每个Node可以配置运行一个或多个worker。一个Topology会分配到一个或者多个worker上运行。

3)Executor--执行线程    

        指一个worker的jvm中运行的java线程。Storm默认会给每个executor分配一个task。此外,多个task也可以指派给同一个executer来执行,但需要明确指定。

4)Task--bolt或spout实例的对象

        task是spout和bolt的实例,他们的nextTuple()和execute()方法会被executors线程调用执行。

2.Strom的并发度

Storm的默认并发设置值是1。

即:一台服务器(node)——为topology分配一个worker——每个executor执行一个task。

如下图所示:

此时唯一的并发机制出现在线程级。

在单机模式下增加并发的方式可以体现在分配更多的worker和executer给topology

如下图,增加worker进程:

如下图,增加executor线程:

注:单机模式下,增加worker的数量不会有任何提升速度的效果。

3.如果通过代码增加Strom的并发度

1)增加worker

可以通过API和修改配置两种方式修改分配给topology的woker数量。

代码示例:

Config config = new Config();

config.setNumWorkers(2);

2)增加Executor

代码示例:

builder.setSpout(spout_id,spout,2)

builder.setBolt(bolt_id,bolt,executor_num)

3)增加Task

代码示例:

builder.setSpout(...).setNumTasks(2);

builder.setBolt(...).setNumTasks(task_num);

4.通过单词统计案例来理解并发度

①现在,我们先来设定worker进程数量=2(默认是1)

config.setNumWorkers(2);

②接下来,我们更改executor和task的并发度

builder.setSpout(spout_id,spout,2) //spoutexecutor并发度设为2。此外,如果不设定task并发度,则task的并发度也为2,因为默认是一个线程执行一个task

builder.setBolt(split_bolt_id,splitBolt,2).setNumTasks(4).shuffleGrouping(spout_id);//splitBolt的线程并发度设为2task并发度为4。在这种情况下,相当于一个executor执行两个splitBolttask实例

builder.setBolt(wordcount_bolt_id,wordcountBolt,2)……//设定wordcountBolt的并发度,

此外,ReportBolt的并发度未做设置,所以默认都是一个线程处理一个对应的task实例

 

最后如图所示(摘自于《Storm分布式实时计算模式》P16):

1.Worker=2

2.SentenceSpout 线程并发度=2  任务并发度=2

3.Split Sentence Bolt  线程并发度=2  任务并发度=4

4.Word Count Bolt  线程并发度=4  任务并发度=4

5.Report Bolt  线程并发度=1 任务并发度=1

 

二、Strom常见参数配置

 

示例:

#Storm集群对应的ZooKeeper集群的主机列表
storm.zookeeper.servers:
     - "ip01"
     - "ip02"
     - "ip03"

 

#Storm集群对应的ZooKeeper集群的服务端口,ZooKeeper默认端口为2181
storm.zookeeper.port: 2181

#Storm的元数据在ZooKeeper中存储的根目录
storm.zookeeper.root: /storm

#整个Storm集群的Nimbus节点
nimbus.host: ip01


#StormSlot(槽位)。SlotWorker是一一对应的。即有一个slot就可以启动一个worker进程。因为进程和进程之间需要通信,比如传输数据,所以需要配置端口号。

配置几个端口,每台服务器就会启动几个slot。(注意端口不要冲突)

配置建议1:因为Storm是基于内存的实时计算,所以在配置Slot个数时,最好是服务器core的整数倍。比如一台服务器8核,slot的个数:8、16、24……

配置建议2:slot个数不要超过: (物理内存 - 虚拟内存)/每个java进程最大的内存使用量

比如:物理内存:64  虚拟内存:4  每个java进程:1

一般配置32个  。

supervisor.slots.ports:
        - 6700
        - 6701
        - 6702
        - 6703
        - 6704
        - 6705
        - 6706
        - 6707
        - 6708
        - 6709
        - 6710
 

#Storm集群的UI地址端口号,默认是8080

ui.port :8080

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任错错

如果对您有帮助我很开心

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值