/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.apache.gora.shims.hadoop;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.JobContext;

/**
 * Provides version independent utility methods for interacting with Hadoop.
 */
public abstract class HadoopShim {

  public HadoopShim() {
    super();
  }

  /**
   * Create a new Hadoop {@link Job}.
   * 
   * @param configuration
   *            The job's configuration.
   * @return A newly created instance backed by the provided configuration.
   * @throws IOException if the job cannot be created successfully from given configuration
   */
  public abstract Job createJob(Configuration configuration)
      throws IOException;

  /**
   * Create a new {@link JobContext} object.
   * 
   * @param configuration
   *            The configuration for this job context.
   * @return A newly created instance.
   */
  public abstract JobContext createJobContext(Configuration configuration);

}
