将拓扑部署到不同的远程集群?

时间:2013-10-04 18:47:19

标签: apache-storm

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

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

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

必须有更好的方法。 “storm list --config staging.storm.yaml”会给我关于登台集群的信息,但我找不到一个类似的标志来设置conf文件与“storm jar”。或者也许我可以设置一个像“STORM_HOME”这样的环境变量?

2 个答案:

答案 0 :(得分:9)

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

storm jar -c nimbus.host=nimbus.example.com my-storm-jar.jar com.example.MyTopology

答案 1 :(得分: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文件,对于不同的部署,它们可以不同。始终使用相同的名称。