`
wbj0110
  • 浏览: 1598394 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Storm应用系列之——集群部署

阅读更多

先简单的把本文要做的事罗列一下:

1. 安装zookeeper集群

2. 安装Storm集群,包括一个Storm的nimbus,在nimbus上启用Storm UI 和两个supervisor

3. 跑一个小例子证实安装完成

 

注:

本例中,nimbus机器IP为10.1.110.24, 两个supervisor分别为10.1.110.21和10.1.110.22。后文不再用通配符写IP。请自行更换IP。

 


准备工作

1. 下载zookeeper3.4.5(如果你比较懒,猛击这里
2. 下载Storm当前最新0.9.0.1 (猛击这里
3. 安装被配置好JDK(最低版本1.6)
 
注:
Storm0.9之前的版本,底层通讯用的是ZeroMQ,所以还得去装一个老版本的ZeroMQ(2.1.7,不能装太新的)。
由于ZeroMQ的各种问题,新版支持用Netty替代ZeroMQ。性能上据说能提高两倍。但是默认仍是ZeroMQ,Netty方式需要配置来启用。
github上面安装文档并没有更新,所以,如果要装老版的,可以参考这里:

 


安装ZK

1. 登陆到10.1.110.21并解压tar包(注意给执行权限)
2. 建立zookeeper的data目录,本文以 /var/tmp/zkdata 为例
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. mkdir -p /var/tmp/zkdata  
3. 建立zk集群的myid文件 (单机版可以跳过该步)
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. cd /var/tmp/zkdata  
  2. echo 1 > myid  
4. 拷贝zookeeper的conf/zoo_sample.cfg并重命名为zoo.cfg,修改如下:
 
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. # The number of milliseconds of each tick  
  2. tickTime=2000  
  3. # The number of ticks that the initial   
  4. # synchronization phase can take  
  5. initLimit=10  
  6. # The number of ticks that can pass between   
  7. # sending a request and getting an acknowledgement  
  8. syncLimit=5  
  9. # the directory where the snapshot is stored.  
  10. # do not use /tmp for storage, /tmp here is just   
  11. # example sakes.  
  12. dataDir=/var/tmp/zkdata  
  13. # the port at which the clients will connect  
  14. clientPort=2181  
  15. server.1=10.1.110.21:2888:3888  
  16. server.2=10.1.110.22:2888:3888  
  17. server.3=10.1.110.24:2888:3888  
  18. ## Be sure to read the maintenance section of the   
  19. # administrator guide before turning on autopurge.  
  20. ## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html  
  21. #sc_maintenance  
  22. ## The number of snapshots to retain in dataDir  
  23. #autopurge.snapRetainCount=3  
  24. # Purge task interval in hours  
  25. # Set to "0" to disable auto purge feature  
  26. #autopurge.purgeInterval=1  
 
dataDir是配置zk的数据目录的
server.A=B:C:D是集群zk使用的。如果你只想用单个zk,可以不配置。
A - 是一个数字,表示这是第几号服务器。与/var/tmp/zkdata下的myid文件内容一致
B - 是该服务器的IP地址
C - 表示该服务器与集群中的Leader服务器交换信息的端口
D - 表示如果万一集群中的Leader服务器挂了,需要各服务器重新选举时所用的通讯端口
 
5.  (Optional)将zk的bin目录路径加入环境变量
修改/etc/profile文件,在尾部添加如下:
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. #zookeeper  
  2. export ZOOKEEPER=/opt/zookeeper-3.4.5  
  3. PATH=$PATH:$ZOOKEEPER/bin  
使其生效

6. 启动zk
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. cd /opt/zookeeper-3.4.5/bin  
  2. ./zkServer.sh start  

在剩下两台机器重复以上步骤,注意myid要对应

 


安装Storm

1. 解压tar包并赋予执行权限
2. 将Storm的bin目录加入系统路径
修改/etc/profile文件,在尾部加入如下:
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. PATH=$PATH:/opt/storm-0.9.0.1/bin  
使其生效
 
3. 创建一个Storm的本地数据目录
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. mkdir -p /var/tmp/storm/workdir/  

以上步骤在Storm的集群上的其他机器上重复执行,然后进行配置:
a. 配置nimbus
修改storm的conf/storm.yaml文件如下:
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ########### These MUST be filled in for a storm configuration  
  2.  storm.zookeeper.servers:  
  3.      - "10.1.110.21"  
  4.      - "10.1.110.22"  
  5.      - "10.1.110.24"  
  6.   
  7.   
  8. #  
  9. # nimbus.host: "nimbus"  
  10. #  
  11. #  
  12. # ##### These may optionally be filled in:  
  13. #  
  14. ## List of custom serializations  
  15. # topology.kryo.register:  
  16. #     - org.mycompany.MyType  
  17. #     - org.mycompany.MyType2: org.mycompany.MyType2Serializer  
  18. #  
  19. ## List of custom kryo decorators  
  20. # topology.kryo.decorators:  
  21. #     - org.mycompany.MyDecorator  
  22. #  
  23. ## Locations of the drpc servers  
  24. # drpc.servers:  
  25. #     - "server1"  
  26. #     - "server2"  
  27.  storm.local.dir: "/var/tmp/storm/workdir"  
  28.  storm.messaging.transport: "backtype.storm.messaging.netty.Context"  
  29.  storm.messaging.netty.server_worker_threads: 1  
  30.  storm.messaging.netty.client_worker_threads: 1  
  31.  storm.messaging.netty.buffer_size: 5242880  
  32.  storm.messaging.netty.max_retries: 100  
  33.  storm.messaging.netty.max_wait_ms: 1000  
  34.  storm.messaging.netty.min_wait_ms: 100  
 
注意:
Storm的配置文件格式有点让人郁闷。在每个配置项前面必须留有空格,否则会无法识别。
storm.messaging.* 部分是Netty的配置。如果没有该部分。那么Storm默认还是使用ZeroMQ。
 
b. 配置supervisor
修改storm的conf/storm.yaml文件如下:
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ########### These MUST be filled in for a storm configuration  
  2.  storm.zookeeper.servers:  
  3.      - "10.1.110.21"  
  4.      - "10.1.110.22"  
  5.      - "10.1.110.24"  
  6.    
  7.  nimbus.host: "10.1.110.24"  
  8. #   
  9. #   
  10. # ##### These may optionally be filled in:  
  11. #      
  12. ## List of custom serializations  
  13. # topology.kryo.register:  
  14. #     - org.mycompany.MyType  
  15. #     - org.mycompany.MyType2: org.mycompany.MyType2Serializer  
  16. #  
  17. ## List of custom kryo decorators  
  18. # topology.kryo.decorators:  
  19. #     - org.mycompany.MyDecorator  
  20. #  
  21. ## Locations of the drpc servers  
  22. # drpc.servers:  
  23. #     - "server1"  
  24. #     - "server2"  
  25.  supervisor.slots.ports:  
  26.      - 6700  
  27.      - 6701  
  28.      - 6702  
  29.  storm.local.dir: "/var/tmp/storm/workdir"  
  30.  storm.messaging.transport: "backtype.storm.messaging.netty.Context"  
  31.  storm.messaging.netty.server_worker_threads: 1  
  32.  storm.messaging.netty.client_worker_threads: 1  
  33.  storm.messaging.netty.buffer_size: 5242880  
  34.  storm.messaging.netty.max_retries: 100  
  35.  storm.messaging.netty.max_wait_ms: 1000  
  36.  storm.messaging.netty.min_wait_ms: 100  
注意:
i.  nimbus.host是nimbus的IP或hostname
ii. supervisor.slots.ports 是配置slot的ip地址。配了几个地址,就有几个slot,即几个worker。如果尝试提交的topology所声明的worker数超过当前可用的slot,该topology提交会失败。
iii. storm.messaging 部分是Netty的配置,就不再重复叙述了。
 
仍然要注意格式问题。
你可以在这里找到所有的配置项:https://github.com/nathanmarz/storm/blob/master/conf/defaults.yaml

 


启动集群

1. 启动nimbus
在nimbus机器的Storm的bin目录下执行
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ./storm nimbus  
 
2. (Optional) 在nimbus机器上启动 Storm UI  (Storm提供的一个简单的查看cluster信息的网页)
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ./storm ui  

3. 启动supervisor
在supervisor机器的Storm的bin目录下执行
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ./storm supervisor  
 
4. 检查
打开Storm UI 页面。本例是起在10.1.110.24上,所以打开: http://10.1.110.24:8080  
默认是启在8080端口上,如果你想改成其他的,如8089,直接修改nimbus的storm.yaml文件,添加
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ui.port=8089  

部署程序

1. 从https://github.com/nathanmarz/storm-starter去clone或者下载一个例子包
 
2. 将包内的m2-pom.xml重命名为pom.xml,并修改twitter4j的版本(人在中国伤不起啊.......)
  1. <dependency>  
  2.     <groupId>org.twitter4j</groupId>  
  3.     <artifactId>twitter4j-core</artifactId>  
  4.     <!--<version>2.2.6-SNAPSHOT</version>-->  
  5.     <version>[2.2,)</version>  
  6. </dependency>  
  7. <dependency>  
  8.     <groupId>org.twitter4j</groupId>  
  9.     <artifactId>twitter4j-stream</artifactId>  
  10.     <!--<version>2.2.6-SNAPSHOT</version>-->  
  11.     <version>[2.2,)</version>  
  12. </dependency>  
  13.       
用Maven编译
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. mvn clean install -Dmaven.test.skip  

3. 将storm-starter/target目录下的storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar拷到nimbus服务器上去
 
4. 部署topology
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ./storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar storm.starter.WordCountTopology test  
 
5. 查看结果
两种方式,
a. 查看StormUI 
 
b. storm的bin目录下运行
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. ./storm list  
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. 769  [main] INFO  backtype.storm.thrift - Connecting to Nimbus at localhost:6627  
  2. Topology_name        Status     Num_tasks  Num_workers  Uptime_secs  
  3. -------------------------------------------------------------------  
  4. test                 ACTIVE     28         3            20          


6. 关闭topology
a. StormUI上面点选要关闭的topology,如test,然后在新页面的Topology actions中选kill
b. 运行./storm kill test


常见问题

Storm的log文件默认存放在其logs目录下,其中我们一般要关心的是
nimbus下的nimbus.log和ui.log
supervisor下的
superviosr.log - supervisor启动、启动topology task、关闭等信息
worker-xxxx.log - 该worker上运行的task的具体log
 
1. worker-xxxx.log 显示2013-09-02 15:31:53 worker [WARN] Received invalid messages for unknown tasks. Dropping... 
该问题是host配置问题,解析host出问题
解决办法:
a. 
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. hostname <new-name>  
b. 
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. vi /etc/sysconfig/network  
设置HOSTNAME=<new-name>
 
c. 
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. vi /etc/hosts  
将ipv4地址解析成<new-name>,并添加其他节点信息,如:
[plain] view plaincopyprint?在CODE上查看代码片派生到我的代码片
 
  1. 10.1.110.24 nimbus  
  2. 10.1.110.22 supervisor-22  
  3. 10.1.110.21 supervisor-21  
 
注意:
如果是ipv6,需要更改Storm的配置文件支持ipv6.默认是ipv4。
 
2. StormUI上面nimbus和supervisor都显示127.0.0.1
解决办法同1
 
3. 启动时,supervisor.log不停刷新 5fefa024-50b2-4c5c-b8e2-c2360501cb03 still hasn't started
出现几条是正常的,work 启动需要时间。但是如果一直刷新,就有问题。可以到supervisor.log中把它上面紧挨着的java 启动命令考下来,单独执行。看看是哪里有问题。
 
4. topologykill后,kill supervisor或nimbus,立刻启动,有时会自动shutdown
supervisor和nimbus启动、关闭后,zookeeper上信息会有同步。每次启动,会尝试恢复、停止上一次的task。对于supervisor,可以等到StormUI上面topology完全停止后,再重启,可避免该问题。
 
5. 如何remote debug?
在storm的conf/storm.yaml里面加入worker.childopts: "-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"。
注:
这个参数是给启动的worker用的,一个worker对应一个JVM进程。所以如果有两个worker在该节点上启动,必定有一个fail。因为端口冲突!
在shutdown一个topology时,该worker的进程并不会自动关闭,所以端口已然被占着。这个时候再启动时,有可能会分配一个新进程,这时又会去绑该端口,也会fail!
所以应尽量避免remote debug,最后在本地模式调试好后才上传至cluster。
在每次debug后,要kill掉该supervisor才能避免下次部署失败。

原文

http://blog.csdn.net/xeseo/article/details/17678829

 

分享到:
评论

相关推荐

    flume及kafka及storm搭建.rar

    在大数据处理领域,Flume、Kafka和Storm是三个至关重要的工具,它们分别在数据采集、数据分发和实时处理方面发挥着核心作用。...不过,实际部署时还需要考虑集群的扩展性、容错性和性能优化,确保系统的稳定性和效率。

    storm 从零到精通 非常实用的文件

    - 主控节点 Nimbus 和工作节点 Supervisor 是 Storm 集群的关键组成部分,它们分别负责任务调度和工作分配。 - **1.3.4 Storm的技术支持网站** - Apache Storm 的官方网站提供了丰富的文档和技术支持,包括最新...

    storm集成kafka插demo.zip

    9. **测试与部署**:在本地环境中编译和测试这个项目后,可以通过提交拓扑到Storm集群来部署和运行。 通过学习这个"storm集成kafka插demo.zip",开发者可以了解到如何在实际项目中构建一个实时数据处理系统,将实时...

    storm提交topology的过程共1页.pdf.zip

    【标题】"storm提交topology的过程"涉及到的是Apache Storm这一分布式实时计算系统中的核心操作——部署和运行流处理任务,即topology。Apache Storm被广泛应用于实时数据处理、在线机器学习、持续计算以及大规模...

    storm资源分享

    在实际操作中,你将学习到如何使用Clojure或Java API来编写Storm应用程序,并通过Zookeeper进行集群协调。 其次,"storm原理介绍.doc"文件则深入探讨了Storm的工作原理。它可能涵盖了Storm的容错机制,如ackers如何...

    Storm资源库

    4. **jzmq-master.zip**: jzmq是Java对ZeroMQ库的绑定,使得Java开发者可以方便地在Storm应用中使用ZeroMQ的功能。它提供了与ZeroMQ C API兼容的接口,使得Java应用程序能够进行高效的异步消息传递,这对于构建Storm...

    从零开始学习storm最新版

    在Storm的实战应用章节,作者会分享一些典型的应用场景,如实时日志分析、实时广告投放、社交网络分析等,帮助读者了解Storm在不同领域的实际应用价值。同时,书中也会介绍如何将Storm与其他大数据技术(如Hadoop、...

    Storm流计算项目:1号店电商实时数据分析系统-08.storm-kafka 详解和实战案例.pptx

    《Storm流计算项目:1号店电商实时数据分析系统——storm-kafka详解与实战案例》 在大数据处理领域,实时计算已经成为不可或缺的一部分,特别是在电商行业中,实时数据分析能够帮助企业快速响应市场变化,提高运营...

    董西成:Hadoop YARN程序设计与应用案例

    总结来说,董西成在“Hadoop英雄会——暨Hadoop 10周年生日大趴”中详细介绍了Hadoop YARN的架构、API、通信协议以及如何在YARN上设计和运行应用程序。通过其演讲内容,我们可以看到YARN在构建现代大数据处理和分析...

    StormFN-Launcher:用于Storm的启动器

    而为了更好地管理和运行Storm应用程序,开发出了专门的启动器——StormFN-Launcher。本文将详细解析这一工具,以及其与C#语言的结合,帮助开发者更高效地部署和管理Storm任务。 首先,StormFN-Launcher是为StormFN...

    分布式计算——原理、算法和系统

    8. **Kubernetes**:Google开源的容器编排系统,可管理和部署分布式应用程序。 分布式计算在云计算、大数据分析、物联网(IoT)等领域有着广泛应用,随着技术的发展,其重要性和影响力将持续增长。了解并掌握分布式...

    storm-example-wc:使用storm的简单字数统计示例

    "风暴示例-WC 使用storm的简单字数统计示例" 表明这是一个教学或实践项目,通过 Apache Storm 来执行一个基础的文本分析任务——统计单词出现的次数。这通常涉及到读取文本输入,分割成单词,然后计算每个单词的频率...

    大数据课程体系.docx

    - **Storm集群的安装的Linux环境准备**:指导如何在Linux环境中搭建Storm集群。 - **Zookeeper集群搭建**:说明如何构建Zookeeper集群以支持Storm的运行。 - **Storm集群搭建**:提供详细的步骤来搭建Storm集群。 - ...

    基于Java的Yahoo的分布式流计算平台 S4.zip

    5. **编程模型**:S4提供了一种灵活的编程模型,允许开发者定义两种类型的应用组件——“处理器”(Processors)和“边”(Edges)。处理器负责处理数据,而边则定义了处理器之间的数据流。 ### 三、S4与Java的关系...

    PyPI 官网下载 | fink-filters-0.2.13.tar.gz

    《PyPI官网下载 | fink-filters-0.2.13.tar.gz——探索Python库在分布式系统中的应用》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python开发者提供了海量的第三方库,方便大家在开发...

    Streaming Architecture - New Designs Using Apache Kafka and MapR Streams

    - **分布式**:Kafka 支持多服务器集群部署,提供了高可用性和容错能力。 - **持久化**:消息被持久化到磁盘,确保数据的安全性。 - **高吞吐量**:即使在非常大的数据集上也能保持高性能。 - **灵活**:支持...

    31-石望华-POBC_2015_IEEE-ICDE1

    分布式流处理引擎如S4、Storm和Samza等近年来因其在商用硬件集群上处理海量数据的高效率和低延迟而备受关注。这些系统中的流处理应用通常表现为有向无环图(DAG),其中的顶点代表操作符(processing elements,PEs...

Global site tag (gtag.js) - Google Analytics