6

我正在为风暴(storm-project.net)开发拓扑。我有 2 个远程集群:登台和生产。

我在客户端(我写代码的笔记本电脑)上有两个storm.yaml 文件,它们指向不同的远程集群production.storm.yaml 和staging.storm.yaml。

不幸的是,我知道在它们之间切换的唯一方法是在通过“storm jar”命令远程部署拓扑之前将符号链接更改为 ~/.storm/storm.yaml。这很容易出错,并且会在项目源代码树中创建对客户端文件树中相当任意位置的某些内容的依赖关系。

一定有更好的方法。“storm list --config staging.storm.yaml”会给我关于暂存集群的信息,但我找不到一个可比较的标志来设置带有“storm jar”的conf文件。或者我可以设置一个像“STORM_HOME”这样的环境变量?

4

2 回答 2

9

您不需要维护单独的 .yaml 文件。nimbus.host您可以使用-c命令行选项覆盖配置:

storm jar -c nimbus.host=nimbus.example.com my-storm-jar.jar com.example.MyTopology
于 2013-11-11T19:59:03.827 回答
2

我也有同样的问题。我所做的是编写一个 Makefile 来部署我的 Storm 拓扑。不同的目标会创建不同的符号链接。就像是:

export STORM_PATH=/opt/storm
export PROJECT_PATH=/project/path

compile:
    cd $(PROJECT_PATH)
    mvn compile

package:
    cd $(PROJECT_PATH)
    mvn package

deploy-staging: package
    ln -s $(STORM_PATH)/conf/staging.storm.yaml $(STORM_PATH)/conf/storm.yaml
    storm jar $(PROJECT_PATH)/target/project.jar my.project.Topology myTopology

deploy-production: package
    ln -s $(STORM_PATH)/conf/production.storm.yaml $(STORM_PATH)/conf/storm.yaml
    storm jar $(PROJECT_PATH)/target/project.jar my.project.Topology myTopology

因此,要将拓扑部署到生产环境中,您可以:

make deploy-production

分期也是如此。您将看到拓扑也已打包(如果您使用 Maven)。您还可以将不同的 yaml 文件作为存储库的一部分,并将符号链接指向您的存储库。或者,您可以在部署机器上拥有 yaml 文件,并且它们对于不同的部署可能不同。总是同名。

于 2013-10-10T06:44:11.583 回答