如何使用额外的类路径运行 Storm 拓扑?
我的输出目录如下:
- myapp.jar( list 的类路径包含配置和库目录)
- lib - (目录)
- conf -(目录)
针对此问题有以下解决方案(这对我不利 - 我认为这不是最佳做法):
- 将这些文件打包到 jar 中。
- 将这些文件放入 storm 库中。
引用:https://groups.google.com/forum/#!topic/storm-user/YqNr82Y3Nac
最佳答案
没有(我知道的)(干净的)方法来扩展 Storm worker 的类路径。除了拓扑 jar 本身,类路径是在 JVM 启动时定义的 => 存在于每个节点上的所有拓扑都可见(因此被共享)的任何内容。此外,由于 storm 的集群性质,将特定于拓扑的文件放在 storm worker 的文件系统上会使您的部署部署起来有点棘手,因为您必须将这些特定于拓扑的文件复制/更新到每个节点。 Storm Deployer 旨在向我们隐藏这一点。
到目前为止,将依赖 jar 捆绑到 myapp.jar 对我来说效果很好,因为它确保我的依赖项始终在每个节点中部署和更新。在那里捆绑配置文件在技术上也是可行的,但这会使 myapp.jar 环境特定,这确实不是最佳实践。
我通常会在我进行部署的节点(而不是运行拓扑的节点)中复制任何补充配置文件,以 json 友好的格式将它们序列化,并在部署时将它们添加到 Storm 配置中。就像那样,只要我的拓扑在集群的某个节点上启动,我就可以从任何 prepare() 方法再次读取它们。同样,这种方法让我确保我的配置在集群的任何节点中都存在并且是最新的。
关于java - 使用附加类路径运行 Storm 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22118213/