zoukankan      html  css  js  c++  java
  • Storm的并行度

      在Storm集群中,运行Topolopy的实体有三个:工作进程,executor(线程),task(任务),下图可以形象的说明他们之间的关系。

      

    工作进程

      Storm集群中的一台机器会为一个或则多个Topolopy运行一个或则多个工作进程。每个工作进程执行Topology的一个子集,一个工作进程属于一个特定的Topology,并为该Topology启动一个或则多个executor。

      可以通过backtype.storm.Config的选项TOPOLOGY_WORKERS来设置工作进程数,也可以通过config的方法setNumWorkers来设置工作线程数。例如:

    config.setNumWorkers(2);//设置工作线程数为2

    Executor

      Executor是由一个工作进程启动的线程,在一个工作进程中可以有一个或则多个Executor。一个Executor会为每一个Spout或则Solt运行一个或则多个任务,每一个线程只会为一个Spout或则Solt服务。

      每个Executor都需要单独的配置,在TopologyBuilder类中有setSpout和setBolt两个方法,分别用来设置Spout和Solt初始化时的Executor数量,如果不适用带有parallelism_hint参数的方法设置,默认的Executor的数量为1。

    任务

      任务是真正处理数据的实体,每一个Spout或则Solt都在集群中运行一个多则多个任务,在每个Topology中每个组件的任务数都是不变的,但是每个组件的Executor数是可以修改的。即线程数<任务数。默认情况下任务数和线程数设置为相等。

      每个组件启动多少个任务需要单独的配置,backtype.storm.Config的选项TOPOLOGY_TASKS用于配置每个组件启动多少个任务。在ComponentConfigurationDeclarer接口中有一个方法setNumTasks可以设置每个组件的任务数。  

    TopologyBuilder topologyBuilder = new TopologyBuilder();
    topologyBuilder.setSpout("word",new TestWordSpout(),1).setNumTasks(3);

    如何更新运行中的Topology的并行度?

      Storm的一个很好的功能是你可以动态的增加或则减少工作线程或则Executor,而不需要重启集群,这种模式叫做rebalancing。可以通过两种方式进行Rebalance操作

      1.通过StormUI的界面操作

      2.使用命令行工具storm Rebalance 例如:

    storm rebalance wordcount -n 5 -e readSpout=3 countSolt=10

      在这个例子中,将wordcount的工作进程调整为5,将readSpout的Executor数量调整为3,将countSolt的Executor数量调整为10

      

  • 相关阅读:
    AtomQQ 随笔
    android下服务器推送实现 androidpn分析
    Pyqt Model/view框架 5.排序与过滤
    微软官方windows phone开发视频教程第二天视频(附下载地址)
    微软官方windows phone开发视频教程第一天视频(附下载地址)
    微软官方windows phone开发视频教程第三/四天视频(附下载地址)
    初见Ajax——javascript访问DOM的三种访问方式
    一个经历,实习?兼职?
    SQL分割字符串详解
    asp.net服务器控件button先执行js再执行后台的方法
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8073634.html
Copyright © 2011-2022 走看看