org.springframework.yarn.config.annotation.SpringYarnConfigurerAdapter.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.yarn.config.annotation.SpringYarnConfigurerAdapter.java

Source

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

}