`

最近碰到的一些storm问题总结(不断更新)

阅读更多
目前使用的是storm.0.6.0这个版本. 至于其他版本有没有这问题, 不做研究.

★ yaml跟我们一般用的属性配置文件有所不同, 它的要求更严格一些, 因此在往conf/storm.yaml中添加配置的时候必须注意.

比如必须注意开始位置和冒号后面的空格, 否则配置不会生效. 关于yaml相关的资料, 网上有很多资料可以参考

如何检查配置是否生效, 可以使用命令: storm localconfvalue 配置关键字
但是这个命令只能在nimbus上生效, 在supervisor看到的还是默认值. 不知道为什么

★ 在部署storm节点的时候需要安装jzmq和0qm, 在安装这两个依赖包之后, 需要执行sudo -u root ldconfig. 否则会出现异常:
引用
2012-02-24 16:30:30 worker [ERROR] Error on initialization of server mk-worker
java.lang.UnsatisfiedLinkError: /usr/local/lib/libjzmq.so.0.0.0: libzmq.so.1: cannot open shared object file: No such file or
directory
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028)
        at org.zeromq.ZMQ.<clinit>(ZMQ.java:34)

这里有相关的讨论:
http://groups.google.com/group/storm-user/browse_thread/thread/656fb21d7166574d

★ 关闭nimbus相关进程:
kill `ps aux | egrep '(daemon\.nimbus)|(storm\.ui\.core)' | fgrep -v egrep | awk '{print $2}'`

★ 干掉supervisor上的所有storm进程:
kill `ps aux | fgrep storm | fgrep -v 'fgrep' | awk '{print $2}'`

★ 目前storm貌似不支持动态加载log4j配置文件, 每一个supervisor节点需要修改log4j/storm.log.properties文件来调整日志输出.

★ 在打包toplogy工程的时候, 如果采用assembly方式, 对于相关的依赖的配置一般要这样:
<dependencySets>
		<dependencySet>
			<outputDirectory>/</outputDirectory>
			<unpack>true</unpack>
			<excludes>
				<exclude>storm:storm</exclude>
			</excludes>
		</dependencySet>
	</dependencySets>


wiki上说可以用<scope>compile</scope>. 然后将storm依赖设置为runtime, 貌似不行. 另外就是所有的依赖包将全部解压, 然后将所有依赖的配置和class文件生成一个文件. 这个是通过<unpack>true</unpack>参数来控制的.

★ 有时候supervisor的conf/storm.yaml参数设置不合理, 会导致worker无法起来的现象, 比如我碰到的一个例子是. 定义了worker.childopts(给了一个不合理的jvm参数). 结果导致worker反复启动, 而均不成功, 这里的日志信息也不明确, 只是说无法start, 但是没有给更详细的上下文信息. 
引用
backtype.storm.daemon.worker mytoplogy-12-1330051497 fdd0effd
-0611-427a-8e23-84fe25047dbd 6701 d7f8354d-9ec0-4272-aa0d-9260f7b0042f
2012-02-24 14:24:27 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started
2012-02-24 14:24:28 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started
2012-02-24 14:24:28 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started
2012-02-24 14:24:29 supervisor [INFO]
a17ff23e-00b2-4e51-9001-74664413d2dd still hasn't started



★ 有问题直接上storm-user搜索相关帖子或者问Storm的作者Nathan Marz. 此人回答问题非常热心. 从提问人的id来看, 貌似中国人在上面问问题的非常多^_^

★在提交topology的时候有时可能出现如下异常:

引用
Exception in thread "main" java.lang.IllegalArgumentException: Nimbus host is not set
        at backtype.storm.utils.NimbusClient.<init>(NimbusClient.java:30)
        at backtype.storm.utils.NimbusClient.getConfiguredClient(NimbusClient.java:17)
        at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:78)
        at backtype.storm.StormSubmitter.submitJar(StormSubmitter.java:71)
        at backtype.storm.StormSubmitter.submitTopology(StormSubmitter.java:50)
        at com.taobao.kaleidoscope.storm.IcdbTopology.main(IcdbTopology.java:59)


但是启动nimbus是没有问题的, 这个主要以为内conf_dir路径设置不正确, 在bin/storm脚本中需要加上这样一句:
CONF_DIR = STORM_DIR + "/conf"


★Q:如何知道一个tuple的来源?
A:tuple.getSourceStramId()


Update:
刚看到淘宝技术沙龙上@爱的马斯特提到storm 0.6.x版本有内存泄露的坑, 而0.7.0这个版本已经解决了, 貌似目前我们这边还没有碰到,  在考虑是否要升级到最新版本?
分享到:
评论
14 楼 ddmonk 2015-02-22  
请问这个worker.childopts(给了一个不合理的jvm参数).配成多大合适.如何配置
13 楼 damy1987 2014-06-10  
请问这个worker.childopts(给了一个不合理的jvm参数).配成多大合适
12 楼 damy1987 2014-06-10  
你好,我也遇到这种问题
2014-06-10 14:47:28 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:29 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:29 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:30 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:30 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:31 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:31 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:32 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:32 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:33 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:33 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:34 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:34 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:35 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:36 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:36 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:37 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
2014-06-10 14:47:37 supervisor [INFO] 0e31d92a-76ab-4bf5-a161-ea397e9fdb5a still hasn't started
11 楼 zsw2zkl 2013-04-30  
ui.childopts -Xmx768m
ui.port 8080
worker.childopts -Xmx768m

        builder.setSpout("data", new TransferDataSpout(), 4);       
        builder.setBolt("transfer", new TransferDataBolt(), 3)
                .shuffleGrouping("data");
        builder.setBolt("write", new WriteDataBolt(), 4)
                .shuffleGrouping("transfer");
               
        Config conf = new Config();
        conf.setDebug(false);
       
        if(args!=null && args.length > 0) {
            conf.setNumWorkers(2);
一共两台虚拟机,请问这样的配置合理么 我的出现了supervisor [INFO] b46ddc47-e88a-4982-9958-ff1fb50abf91 still hasn't started 谢谢
10 楼 macrochen 2012-04-22  
badqiu 写道
... storm内存泄露的坑被我踩到了。

啥场景?
9 楼 badqiu 2012-04-20  
... storm内存泄露的坑被我踩到了。
8 楼 badqiu 2012-04-15  
想问你下一下。

storm worker进程timeout重启怎么办? 异常:

2012-04-15 22:02:05 supervisor [INFO] Shutting down and clearing state for id bffa83a9-c289-4bbb-a768-d3d3a6ac72e1. State: :timed-out, Heartbeat: #:backtype.storm.daemon.common.WorkerHeartbeat{:time-secs 1334498404, :storm-id "action_log-6-1334307292", :task-ids (3 35 19), :port 6701}
2012-04-15 22:02:05 supervisor [INFO] Shutting down 19553f3b-94f1-4892-aca0-c573677138b4:bffa83a9-c289-4bbb-a768-d3d3a6ac72e1
2012-04-15 22:02:05 supervisor [INFO] Shut down 19553f3b-94f1-4892-aca0-c573677138b4:bffa83a9-c289-4bbb-a768-d3d3a6ac72e1
2012-04-15 22:02:05 supervisor [INFO] Launching worker with assignment #:backtype.storm.daemon.supervisor.LocalAssignment{:storm-id "action_log-6-1334307292", :task-ids (3 35 19)} for this supervisor 19553f3b-94f1-4892-aca0-c573677138b4 on port 6701 with id d074bcb3-d5af-4887-9651-5fd0eae8ec01

这里有讲到解决办法,还没有尝试:

http://groups.google.com/group/storm-user/browse_thread/thread/37ca589d04877652/753ded4eaa4b9fab?lnk=gst&q=Shutting+down+and+clearing+state++for+id#753ded4eaa4b9fab
7 楼 macrochen 2012-03-17  
TonyLee0329 写道
macrochen 写道
TonyLee0329 写道
你好,请问怎么解决多个spout线程一起读一个数据源呢,重要的是每个线程间数据不能重复
不知道storm可不可以解决这样的问题

能否将数据源sharding?
然后启动多个spout去对应每一个sharding.

现在数据还没做分区,不知道您有没有具体的办法呢?数据是存在mysql中的


那就引入一个中间件, 比如先将数据取模, 放到多个队列, 然后一个spout对应一个队列进行处理
6 楼 TonyLee0329 2012-03-16  
macrochen 写道
TonyLee0329 写道
你好,请问怎么解决多个spout线程一起读一个数据源呢,重要的是每个线程间数据不能重复
不知道storm可不可以解决这样的问题

能否将数据源sharding?
然后启动多个spout去对应每一个sharding.

现在数据还没做分区,不知道您有没有具体的办法呢?数据是存在mysql中的
5 楼 macrochen 2012-03-15  
TonyLee0329 写道
你好,请问怎么解决多个spout线程一起读一个数据源呢,重要的是每个线程间数据不能重复
不知道storm可不可以解决这样的问题

能否将数据源sharding?
然后启动多个spout去对应每一个sharding.
4 楼 TonyLee0329 2012-03-14  
你好,请问怎么解决多个spout线程一起读一个数据源呢,重要的是每个线程间数据不能重复
不知道storm可不可以解决这样的问题
3 楼 qiuboboy 2012-03-01  
macrochen 写道
qiuboboy 写道
<scope>provided</scope> 可以解决。

因为我在pom.xml中是这样配置的:
		<dependency>
			<groupId>storm</groupId>
			<artifactId>storm</artifactId>
			<version>0.6.2</version>
			<!-- keep storm out of the jar-with-dependencies -->
			<scope>provided</scope>
		</dependency>


所以我使用了compile来做过滤

compile做过滤???没有明白你的意思。
2 楼 macrochen 2012-02-28  
qiuboboy 写道
<scope>provided</scope> 可以解决。

因为我在pom.xml中是这样配置的:
		<dependency>
			<groupId>storm</groupId>
			<artifactId>storm</artifactId>
			<version>0.6.2</version>
			<!-- keep storm out of the jar-with-dependencies -->
			<scope>provided</scope>
		</dependency>


所以我使用了compile来做过滤
1 楼 qiuboboy 2012-02-28  
<scope>provided</scope> 可以解决。

相关推荐

    storm 学习资源总结

    "storm 学习资源总结" Storm 是一个免费开源的分布式实时计算系统,利用 storm 可以很容易的做到可靠处理无线数据流。Storm 的架构特点包括编程简单、高性能、低延迟、分布式、可扩展、容错、消息不丢失等。 ...

    Storm学习总结

    Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。Storm是一个服务框架,支持热部署,即时上线或下线App。 你可以在Storm之上使用各种编程语言。默认支持Clojure、Java、Ruby和Python。要...

    storm讲义总结

    Storm是一个开源的分布式实时计算系统,可以简单、可靠的处理大量的数据流。 Storm有很多使用场景:如实时分析,在线机器学习,持续计算,分布式RPC,ETL等等。 Storm支持水平扩展,具有高容错性,保证每个消息...

    storm入门.pdf

    除了书籍《Getting Started with Storm》之外,还有一些社区和网站提供了Storm的使用文档和教程,这些都是学习Storm技术的宝贵资源。在实践中,开发者应重视对Storm各种术语的准确理解和运用,例如spout、bolt、...

    storm-ui:Apache Storm 的用户界面

    主分支: ##包裹包战 mvn clean package -DskipTests=true -Dwarcp ./target/storm-ui.war $TOMCAT_HOME/webapps/包装罐 mvn clean package -DskipTests=truecp ./target/storm-ui-*.jar $STORM_HOME/external/...

    解决丢失Storm.dll的问题

    标题中的“解决丢失Storm.dll的问题”指的是在操作系统中遇到一个常见的错误,即系统提示Storm.dll文件丢失或损坏。这个问题通常发生在尝试运行某些依赖于这个动态链接库(DLL)的软件时。Storm.dll是某些应用程序...

    细细品味Storm_Storm简介及安装

    ### Storm简介及安装知识点梳理 #### 一、Storm简介 **Storm** 是一款由BackType公司开发的分布式实时计算系统,后被Twitter收购并开源。它主要用于处理大规模的数据流,能够简单、高效、可靠地处理实时数据。...

    StormStorm集成Kafka 从Kafka中读取数据

    4. **监控和调试**:部署后,持续监控系统的运行状况,及时发现和解决问题。 综上所述,Storm和Kafka的集成提供了一种强大且灵活的方式,用于处理大规模实时数据流。通过理解两者如何协同工作,我们可以构建出高效...

    Storm入门到精通

    Storm入门到精通 Storm 是一个分布式实时计算系统,主要用于处理大规模数据流。它的核心组件包括Spout和Bolt,分别负责数据的输入和处理。下面是对 Storm 的一个概述,从基础知识到实践应用。 Storm 组件 Storm ...

    storm的jar包

    在Storm中,数据流被抽象为持续不断的Tuple(元组)序列,这些Tuple在网络中的worker节点间进行分布式处理,保证每个消息至少被处理一次(At-Least-Once Processing Guarantees)。这使得Storm非常适合于实时数据...

    Storm入门教程 之Storm原理和概念详解

    Storm入门教程 之Storm原理和概念详解,出自Storm流计算从入门到精通之技术篇,Storm入门视频教程用到技术:Storm集群、Zookeeper集群等,涉及项目:网站PV、UV案例实战、其他案例; Storm视频教程亮点: 1、Storm...

    storm开发设计规范

    Storm开发设计规范是针对Apache Storm这一分布式实时计算系统的实践指南,旨在提高开发效率,保证系统的稳定性和可维护性。...在实际开发中,应不断总结和改进,以适应不断变化的业务需求和技术环境。

    Storm 源码分析

    这对于开发人员来说非常重要,不仅有助于更高效地利用Storm解决实际问题,还能为进一步的研究和优化提供基础。随着大数据技术的发展,Storm作为一种优秀的实时计算框架,将在更多领域发挥重要作用。

    webservice测试工具storm

    Storm提供了详细的测试日志,便于问题排查。同时,测试结果可以导出为报告,供团队成员共享和分析。 8. 集成其他工具: 作为一款强大的测试工具,Storm可能与其他开发工具(如IDEs、版本控制系统)或持续集成...

    storm开发jar包以及storm例子源码

    7. **容错机制**:Storm通过检查点和故障恢复来保证容错性,即使节点失败,也能从最近的检查点恢复。 8. **Zookeeper**:作为协调服务,存储元数据和状态信息,确保集群的一致性和高可用性。 9. **nimbus**和**...

    Storm的WordCount实例

    总结,通过这个“Storm的WordCount实例”,我们可以了解到如何使用Apache Storm来处理实时数据流,并实现一个简单但功能强大的计数系统。这不仅展示了Storm的核心概念,也为我们提供了实践分布式实时计算的一个起点...

    storm与spark简介

    - **前身 Shark**: Shark 是 Spark SQL 的前身,它试图解决 Hive 的一些限制,比如执行效率低下等问题。然而,由于 Shark 对 Hive 的高度依赖,最终导致 Spark 团队决定开发一个全新的 SQL 引擎。 - **功能**: ...

    从零开始学Storm.pdf

    随着大数据和云计算技术的不断发展,Storm等实时处理技术将会得到更加广泛的应用。而对于大数据处理、实时流数据处理的开发者或爱好者,掌握Storm技术将是必要的技能之一。无论是学术界的研究人员还是工业界的工程师...

    maven对storm打包

    "maven对storm打包" Maven是Java项目管理和构建工具,Storm是分布式实时计算系统。Maven可以对Storm项目进行打包,生成可执行的Jar包。下面是使用Maven对Storm项目进行打包的步骤和知识点: 一、创建Maven项目 ...

Global site tag (gtag.js) - Google Analytics