2019独角兽企业重金招聘Python工程师标准>>>

在生产集群上运行topology 博客分类: 分布式计算

在生产集群上运行topology跟本地模式差不多。下面是步骤:

1)定义topology(如果是java的话, 用TopologyBuilder)

2) 使用StormSubmitter来把topology提交到集群。StormSubmitter的参数有:topology的名字,topology的配置对象,以及topology本身。

比如:

1
2
3
4
5
Config conf =  new  Config();
conf.setNumWorkers( 20 );
conf.setMaxSpoutPending( 5000 );
StormSubmitter.submitTopology( "name" ,
conf, topology);

3) 创建一个包含你的程序代码以及你代码所依赖的依赖包的jar包(有关storm的jar包不用包括, 这些jar包会在工作节点上自动被添加到classpath里面去)。如果你使用maven, 那么插件:Maven Assembly Plugin可以帮你打包,只要把下面的配置加入你的pom.xml。

01
02
03
04
05
06
07
08
09
10
11
12
13
< 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就可以打包了. 再说一下,不用包括storm相关的jar包,它们会自动加到classpath里面。

4)用storm客户端去提交jar包:

1
storm jar allmycode.jar org.me.MyTopology arg1 arg2 arg3

storm jar 会把代码提交到集群并且配置StormSubmitter类以让它和正确的集群进行通信。在这个例子里面,上传jar包之后storm jar命令会调用org.me.MyTopology的main函数,参数是 arg1, arg2, arg3。关于如何配置你的storm客户端去和storm集群进行通信可以看下配置storm开发环境。

常见配置

有很多topology级的配置可以设。这里有关于所有配置的清单, 以”TOPOLOGY”打头的配置是topology级别的配置,可以覆盖全局级别的配置。下面是一些比较常见的:

1)Config.TOPOLOGY_WORKERS: 这个设置用多少个工作进程来执行这个topology。比如,如果你把它设置成25, 那么集群里面一共会有25个java进程来执行这个topology的所有task。如果你的这个topology里面所有组件加起来一共有150的并行度,那么每个进程里面会有6个线程(150 / 25 = 6)。

2)Config.TOPOLOGY_ACKERS: 这个配置设置acker线程的数目。Ackers是Storm的可靠性API的一部分,关于storm的可靠性API可以看下:Twitter Storm如何保证消息不丢失。

3)Config.TOPOLOGY_MAX_SPOUT_PENDING: 这个设置一个spout task上面最多有多少个没有处理的tuple(没有ack/failed)回复, 我们推荐你设置这个配置,以防止tuple队列爆掉。

4)Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS: 这个配置storm的tuple的超时时间 – 超过这个时间的tuple被认为处理失败了。这个设置的默认设置是30秒,对于大多数的topology都已经足够了。关于storm的可靠性API可以看看Twitter Storm如何保证消息不丢失。

5)Config.TOPOLOGY_SERIALIZATIONS: 为了在你的tuple里面使用自定义类型,你可以用这个配置注册自定义serializer。

终止一个topology

要终止一个topology, 执行:

1
storm  kill  {stormname}

其中{stormname}是提交topology给storm集群的时候指定的名字。

storm不会马上终止topology。相反,它会先终止所有的spout,让它们不再发射任何新的tuple, storm会等Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS秒之后才杀掉所有的工作进程。这会给topology足够的时间来完成所有我们执行storm kill命令的时候还没完成的tuple。

更新一个运行中的topology

为了更新一个正在运行的topology, 唯一的选择是杀掉正在运行的topology然后重新提交一个新的。一个计划中的命令是实现一个storm swap命令来运行时更新topology, 并且保证前后两个topology不会同时在运行,同时保证替换所造成的“停机”时间最少。

监控topology

监控topology的最好的方法是使用Storm UI。Storm UI提供有关task里面发生的错误以及topology里面每个组件的吞吐量和性能方面的统计信息。同时你可以看看集群里面工作机器上面的日志。

转载于:https://my.oschina.net/xiaominmin/blog/1597547

在生产集群上运行topology相关推荐

  1. pythonspark集群模式运行_有关python numpy pandas scipy 等 能在YARN集群上 运行PySpark

    有关这个问题,似乎这个在某些时候,用python写好,且spark没有响应的算法支持, 能否能在YARN集群上 运行PySpark方式, 将python分析程序提交上去? Spark Applicat ...

  2. 从认证到调度,K8s 集群上运行的小程序到底经历了什么?

    作者 | 声东  阿里云售后技术专家 导读:不知道大家有没有意识到一个现实:大部分时候,我们已经不像以前一样,通过命令行,或者可视窗口来使用一个系统了. 前言 现在我们上微博.或者网购,操作的其实不是 ...

  3. 在local模式下的spark程序打包到集群上运行

    一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...

  4. spark在集群上运行

    1.spark在集群上运行应用的详细过程 (1)用户通过spark-submit脚本提交应用 (2)spark-submit脚本启动驱动器程序,调用用户定义的main()方法 (3)驱动器程序与集群管 ...

  5. anaconda3环境整体打包放在Spark集群上运行

    一.将虚拟Python环境打包 创建好环境后,进入到环境所在的文件夹,例如环境是/home/hadoop/anaconda3/envs, cd到envs下,使用打包命令将当前目录下的文件打成zip包: ...

  6. 如何在集群上运行Shark

    如何在集群上运行Shark 本文介绍在计算机集群上如何启动和运行Shark.如果对Amazon EC2上运行Shark感兴趣,请点击这里查看如何使用EC2脚本快速启动预先配置好的集群. 依赖: 注意: ...

  7. 小白学习Spark03-在集群上运行Spark

    03 在集群上运行Spark 3.1 Spark运行架构 3.1.1 驱动器节点 3.1.2 执行器节点 3.1.3 集群管理器 3.1.4 启动Spark程序 3.1.5 小结 3.2 使用spar ...

  8. MapReduce作业在Hadoop完全分布式集群上运行的问题与思考(持续更新)

    1.集群已搭建好且通过了WordCount测试,但是在eclipse上开发的程序却仍然是只在namenode上运行 不知道是不是没有配置好eclipse上的Map/Reduce Locations,个 ...

  9. Storm累计求和Demo并且在集群上运行

    打成jar包放在主节点上去运行. 1 import java.util.Map; 2 3 import backtype.storm.Config; 4 import backtype.storm.S ...

最新文章

  1. 太多选择——企业如何选择合适的BI工具?
  2. WebSphere Application Server性能调整工具包
  3. QPW 手机短信验证码发送日志表(tf_sms_send_log)
  4. Linux tcp三次握手,解读TCP三次握手
  5. ZooKeeper集群部署方式
  6. S3C6410和S5PV210的启动模式介绍
  7. java.nio.file中的Paths类
  8. Linux下bzero函数
  9. 软件测试 vs 软件实施,哪个工作好?
  10. 微信公众平台可以修改微信号了,微信号怎么设置好
  11. 吴海燕C语言真题,基于APP的智能婴儿床系统的设计与实现开题报告
  12. RAID的介绍与配置
  13. php amr格式转换,php 微信amr转mp3的方法
  14. webapp通过点击调用高德地图或百度地图导航
  15. 建成 5000 多间「梦想中心」后,他们决定将技术开源
  16. 【区块链与密码学】第9-4讲:基于PKI的群签名算法 I
  17. 论我国农村剩余劳动力的转移
  18. 机器学习算法工程师面试集锦(更新中)
  19. 【NetCore】.NetCore之下载文件
  20. python操作Excel表格小妙招:只需十行代码,可以将多张Excel合并为一张

热门文章

  1. easyui相关解释
  2. docker ubuntu镜像_docker使用教程
  3. 深入浅出换肤相关技术以及如何实现
  4. Android之四大组件概念讲解
  5. 高速缓存的数据结构:拉链散列表
  6. 设计模式之装饰模式学习笔记
  7. 【网络基础】为什么要对url进行encode呢?
  8. XAF 官方问题笔记
  9. Strategy策略模式
  10. c/c++左值和右值