Package org.springframework.yarn.config.annotation

Source Code of org.springframework.yarn.config.annotation.SpringYarnConfigurerAdapter

/*
* 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;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.data.hadoop.config.common.annotation.AnnotationBuilder;
import org.springframework.data.hadoop.config.common.annotation.ObjectPostProcessor;
import org.springframework.yarn.config.annotation.EnableYarn.Enable;
import org.springframework.yarn.config.annotation.builders.SpringYarnConfigBuilder;
import org.springframework.yarn.config.annotation.builders.YarnAppmasterBuilder;
import org.springframework.yarn.config.annotation.builders.YarnAppmasterConfigurer;
import org.springframework.yarn.config.annotation.builders.YarnClientBuilder;
import org.springframework.yarn.config.annotation.builders.YarnClientConfigurer;
import org.springframework.yarn.config.annotation.builders.YarnConfigBuilder;
import org.springframework.yarn.config.annotation.builders.YarnConfigConfigurer;
import org.springframework.yarn.config.annotation.builders.YarnContainerBuilder;
import org.springframework.yarn.config.annotation.builders.YarnContainerConfigurer;
import org.springframework.yarn.config.annotation.builders.YarnEnvironmentBuilder;
import org.springframework.yarn.config.annotation.builders.YarnEnvironmentConfigurer;
import org.springframework.yarn.config.annotation.builders.YarnResourceLocalizerBuilder;
import org.springframework.yarn.config.annotation.builders.YarnResourceLocalizerConfigurer;

/**
* Provides a convenient base class for creating a {@link SpringYarnConfigurer}
* instance. The implementation allows customization by overriding methods.
*
* @author Janne Valkealahti
* @see EnableYarn
*
*/
public class SpringYarnConfigurerAdapter implements SpringYarnConfigurer {

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

  private YarnConfigBuilder yarnConfigBuilder;
  private YarnResourceLocalizerBuilder yarnResourceLocalizerBuilder;
  private YarnEnvironmentBuilder yarnEnvironmentBuilder;
  private YarnClientBuilder yarnClientBuilder;
  private YarnAppmasterBuilder yarnAppmasterBuilder;
  private YarnContainerBuilder yarnContainerBuilder;

  private ObjectPostProcessor<Object> objectPostProcessor = new ObjectPostProcessor<Object>() {
    @Override
    public <T> T postProcess(T object) {
      throw new IllegalStateException(ObjectPostProcessor.class.getName()
          + " is a required bean. Ensure you have used @EnableYarn and @Configuration");
    }
  };

  @Autowired(required=false)
  public void setObjectPostProcessor(ObjectPostProcessor<Object> objectPostProcessor) {
    this.objectPostProcessor = objectPostProcessor;
  }

  @Override
  public final void init(SpringYarnConfigBuilder builder) throws Exception {
    builder.setSharedObject(YarnConfigBuilder.class, getConfigBuilder());
    builder.setSharedObject(YarnResourceLocalizerBuilder.class, getLocalizerBuilder());
    builder.setSharedObject(YarnEnvironmentBuilder.class, getEnvironmentBuilder());

    EnableYarn annotation = AnnotationUtils.findAnnotation(getClass(), EnableYarn.class);
    Enable enable = annotation.enable();

    if (log.isDebugEnabled()) {
      log.debug("Enabling builder for " + enable);
    }

    if (enable == Enable.CLIENT) {
      builder.setSharedObject(YarnClientBuilder.class, getClientBuilder());
    } else if (enable == Enable.APPMASTER) {
      builder.setSharedObject(YarnAppmasterBuilder.class, getAppmasterBuilder());
    } else if (enable == Enable.CONTAINER) {
      builder.setSharedObject(YarnContainerBuilder.class, getContainerBuilder());
    }
  }

  @Override
  public void configure(SpringYarnConfigBuilder builder) throws Exception {
  }

  @Override
  public void configure(YarnConfigConfigurer config) throws Exception {
  }

  @Override
  public void configure(YarnResourceLocalizerConfigurer localizer) throws Exception {
  }

  @Override
  public void configure(YarnEnvironmentConfigurer environment) throws Exception {
  }

  @Override
  public void configure(YarnClientConfigurer client) throws Exception {
  }

  @Override
  public void configure(YarnAppmasterConfigurer master) throws Exception {
  }

  @Override
  public void configure(YarnContainerConfigurer container) throws Exception {
  }

  /**
   * Gets the Yarn config builder.
   *
   * @return the Yarn config builder
   * @throws Exception if error occurred
   */
  protected final YarnConfigBuilder getConfigBuilder() throws Exception {
    if (yarnConfigBuilder != null) {
      return yarnConfigBuilder;
    }
    yarnConfigBuilder = new YarnConfigBuilder(objectPostProcessor);
    configure(yarnConfigBuilder);
    return yarnConfigBuilder;
  }

  protected final YarnResourceLocalizerBuilder getLocalizerBuilder() throws Exception {
    if (yarnResourceLocalizerBuilder != null) {
      return yarnResourceLocalizerBuilder;
    }
    yarnResourceLocalizerBuilder = new YarnResourceLocalizerBuilder();
    configure(yarnResourceLocalizerBuilder);
    return yarnResourceLocalizerBuilder;
  }

  protected final YarnEnvironmentBuilder getEnvironmentBuilder() throws Exception {
    if (yarnEnvironmentBuilder != null) {
      return yarnEnvironmentBuilder;
    }
    yarnEnvironmentBuilder = new YarnEnvironmentBuilder();
    configure(yarnEnvironmentBuilder);
    return yarnEnvironmentBuilder;
  }

  protected final YarnClientBuilder getClientBuilder() throws Exception {
    if (yarnClientBuilder != null) {
      return yarnClientBuilder;
    }
    yarnClientBuilder = new YarnClientBuilder();
    configure(yarnClientBuilder);
    return yarnClientBuilder;
  }

  protected final YarnAppmasterBuilder getAppmasterBuilder() throws Exception {
    if (yarnAppmasterBuilder != null) {
      return yarnAppmasterBuilder;
    }
    yarnAppmasterBuilder = new YarnAppmasterBuilder(objectPostProcessor);
    configure(yarnAppmasterBuilder);
    return yarnAppmasterBuilder;
  }

  protected final YarnContainerBuilder getContainerBuilder() throws Exception {
    if (yarnContainerBuilder != null) {
      return yarnContainerBuilder;
    }
    yarnContainerBuilder = new YarnContainerBuilder();
    configure(yarnContainerBuilder);
    return yarnContainerBuilder;
  }

  @Override
  public boolean isAssignable(AnnotationBuilder<SpringYarnConfigs> builder) {
    return true;
  }

}
TOP

Related Classes of org.springframework.yarn.config.annotation.SpringYarnConfigurerAdapter

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.