Package org.springframework.yarn.config.annotation.builders

Source Code of org.springframework.yarn.config.annotation.builders.SpringYarnConfigBuilder

/*
* Copyright 2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.yarn.config.annotation.builders;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.springframework.data.hadoop.config.common.annotation.AbstractConfiguredAnnotationBuilder;
import org.springframework.data.hadoop.config.common.annotation.AnnotationBuilder;
import org.springframework.yarn.config.annotation.SpringYarnConfigs;
import org.springframework.yarn.fs.ResourceLocalizer;
import org.springframework.yarn.support.YarnUtils;

/**
* {@link AnnotationBuilder} for {@link SpringYarnConfigs}.
*
* @author Janne Valkealahti
*
*/
public class SpringYarnConfigBuilder
    extends AbstractConfiguredAnnotationBuilder<SpringYarnConfigs,SpringYarnConfigBuilder,SpringYarnConfigBuilder> {

  private final static Log log = LogFactory.getLog(SpringYarnConfigBuilder.class);

  /** Mostly used by allowing config to be injected i.e from tests */
  private Configuration yarnConfiguration;

  /**
   * Instantiates a new spring yarn config builder.
   */
  public SpringYarnConfigBuilder() {}

  @Override
  protected SpringYarnConfigs performBuild() throws Exception {
    SpringYarnConfigs config = new SpringYarnConfigs();

    // shared objects are created in SpringYarnConfigurerAdapter
    YarnConfigBuilder sharedObject = getSharedObject(YarnConfigBuilder.class);

    log.info("Existing yarnConfiguration: " + YarnUtils.toString(yarnConfiguration));

    Configuration buildConfiguration = getSharedObject(YarnConfigBuilder.class).build();

    // TODO: we should find better way to merge configs
    Configuration configuration = (yarnConfiguration == null)
        ? buildConfiguration
        : YarnUtils.merge(buildConfiguration, yarnConfiguration);

    if (log.isDebugEnabled()) {
      log.debug("YarnConfigBuilder shared: " + sharedObject);
      log.debug("Existing buildConfiguration: " + YarnUtils.toString(buildConfiguration));
    }
    log.info("Setting configuration for SpringYarnConfigs: " + YarnUtils.toString(configuration));


    config.setConfiguration(configuration);

    YarnResourceLocalizerBuilder yarnResourceLocalizerBuilder = getSharedObject(YarnResourceLocalizerBuilder.class);
    yarnResourceLocalizerBuilder.configuration(configuration);
    ResourceLocalizer localizer = yarnResourceLocalizerBuilder.build();
    config.setLocalizer(localizer);

    YarnEnvironmentBuilder yarnEnvironmentBuilder = getSharedObject(YarnEnvironmentBuilder.class);
    yarnEnvironmentBuilder.configuration(configuration);
    Map<String, Map<String, String>> envs = yarnEnvironmentBuilder.build();
    Map<String, String> env = envs.get(null);
    config.setEnvironment(env);

    YarnClientBuilder yarnClientBuilder = getSharedObject(YarnClientBuilder.class);
    if (yarnClientBuilder != null) {
      yarnClientBuilder.configuration(configuration);
      yarnClientBuilder.setResourceLocalizer(localizer);
      yarnClientBuilder.setEnvironment(env);
      config.setYarnClient(yarnClientBuilder.build());
    }

    YarnAppmasterBuilder yarnAppmasterBuilder = getSharedObject(YarnAppmasterBuilder.class);
    if (yarnAppmasterBuilder != null) {
      yarnAppmasterBuilder.configuration(configuration);
      yarnAppmasterBuilder.setResourceLocalizer(localizer);
      yarnAppmasterBuilder.setEnvironment(env);
      yarnAppmasterBuilder.setEnvironments(envs);
      config.setYarnAppmaster(yarnAppmasterBuilder.build());
    }

    YarnContainerBuilder yarnContainerBuilder = getSharedObject(YarnContainerBuilder.class);
    if (yarnContainerBuilder != null) {
      yarnContainerBuilder.configuration(configuration);
      config.setYarnContainer(yarnContainerBuilder.build());
    }

    return config;
  }

  /**
   * Sets the yarn configuration.
   *
   * @param yarnConfiguration the new yarn configuration
   */
  public void setYarnConfiguration(Configuration yarnConfiguration) {
    this.yarnConfiguration = yarnConfiguration;
  }

}
TOP

Related Classes of org.springframework.yarn.config.annotation.builders.SpringYarnConfigBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.