You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@storm.apache.org by John Fang <xi...@alibaba-inc.com> on 2015/11/16 06:03:41 UTC

答复: load configurations to topology

As we know, the priority order of the configuration is :
CommandLine > user stormconf > storm.yaml > defaults.yaml

-----邮件原件-----
发件人: jinhong lu [mailto:lujinhong2@gmail.com] 
发送时间: 2015年11月16日 12:57
收件人: dev@storm.apache.org
主题: load configurations to topology


Hi, I do not understand the order of the configuration loading in
submitToplogy:

public static void submitTopologyAs(String name, Map stormConf,
StormTopology topology, SubmitOptions opts, ProgressListener
progressListener, String asUser)
            throws AlreadyAliveException, InvalidTopologyException,
AuthorizationException {
        if(!Utils.isValidConf(stormConf)) {
            throw new IllegalArgumentException("Storm conf is not valid.
Must be json-serializable");
        }
        stormConf = new HashMap(stormConf);
        stormConf.putAll(Utils.readCommandLineOpts());
        Map conf = Utils.readStormConfig();
        conf.putAll(stormConf);
 
stormConf.putAll(prepareZookeeperAuthentication(conf));readStormConfig();
        conf.putAll(stormConf);

It seems stormConf load the configuration from user stormConf, then
commandLine, after that, defaults.yaml and storm.yaml.
Isn’t the yaml files will overwrite the configuration in user stormConf and
commandLine?

Thanks.


Re: 答复: load configurations to topology

Posted by Bobby Evans <ev...@yahoo-inc.com.INVALID>.
first of all the code looks like it was copied and pasted oddly
https://github.com/apache/storm/blob/master/storm-core/src/jvm/backtype/storm/StormSubmitter.java#L188-L199
```
public static void submitTopologyAs(String name, Map stormConf, StormTopology topology, SubmitOptions opts, ProgressListener progressListener, String asUser)
        throws AlreadyAliveException, InvalidTopologyException, AuthorizationException, IllegalArgumentException {
    if(!Utils.isValidConf(stormConf)) {
        throw new IllegalArgumentException("Storm conf is not valid. Must be json-serializable");
    }
    stormConf = new HashMap(stormConf);
    stormConf.putAll(Utils.readCommandLineOpts());
    Map conf = Utils.readStormConfig();//storm.yaml + defaults.yaml
    conf.putAll(stormConf);
    stormConf.putAll(prepareZookeeperAuthentication(conf));

    validateConfs(conf, topology);```

There are two configs here.  stormConf and conf.  conf is a full configuration object with CommandLine + user-conf + storm.yaml + defaults.yaml.  This is used for establishing the connection to nimbus.  stormConf is just (ZK Auth Token) + CommandLine + user-conf.  It does not include storm.yaml or defaults.yaml because the assumption is that they are the same everywhere in the cluster, or if they are not, the one configured on nimbus/supervisors should override the values configured on whatever gateway you are running on.
- Bobby 


     On Sunday, November 15, 2015 11:04 PM, John Fang <xi...@alibaba-inc.com> wrote:
   

 As we know, the priority order of the configuration is :
CommandLine > user stormconf > storm.yaml > defaults.yaml

-----邮件原件-----
发件人: jinhong lu [mailto:lujinhong2@gmail.com] 
发送时间: 2015年11月16日 12:57
收件人: dev@storm.apache.org
主题: load configurations to topology


Hi, I do not understand the order of the configuration loading in
submitToplogy:

public static void submitTopologyAs(String name, Map stormConf,
StormTopology topology, SubmitOptions opts, ProgressListener
progressListener, String asUser)
            throws AlreadyAliveException, InvalidTopologyException,
AuthorizationException {
        if(!Utils.isValidConf(stormConf)) {
            throw new IllegalArgumentException("Storm conf is not valid.
Must be json-serializable");
        }
        stormConf = new HashMap(stormConf);
        stormConf.putAll(Utils.readCommandLineOpts());
        Map conf = Utils.readStormConfig();
        conf.putAll(stormConf);
 
stormConf.putAll(prepareZookeeperAuthentication(conf));readStormConfig();
        conf.putAll(stormConf);

It seems stormConf load the configuration from user stormConf, then
commandLine, after that, defaults.yaml and storm.yaml.
Isn’t the yaml files will overwrite the configuration in user stormConf and
commandLine?

Thanks.