Storm入门教程

1. Storm基础

Storm

Storm主要特点

Storm基本概念

Storm调度器

Storm配置

Guaranteeing Message Processing(消息处理保障机制)

Daemon Fault Tolerance(守护线程容错机制)

理解Storm拓扑的并行

Tutorial

Local模式

本地模式的通用配置:

在生产环境中运行Topologies

通用配置

杀死topology

更新运行中的topology

监控topology



Local模式

本地模式模拟Storm集群用于测试和开发topologies。在本地模式运行topologies 类似于在集群中运行topologies 。

为了创建进程内的集群,可用LocalCluster类实现,如下:

  1. import org.apache.storm.LocalCluster;
  2. LocalCluster cluster = new LocalCluster();

你可以用LocalCluster 的submitTopology 方法提交topologies 。对于用StormSubmitter类中的方法,该类用于向Storm集群中提交topologies ,submitTopology 方法参数列表为topology名称,topology配置和topology对象,你可以用killTopology 方法根据Topology 的名称结束Topology ,如下所示:

  1. cluster.shutdown();

本地模式的通用配置:

1.Config.TOPOLOGY_MAX_TASK_PARALLELISM:这个配置项是单个组件执行线程的最大值,生产环境中的topologies 并行度(成千上百个线程)较大导致负载过度,所以需要在本地模式中尽量测试。这个配置项允许你容易控制并行度。

2.Config.TOPOLOGY_DEBUG:当设置为true时,Storm将记录任一spout或bolt发送的tuple。这对于调试尤其有用。

在生产环境中运行Topologies

在生产集群中运行Topologies和本地模式一样,步骤如下:

1)定义topology(如果用Java那么用类TopologyBuilder来定义topology)

2)用类StormSubmitter 将topology提交到集群中。StormSubmitter 接受topology的名称、topology的配置和topology本身。如下:

Config conf = new Config();

conf.setNumWorkers(20);

conf.setMaxSpoutPending(5000);

StormSubmitter.submitTopology("mytopology", conf, topology);

3)将你的代码及其依赖打成jar包(除了Storm jars,因为所有的worker节点上已存在类路径上)

如果你用Maven,那么 Maven Assembly Plugin插件能为你打jar包。在pom.xml中添加如下内容;

  1. <plugin>
  2. <artifactId>maven-assembly-plugin</artifactId>
  3. <configuration>
  4. <descriptorRefs>
  5. <descriptorRef>jar-with-dependencies</descriptorRef>
  6. </descriptorRefs>
  7. <archive>
  8. <manifest>
  9. <mainClass>com.path.to.main.Class</mainClass>
  10. </manifest>
  11. </archive>
  12. </configuration>
  13. </plugin>

然后运行mvn assembly:assembly得到合适的jar包。确认jar包中排除了Storm jars因为集群中的类路径上已经存在。

4)用storm 客户端程序提交topology 到集群,指定jar路径、运行的类以及参数,如下:

storm jar path/to/allmycode.jar org.me.MyTopology arg1 arg2 arg3

storm jar将提交jar到集群中并配置类StormSubmitter和集群通信。在本例中,在上述例子中上传了jar或会调用org.me.MyTopology类的主函数,参数列表为"arg1", "arg2", and "arg3".

通用配置

topology的配置项有很多,你可以在这里找到。前缀为“TOPOLOGY”的配置项可以被覆写(集群中的其他配置项不能被覆写)。下面是TOPOLOGY的常用配置:

1.Config.TOPOLOGY_WORKERS:改项设置了用于执行topology的worker进程数。例如,如果你设置为25,那么集群中将会有25个Java进程用于执行所有的任务。如果topology中所有的并行度为150,那么每个worker进程将有6个线程。

2.Config.TOPOLOGY_ACKER_EXECUTORS:该项配置了executors的数目,它用于跟踪元组树和监控spout元组已经被完全处理。Ackers 是Storm可靠性模型的一部分。如果没有设置该项或设置为空,Storm将设置acker executor和worker的数目相等。如果这个变量设置为0,Storm将立马响应元组只要他们从spout发送出来,不能保证可靠性。

3.Config.TOPOLOGY_MAX_SPOUT_PENDING:该项设置了单个spout 任务所能接受的元组数目(只要没有acked的元组或失败的都算)。强烈推荐你配置该项防止队列持续增大。

4.Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS:spout元组被认定失败的超时时间。该项默认是30s,对于大多数topologies是有效的。

5.Config.TOPOLOGY_SERIALIZATIONS:你可以给Storm注册更多的序列化器,这样你就可以自定义元组类型。

杀死topology

杀死topology,如下命令:

storm kill {stormname}

stormname和你提交时的topology保持一致。

Storm不会立即杀死topology。相反,它会使所有的spouts失效,这样它们不会发送更多的元组,然后等Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS 秒后杀死所有的workers,这允许topology有足够的时间处理正在执行的tuple。

更新运行中的topology

为了更新运行中的topology,当前唯一的选择是杀死当前的topology然后重新提交。一个计划中的特性是用storm swap命令切换运行中的topology为新的topology,确保最小的故障时间。

监控topology

监控topology最好用Storm UI。Storm UI提供了任务中的错误发生信息和关于每个组件的吞吐量和延迟性能的细粒度的状态。当然,你也可以看集群中worker的日志。

【原】Storm Local模式和生产环境中Topology运行配置的更多相关文章

  1. 生产环境中tomcat的配置

    生产环境中要以daemon方式运行tomcat 通常在开发环境中,我们使用$CATALINA_HOME/bin/startup.sh来启动tomcat, 使用$CATALINA_HOME/bin/sh ...

  2. 生产环境中CentOS7部署NET Core应用程序

    NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. ...

  3. 生产环境中 Ngx_lua 使用技巧和应用的范例

    生产环境中 Ngx_lua 使用技巧和应用的范例 时间 -- :: 51CTO技术博客 原文 http://rfyiamcool.blog.51cto.com/1030776/1252501 主题 L ...

  4. 理解Docker(6):若干企业生产环境中的容器网络方案

    本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

  5. 生产环境中使用Docker Swarm的一些建议

    译者按: 实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes, Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它 ...

  6. Kubernetes 在生产环境中常用架构

    Kubernetes 在生产环境中常用架构 首先,我们来梳理下Kubernetes生产架构,其设计适用于绝大多数环境.如下图所示 在该架构中,我们可以将其分为四层,如下: Client层:即Kuber ...

  7. Dubbo Mesh 在闲鱼生产环境中的落地实践

    本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是“借力开源.反哺开源” ...

  8. 明白生产环境中的jvm参数

    明白生产环境中的jvm参数 写代码的时候,程序写完了,发到线上去运行,跑一段时间后,程序变慢了,cpu负载高了--一堆问题出来了,所以了解一下生产环境的机器上的jvm配置是有必要的.比如说: JDK版 ...

  9. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

随机推荐

  1. 特殊的css样式

    在一定范围大小变化的div .div { width:auto; height:auto; min-height:100px; min-width:100px; max-height:200px; m ...

  2. cololection

    package cn.bjsxt.col; /** * 简化迭代器原理 * hasNext * next * @author Administrator * */ public class MyArr ...

  3. new int[]和new int()的区别

    1. new int[] 是创建一个int型数组,数组大小是在[]中指定,例如:int * p = new int[10]; //p执行一个长度为10的int数组.2. new int()是创建一个i ...

  4. 【Todo】【转载】ES6的学习记录

    粗略看了一遍React的内容,然后看了 ES6 的入门文章: http://es6.ruanyifeng.com/#docs/intro 通过这个链接可以查看浏览器对 ES6 的支持程度: http: ...

  5. maximum-gap(经过了提示)

    下面的分桶个数做的不太好,原来的解法是用的 int gap = (big - small) / vlen; if (gap == 0) { gap = 1; } 下面是现在的Java解法: packa ...

  6. Unique Encryption Keys (思维题 预处理)

    题目 题意:给m个数字, q次询问, 询问b到e之间如果有重复数字就输出, 没有就输出OK 思路:用f[i]数组 记录从i开始向后最近的有重复数字的 位置, 如 1 3 2 2, 则f[1] = 4; ...

  7. android开发中如何结束所有的activity

    每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android. ...

  8. HDU 4893 线段树

    比赛时太大意,斐波拉契数列开小了. 题目大意:1个序列,3种操作,改变序列某个数大小,将序列中连续的一段每个数都变成其最近的斐波拉契数,以及查询序列中某一段的数之和. 解题思路:维护add[]数组表示 ...

  9. JAVA使用原始HttpURLConnection发送POST数据

    package com.newflypig.demo; /** * 使用jdk自带的HttpURLConnection向URL发送POST请求并输出响应结果 * 参数使用流传递,并且硬编码为字符串&q ...

  10. bzoj3244

    很不幸,这题我又被虐了,给个链接http://www.cnblogs.com/g-word/p/3288675.html ..] of longint; f:..,..] of longint; mx ...