【问题标题】:Deploying topologies to different remote clusters?将拓扑部署到不同的远程集群?
【发布时间】:2013-10-04 18:47:19
【问题描述】:

我正在为 Storm (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”这样的环境变量?

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

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

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

    【讨论】:

    • 是否可以通过外部属性文件传递 nimbus.host?
    【解决方案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 文件,并且它们对于不同的部署可能不同。始终使用相同的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多