开发storm应用时可能须要用到自身的配置文件。storm.yaml只能提供给storm自身的配置系统使用。针对后台最普遍使用的ini配置文件,推荐使用ini4j。它是一个轻量的ini配置文件读取器、具备简单易懂的api。数据库
请在spout和bolt的prepare方法中读取配置文件。任何资源类的初始化都须要放到prepare方法中(好比数据库链接,和读取文件索引类等)。api
I 打包storm程序请不要把依赖打进去,依赖须要单独部署;测试
II 你须要一种有效的机制将程序的依赖包分发到全部的storm节点上(可上传到nimbus,经过rsync作目录同步);ui
III 你须要分发的依赖包集合=你的程序全部的依赖包集合 ? storm依赖包与你的依赖包的交集(不然topology会初始化失败)spa
IV 在全部supervisor节点上自定义配置文件的内容和路径须要彻底一致,路径不一致topology会初始化失败,内容不一致,程序的行为则是未定义的;debug
在通过一番辛勤劳动以后,你的程序编译成功了。可是,这不表明着它会按照你设定的行为去运行。如何debug成为了一个问题。设计
最基本也是最原始的思路就是log。在全部你认为可能出错的地方log(尤为是在prepare方法中,这里一般作的是资源类的初始化,若是它们初始化失败,topology则会初始化失败,这样能帮助你快速定位到错误缘由)。日志
Storm默认与log4j集成。你能够再$STORM_HOME/log4j/目录下找log4j的配置文件。经过调整它来控制log4j的行为。orm
不要急于在真实环境下部署你的程序。想要测试的话,仍是首先在Local mode模式下观察吧。若是在local mode下测试的结果是符合预期的,而在真实环境下出错,通常应是非代码的因素形成的。你须要检查节点的资源文件、自定义配置文件、依赖包等等。此外在local mode下,全部日志打印信息是直接输出到屏幕上的,这样方便你看的更加清楚。索引
下面介绍下storm日志的结构:
全部的日志文件都存放在$STORM_HOME/logs/路径下。
在nimbus节点上:nimbus.log记录的是nimbus启动过程当中的输出信息,包括启动时间和各个worker和task初始化过程当中打印信息等等。ui.log则记录的storm监控程序启动过程当中的输出信息,包括启动时间等等。
在supervisor节点上:supervisor.log记录的则是supervisor的相关启动信息。worker-XXX(一个supervisor节点一般部署了多个worker)记录的是消息传递、和任务执行过程当中的输出信息(也就是你代码中的日志打印部分)。storm的设计目标之一是让任务(task)部署对用户透明。这样形成了:当你须要观察一个task的日志输出信息时,你不知道到哪一个节点的哪一个日志文件去找这个信息。所以,仍是强烈建议在local mode下debug你的程序,而后在真实环境作好日志告警。