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类实现,如下:

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

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

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中添加如下内容;

<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.path.to.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</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. lintcode :nth to Last Node In List 链表倒数第n个节点

    题目: 链表倒数第n个节点 找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. ...

  2. Linux资源监控命令/工具(网络)

    1.手动/自动设定与启动/关闭IP参数:ifconfig,ifup,ifdown      这三个指令的用途都是在启动网络接口,不过,ifup与ifdown仅能就/etc/sysconfig/netw ...

  3. Visual Studio Support (DDEX)

    原文 VS2012,VS2013,and VS2015Pro+NpgsqlDdexProvider+EFv6 how to(by @kenjiuno) Reference: #213 Overview ...

  4. MVC运行原理

    Global.asax Global.asax 文件,有时候叫做 ASP.NET 应用程序文件,提供了一种在一个中心位置响应应用程序级或模块级事件的方法.你可以使用这个文件实现应用程序安全性以及其它一 ...

  5. 转ATL对象类型

    http://hi.baidu.com/rural_child/item/d91ce5d8fba9c8e73cc2cbf9 1.Objects a.Simple Object:用于实现业务逻辑,无用户 ...

  6. js 字符串日期 转成 Date

    只支持 2015/09/23 反斜杠这样类型 2015-09-23 单横的这种无法识别 var dateStr='${endDate}'; dateStr=dateStr.replace(/-/g,' ...

  7. C#sqlbulkcopy的优化

    最近在进行项目的优化.现在部分数据的拷贝时间过长.需要进行上线前的优化,尝试,批次的数量和拷贝次数的之间的合理数值关系. 最近项目中使用到了SqlBulkCopy实现批量复制,在这里,我把部分代码筛选 ...

  8. 用paint 计算字符串的像素宽度

    方法1: //直接返回参数字符串所占用的像素宽度 Paint paint = new Paint(); width = paint.measureText(str); 有一些view可以直接得到pai ...

  9. Fedora20 优化体验

    玩了些许天的fedora系统,到底是加深了对于linux系统的了解 为了便于大家对于fedora系统支持,我将这些天对于fedora的一些不适之处及改进的策略进行了一下小总结.便于新手对于fedora ...

  10. bzoj3413

    SAM好题,显然我们不能与每个后缀都去算LCP 考虑对询问串每一位算贡献,先构建出逆序构建自动机,这样我们得到了原串的后缀树(parent树) 根据parent树的定义,一个节点对应字符串出现的位置对 ...