/**
 * 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.hadoop.mapreduce.util;

import org.apache.hadoop.classification.InterfaceAudience;
import org.apache.hadoop.classification.InterfaceStability;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.MRConfig;
import org.apache.hadoop.mapreduce.MRJobConfig;
import org.apache.hadoop.mapreduce.server.jobtracker.JTConfig;
import org.apache.hadoop.mapreduce.server.tasktracker.TTConfig;

/**
 * Place holder for deprecated keys in the framework 
 */
@InterfaceAudience.Private
@InterfaceStability.Unstable
public class ConfigUtil {

  /**
   * Adds all the deprecated keys. Loads mapred-default.xml and mapred-site.xml
   */
  public static void loadResources() {
    addDeprecatedKeys();
    Configuration.addDefaultResource("mapred-default.xml");
    Configuration.addDefaultResource("mapred-site.xml");
  }
  
  /**
   * Adds deprecated keys and the corresponding new keys to the Configuration
   */
  private static void addDeprecatedKeys()  {
    Configuration.addDeprecation("mapred.temp.dir", 
      new String[] {MRConfig.TEMP_DIR});
    Configuration.addDeprecation("mapred.local.dir", 
      new String[] {MRConfig.LOCAL_DIR});
    Configuration.addDeprecation("mapred.cluster.map.memory.mb", 
      new String[] {MRConfig.MAPMEMORY_MB});
    Configuration.addDeprecation("mapred.cluster.reduce.memory.mb", 
      new String[] {MRConfig.REDUCEMEMORY_MB});
    Configuration.addDeprecation("mapred.acls.enabled", 
        new String[] {MRConfig.MR_ACLS_ENABLED});

    Configuration.addDeprecation("mapred.cluster.max.map.memory.mb", 
      new String[] {JTConfig.JT_MAX_MAPMEMORY_MB});
    Configuration.addDeprecation("mapred.cluster.max.reduce.memory.mb", 
      new String[] {JTConfig.JT_MAX_REDUCEMEMORY_MB});

    Configuration.addDeprecation("mapred.cluster.average.blacklist.threshold", 
      new String[] {JTConfig.JT_AVG_BLACKLIST_THRESHOLD});
    Configuration.addDeprecation("hadoop.job.history.location", 
      new String[] {JTConfig.JT_JOBHISTORY_LOCATION});
    Configuration.addDeprecation(
      "mapred.job.tracker.history.completed.location", 
      new String[] {JTConfig.JT_JOBHISTORY_COMPLETED_LOCATION});
    Configuration.addDeprecation("mapred.jobtracker.job.history.block.size", 
      new String[] {JTConfig.JT_JOBHISTORY_BLOCK_SIZE});
    Configuration.addDeprecation("mapred.job.tracker.jobhistory.lru.cache.size", 
      new String[] {JTConfig.JT_JOBHISTORY_CACHE_SIZE});
    Configuration.addDeprecation("mapred.hosts", 
      new String[] {JTConfig.JT_HOSTS_FILENAME});
    Configuration.addDeprecation("mapred.hosts.exclude", 
      new String[] {JTConfig.JT_HOSTS_EXCLUDE_FILENAME});
    Configuration.addDeprecation("mapred.system.dir", 
      new String[] {JTConfig.JT_SYSTEM_DIR});
    Configuration.addDeprecation("mapred.max.tracker.blacklists", 
      new String[] {JTConfig.JT_MAX_TRACKER_BLACKLISTS});
    Configuration.addDeprecation("mapred.job.tracker", 
      new String[] {JTConfig.JT_IPC_ADDRESS});
    Configuration.addDeprecation("mapred.job.tracker.http.address", 
      new String[] {JTConfig.JT_HTTP_ADDRESS});
    Configuration.addDeprecation("mapred.job.tracker.handler.count", 
      new String[] {JTConfig.JT_IPC_HANDLER_COUNT});
    Configuration.addDeprecation("mapred.jobtracker.restart.recover", 
      new String[] {JTConfig.JT_RESTART_ENABLED});
    Configuration.addDeprecation("mapred.jobtracker.taskScheduler", 
      new String[] {JTConfig.JT_TASK_SCHEDULER});
    Configuration.addDeprecation(
      "mapred.jobtracker.taskScheduler.maxRunningTasksPerJob", 
      new String[] {JTConfig.JT_RUNNINGTASKS_PER_JOB});
    Configuration.addDeprecation("mapred.jobtracker.instrumentation", 
      new String[] {JTConfig.JT_INSTRUMENTATION});
    Configuration.addDeprecation("mapred.jobtracker.maxtasks.per.job", 
      new String[] {JTConfig.JT_TASKS_PER_JOB});
    Configuration.addDeprecation("mapred.heartbeats.in.second", 
      new String[] {JTConfig.JT_HEARTBEATS_IN_SECOND});
    Configuration.addDeprecation("mapred.job.tracker.persist.jobstatus.active", 
      new String[] {JTConfig.JT_PERSIST_JOBSTATUS});
    Configuration.addDeprecation("mapred.job.tracker.persist.jobstatus.hours", 
      new String[] {JTConfig.JT_PERSIST_JOBSTATUS_HOURS});
    Configuration.addDeprecation("mapred.job.tracker.persist.jobstatus.dir", 
      new String[] {JTConfig.JT_PERSIST_JOBSTATUS_DIR});
    Configuration.addDeprecation("mapred.permissions.supergroup", 
      new String[] {MRConfig.MR_SUPERGROUP});
    Configuration.addDeprecation("mapreduce.jobtracker.permissions.supergroup",
        new String[] {MRConfig.MR_SUPERGROUP});
    Configuration.addDeprecation("mapred.task.cache.levels", 
      new String[] {JTConfig.JT_TASKCACHE_LEVELS});
    Configuration.addDeprecation("mapred.jobtracker.taskalloc.capacitypad", 
      new String[] {JTConfig.JT_TASK_ALLOC_PAD_FRACTION});
    Configuration.addDeprecation("mapred.jobinit.threads", 
      new String[] {JTConfig.JT_JOBINIT_THREADS});
    Configuration.addDeprecation("mapred.tasktracker.expiry.interval", 
      new String[] {JTConfig.JT_TRACKER_EXPIRY_INTERVAL});
    Configuration.addDeprecation("mapred.job.tracker.retiredjobs.cache.size", 
      new String[] {JTConfig.JT_RETIREJOB_CACHE_SIZE});
    Configuration.addDeprecation("mapred.job.tracker.retire.jobs", 
      new String[] {JTConfig.JT_RETIREJOBS});
    Configuration.addDeprecation("mapred.healthChecker.interval", 
      new String[] {TTConfig.TT_HEALTH_CHECKER_INTERVAL});
    Configuration.addDeprecation("mapred.healthChecker.script.args", 
      new String[] {TTConfig.TT_HEALTH_CHECKER_SCRIPT_ARGS});
    Configuration.addDeprecation("mapred.healthChecker.script.path", 
      new String[] {TTConfig.TT_HEALTH_CHECKER_SCRIPT_PATH});
    Configuration.addDeprecation("mapred.healthChecker.script.timeout", 
      new String[] {TTConfig.TT_HEALTH_CHECKER_SCRIPT_TIMEOUT});
    Configuration.addDeprecation("mapred.local.dir.minspacekill", 
      new String[] {TTConfig.TT_LOCAL_DIR_MINSPACE_KILL});
    Configuration.addDeprecation("mapred.local.dir.minspacestart", 
      new String[] {TTConfig.TT_LOCAL_DIR_MINSPACE_START});
    Configuration.addDeprecation("mapred.task.tracker.http.address", 
      new String[] {TTConfig.TT_HTTP_ADDRESS});
    Configuration.addDeprecation("mapred.task.tracker.report.address", 
      new String[] {TTConfig.TT_REPORT_ADDRESS});
    Configuration.addDeprecation("mapred.task.tracker.task-controller", 
      new String[] {TTConfig.TT_TASK_CONTROLLER});
    Configuration.addDeprecation("mapred.tasktracker.dns.interface", 
      new String[] {TTConfig.TT_DNS_INTERFACE});
    Configuration.addDeprecation("mapred.tasktracker.dns.nameserver", 
      new String[] {TTConfig.TT_DNS_NAMESERVER});
    Configuration.addDeprecation("mapred.tasktracker.events.batchsize", 
      new String[] {TTConfig.TT_MAX_TASK_COMPLETION_EVENTS_TO_POLL});
    Configuration.addDeprecation("mapred.tasktracker.indexcache.mb", 
      new String[] {TTConfig.TT_INDEX_CACHE});
    Configuration.addDeprecation("mapred.tasktracker.instrumentation", 
      new String[] {TTConfig.TT_INSTRUMENTATION});
    Configuration.addDeprecation("mapred.tasktracker.map.tasks.maximum", 
      new String[] {TTConfig.TT_MAP_SLOTS});
    Configuration.addDeprecation("mapred.tasktracker.memory_calculator_plugin", 
      new String[] {TTConfig.TT_RESOURCE_CALCULATOR_PLUGIN});
    Configuration.addDeprecation("mapred.tasktracker.memorycalculatorplugin", 
      new String[] {TTConfig.TT_RESOURCE_CALCULATOR_PLUGIN});
    Configuration.addDeprecation("mapred.tasktracker.reduce.tasks.maximum", 
      new String[] {TTConfig.TT_REDUCE_SLOTS});
    Configuration.addDeprecation(
      "mapred.tasktracker.taskmemorymanager.monitoring-interval", 
      new String[] {TTConfig.TT_MEMORY_MANAGER_MONITORING_INTERVAL});
    Configuration.addDeprecation(
      "mapred.tasktracker.tasks.sleeptime-before-sigkill", 
      new String[] {TTConfig.TT_SLEEP_TIME_BEFORE_SIG_KILL});
    Configuration.addDeprecation("slave.host.name", 
      new String[] {TTConfig.TT_HOST_NAME});
    Configuration.addDeprecation("tasktracker.http.threads", 
      new String[] {TTConfig.TT_HTTP_THREADS});
    Configuration.addDeprecation("hadoop.net.static.resolutions", 
      new String[] {TTConfig.TT_STATIC_RESOLUTIONS});
    Configuration.addDeprecation("local.cache.size", 
      new String[] {TTConfig.TT_LOCAL_CACHE_SIZE});
    Configuration.addDeprecation("tasktracker.contention.tracking", 
      new String[] {TTConfig.TT_CONTENTION_TRACKING});
    Configuration.addDeprecation("job.end.notification.url", 
      new String[] {MRJobConfig.END_NOTIFICATION_URL});
    Configuration.addDeprecation("job.end.retry.attempts", 
      new String[] {MRJobConfig.END_NOTIFICATION_RETRIES});
    Configuration.addDeprecation("job.end.retry.interval", 
      new String[] {MRJobConfig.END_NOTIFICATION_RETRIE_INTERVAL});
    Configuration.addDeprecation("mapred.committer.job.setup.cleanup.needed", 
      new String[] {MRJobConfig.SETUP_CLEANUP_NEEDED});
    Configuration.addDeprecation("mapred.jar", 
      new String[] {MRJobConfig.JAR});
    Configuration.addDeprecation("mapred.job.id", 
      new String[] {MRJobConfig.ID});
    Configuration.addDeprecation("mapred.job.name", 
      new String[] {MRJobConfig.JOB_NAME});
    Configuration.addDeprecation("mapred.job.priority", 
      new String[] {MRJobConfig.PRIORITY});
    Configuration.addDeprecation("mapred.job.queue.name", 
      new String[] {MRJobConfig.QUEUE_NAME});
    Configuration.addDeprecation("mapred.job.reuse.jvm.num.tasks", 
      new String[] {MRJobConfig.JVM_NUMTASKS_TORUN});
    Configuration.addDeprecation("mapred.map.tasks", 
      new String[] {MRJobConfig.NUM_MAPS});
    Configuration.addDeprecation("mapred.max.tracker.failures", 
      new String[] {MRJobConfig.MAX_TASK_FAILURES_PER_TRACKER});
    Configuration.addDeprecation("mapred.reduce.slowstart.completed.maps", 
      new String[] {MRJobConfig.COMPLETED_MAPS_FOR_REDUCE_SLOWSTART});
    Configuration.addDeprecation("mapred.reduce.tasks", 
      new String[] {MRJobConfig.NUM_REDUCES});
    Configuration.addDeprecation("mapred.skip.on", 
      new String[] {MRJobConfig.SKIP_RECORDS});
    Configuration.addDeprecation("mapred.skip.out.dir", 
      new String[] {MRJobConfig.SKIP_OUTDIR});
    Configuration.addDeprecation(
      "mapred.speculative.execution.slowNodeThreshold", 
      new String[] {MRJobConfig.SPECULATIVE_SLOWNODE_THRESHOLD});
    Configuration.addDeprecation(
      "mapred.speculative.execution.slowTaskThreshold", 
      new String[] {MRJobConfig.SPECULATIVE_SLOWTASK_THRESHOLD});
    Configuration.addDeprecation("mapred.speculative.execution.speculativeCap", 
      new String[] {MRJobConfig.SPECULATIVECAP});
    Configuration.addDeprecation("job.local.dir", 
      new String[] {MRJobConfig.JOB_LOCAL_DIR});
    Configuration.addDeprecation("mapreduce.inputformat.class", 
      new String[] {MRJobConfig.INPUT_FORMAT_CLASS_ATTR});
    Configuration.addDeprecation("mapreduce.map.class", 
      new String[] {MRJobConfig.MAP_CLASS_ATTR});
    Configuration.addDeprecation("mapreduce.combine.class", 
      new String[] {MRJobConfig.COMBINE_CLASS_ATTR});
    Configuration.addDeprecation("mapreduce.reduce.class", 
      new String[] {MRJobConfig.REDUCE_CLASS_ATTR});
    Configuration.addDeprecation("mapreduce.outputformat.class", 
      new String[] {MRJobConfig.OUTPUT_FORMAT_CLASS_ATTR});
    Configuration.addDeprecation("mapreduce.partitioner.class", 
      new String[] {MRJobConfig.PARTITIONER_CLASS_ATTR});
    Configuration.addDeprecation("mapred.job.classpath.archives", 
      new String[] {MRJobConfig.CLASSPATH_ARCHIVES});
    Configuration.addDeprecation("mapred.job.classpath.files", 
      new String[] {MRJobConfig.CLASSPATH_FILES});
    Configuration.addDeprecation("mapred.cache.files", 
      new String[] {MRJobConfig.CACHE_FILES});
    Configuration.addDeprecation("mapred.cache.archives", 
      new String[] {MRJobConfig.CACHE_ARCHIVES});
    Configuration.addDeprecation("mapred.cache.localFiles", 
      new String[] {MRJobConfig.CACHE_LOCALFILES});
    Configuration.addDeprecation("mapred.cache.localArchives", 
      new String[] {MRJobConfig.CACHE_LOCALARCHIVES});
    Configuration.addDeprecation("mapred.cache.files.timestamps", 
      new String[] {MRJobConfig.CACHE_FILE_TIMESTAMPS});
    Configuration.addDeprecation("mapred.cache.archives.timestamps", 
      new String[] {MRJobConfig.CACHE_ARCHIVES_TIMESTAMPS});
    Configuration.addDeprecation("mapred.create.symlink", 
      new String[] {MRJobConfig.CACHE_SYMLINK});
    Configuration.addDeprecation("mapred.working.dir", 
      new String[] {MRJobConfig.WORKING_DIR});
    Configuration.addDeprecation("user.name", 
      new String[] {MRJobConfig.USER_NAME});
    Configuration.addDeprecation("mapred.output.key.class", 
      new String[] {MRJobConfig.OUTPUT_KEY_CLASS});
    Configuration.addDeprecation("mapred.output.value.class", 
      new String[] {MRJobConfig.OUTPUT_VALUE_CLASS});
    Configuration.addDeprecation("mapred.output.value.groupfn.class", 
      new String[] {MRJobConfig.GROUP_COMPARATOR_CLASS});
    Configuration.addDeprecation("mapred.output.key.comparator.class", 
      new String[] {MRJobConfig.KEY_COMPARATOR});
    Configuration.addDeprecation("io.sort.factor", 
      new String[] {MRJobConfig.IO_SORT_FACTOR});
    Configuration.addDeprecation("io.sort.mb", 
      new String[] {MRJobConfig.IO_SORT_MB});
    Configuration.addDeprecation("keep.failed.task.files", 
      new String[] {MRJobConfig.PRESERVE_FAILED_TASK_FILES});
    Configuration.addDeprecation("keep.task.files.pattern", 
      new String[] {MRJobConfig.PRESERVE_FILES_PATTERN});
    Configuration.addDeprecation("mapred.child.tmp", 
      new String[] {MRJobConfig.TASK_TEMP_DIR});
    Configuration.addDeprecation("mapred.debug.out.lines", 
      new String[] {MRJobConfig.TASK_DEBUGOUT_LINES});
    Configuration.addDeprecation("mapred.merge.recordsBeforeProgress", 
      new String[] {MRJobConfig.RECORDS_BEFORE_PROGRESS});
    Configuration.addDeprecation("mapred.skip.attempts.to.start.skipping", 
      new String[] {MRJobConfig.SKIP_START_ATTEMPTS});
    Configuration.addDeprecation("mapred.task.id", 
      new String[] {MRJobConfig.TASK_ATTEMPT_ID});
    Configuration.addDeprecation("mapred.task.is.map", 
      new String[] {MRJobConfig.TASK_ISMAP});
    Configuration.addDeprecation("mapred.task.partition", 
      new String[] {MRJobConfig.TASK_PARTITION});
    Configuration.addDeprecation("mapred.task.profile", 
      new String[] {MRJobConfig.TASK_PROFILE});
    Configuration.addDeprecation("mapred.task.profile.maps", 
      new String[] {MRJobConfig.NUM_MAP_PROFILES});
    Configuration.addDeprecation("mapred.task.profile.reduces", 
      new String[] {MRJobConfig.NUM_REDUCE_PROFILES});
    Configuration.addDeprecation("mapred.task.timeout", 
      new String[] {MRJobConfig.TASK_TIMEOUT});
    Configuration.addDeprecation("mapred.tip.id", 
      new String[] {MRJobConfig.TASK_ID});
    Configuration.addDeprecation("mapred.work.output.dir", 
      new String[] {MRJobConfig.TASK_OUTPUT_DIR});
    Configuration.addDeprecation("mapred.userlog.limit.kb", 
      new String[] {MRJobConfig.TASK_USERLOG_LIMIT});
    Configuration.addDeprecation("mapred.userlog.retain.hours", 
      new String[] {MRJobConfig.USER_LOG_RETAIN_HOURS});
    Configuration.addDeprecation("mapred.task.profile.params", 
      new String[] {MRJobConfig.TASK_PROFILE_PARAMS});
    Configuration.addDeprecation("io.sort.spill.percent", 
      new String[] {MRJobConfig.MAP_SORT_SPILL_PERCENT});
    Configuration.addDeprecation("map.input.file", 
      new String[] {MRJobConfig.MAP_INPUT_FILE});
    Configuration.addDeprecation("map.input.length", 
      new String[] {MRJobConfig.MAP_INPUT_PATH});
    Configuration.addDeprecation("map.input.start", 
      new String[] {MRJobConfig.MAP_INPUT_START});
    Configuration.addDeprecation("mapred.job.map.memory.mb", 
      new String[] {MRJobConfig.MAP_MEMORY_MB});
    Configuration.addDeprecation("mapred.map.child.env", 
      new String[] {MRJobConfig.MAP_ENV});
    Configuration.addDeprecation("mapred.map.child.java.opts", 
      new String[] {MRJobConfig.MAP_JAVA_OPTS});
    Configuration.addDeprecation("mapred.map.child.ulimit", 
      new String[] {MRJobConfig.MAP_ULIMIT});
    Configuration.addDeprecation("mapred.map.max.attempts", 
      new String[] {MRJobConfig.MAP_MAX_ATTEMPTS});
    Configuration.addDeprecation("mapred.map.task.debug.script", 
      new String[] {MRJobConfig.MAP_DEBUG_SCRIPT});
    Configuration.addDeprecation("mapred.map.tasks.speculative.execution", 
      new String[] {MRJobConfig.MAP_SPECULATIVE});
    Configuration.addDeprecation("mapred.max.map.failures.percent", 
      new String[] {MRJobConfig.MAP_FAILURES_MAX_PERCENT});
    Configuration.addDeprecation("mapred.skip.map.auto.incr.proc.count", 
      new String[] {MRJobConfig.MAP_SKIP_INCR_PROC_COUNT});
    Configuration.addDeprecation("mapred.skip.map.max.skip.records", 
      new String[] {MRJobConfig.MAP_SKIP_MAX_RECORDS});
    Configuration.addDeprecation("min.num.spills.for.combine", 
      new String[] {MRJobConfig.MAP_COMBINE_MIN_SPILLS});
    Configuration.addDeprecation("mapred.compress.map.output", 
      new String[] {MRJobConfig.MAP_OUTPUT_COMPRESS});
    Configuration.addDeprecation("mapred.map.output.compression.codec", 
      new String[] {MRJobConfig.MAP_OUTPUT_COMPRESS_CODEC});
    Configuration.addDeprecation("mapred.mapoutput.key.class", 
      new String[] {MRJobConfig.MAP_OUTPUT_KEY_CLASS});
    Configuration.addDeprecation("mapred.mapoutput.value.class", 
      new String[] {MRJobConfig.MAP_OUTPUT_VALUE_CLASS});
    Configuration.addDeprecation("map.output.key.field.separator", 
      new String[] {MRJobConfig.MAP_OUTPUT_KEY_FIELD_SEPERATOR});
    Configuration.addDeprecation("mapred.map.child.log.level", 
      new String[] {MRJobConfig.MAP_LOG_LEVEL});
    Configuration.addDeprecation("mapred.inmem.merge.threshold", 
      new String[] {MRJobConfig.REDUCE_MERGE_INMEM_THRESHOLD});
    Configuration.addDeprecation("mapred.job.reduce.input.buffer.percent", 
      new String[] {MRJobConfig.REDUCE_INPUT_BUFFER_PERCENT});
    Configuration.addDeprecation("mapred.job.reduce.markreset.buffer.percent", 
      new String[] {MRJobConfig.REDUCE_MARKRESET_BUFFER_PERCENT});
    Configuration.addDeprecation("mapred.job.reduce.memory.mb", 
      new String[] {MRJobConfig.REDUCE_MEMORY_MB});
    Configuration.addDeprecation("mapred.job.reduce.total.mem.bytes", 
      new String[] {MRJobConfig.REDUCE_MEMORY_TOTAL_BYTES});
    Configuration.addDeprecation("mapred.job.shuffle.input.buffer.percent", 
      new String[] {MRJobConfig.SHUFFLE_INPUT_BUFFER_PERCENT});
    Configuration.addDeprecation("mapred.job.shuffle.merge.percent", 
      new String[] {MRJobConfig.SHUFFLE_MERGE_EPRCENT});
    Configuration.addDeprecation("mapred.max.reduce.failures.percent", 
      new String[] {MRJobConfig.REDUCE_FAILURES_MAXPERCENT});
    Configuration.addDeprecation("mapred.reduce.child.env", 
      new String[] {MRJobConfig.REDUCE_ENV});
    Configuration.addDeprecation("mapred.reduce.child.java.opts", 
      new String[] {MRJobConfig.REDUCE_JAVA_OPTS});
    Configuration.addDeprecation("mapred.reduce.child.ulimit", 
      new String[] {MRJobConfig.REDUCE_ULIMIT});
    Configuration.addDeprecation("mapred.reduce.max.attempts", 
      new String[] {MRJobConfig.REDUCE_MAX_ATTEMPTS});
    Configuration.addDeprecation("mapred.reduce.parallel.copies", 
      new String[] {MRJobConfig.SHUFFLE_PARALLEL_COPIES});
    Configuration.addDeprecation("mapred.reduce.task.debug.script", 
      new String[] {MRJobConfig.REDUCE_DEBUG_SCRIPT});
    Configuration.addDeprecation("mapred.reduce.tasks.speculative.execution", 
      new String[] {MRJobConfig.REDUCE_SPECULATIVE});
    Configuration.addDeprecation("mapred.shuffle.connect.timeout", 
      new String[] {MRJobConfig.SHUFFLE_CONNECT_TIMEOUT});
    Configuration.addDeprecation("mapred.shuffle.read.timeout", 
      new String[] {MRJobConfig.SHUFFLE_READ_TIMEOUT});
    Configuration.addDeprecation("mapred.skip.reduce.auto.incr.proc.count", 
      new String[] {MRJobConfig.REDUCE_SKIP_INCR_PROC_COUNT});
    Configuration.addDeprecation("mapred.skip.reduce.max.skip.groups", 
      new String[] {MRJobConfig.REDUCE_SKIP_MAXGROUPS});
    Configuration.addDeprecation("mapred.reduce.child.log.level", 
      new String[] {MRJobConfig.REDUCE_LOG_LEVEL});
    Configuration.addDeprecation("jobclient.completion.poll.interval", 
      new String[] {Job.COMPLETION_POLL_INTERVAL_KEY});
    Configuration.addDeprecation("jobclient.progress.monitor.poll.interval", 
      new String[] {Job.PROGRESS_MONITOR_POLL_INTERVAL_KEY});
    Configuration.addDeprecation("jobclient.output.filter", 
      new String[] {Job.OUTPUT_FILTER});
    Configuration.addDeprecation("mapred.submit.replication", 
      new String[] {Job.SUBMIT_REPLICATION});
    Configuration.addDeprecation("mapred.used.genericoptionsparser", 
      new String[] {Job.USED_GENERIC_PARSER});
    Configuration.addDeprecation("mapred.input.dir", 
      new String[] {
        org.apache.hadoop.mapreduce.lib.input.FileInputFormat.INPUT_DIR});
    Configuration.addDeprecation("mapred.input.pathFilter.class", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        FileInputFormat.PATHFILTER_CLASS});
    Configuration.addDeprecation("mapred.max.split.size", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        FileInputFormat.SPLIT_MAXSIZE});
    Configuration.addDeprecation("mapred.min.split.size", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        FileInputFormat.SPLIT_MINSIZE});
    Configuration.addDeprecation("mapred.output.compress", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
        FileOutputFormat.COMPRESS});
    Configuration.addDeprecation("mapred.output.compression.codec", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
        FileOutputFormat.COMPRESS_CODEC});
    Configuration.addDeprecation("mapred.output.compression.type", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
        FileOutputFormat.COMPRESS_TYPE});
    Configuration.addDeprecation("mapred.output.dir", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
        FileOutputFormat.OUTDIR});
    Configuration.addDeprecation("mapred.seqbinary.output.key.class", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
        SequenceFileAsBinaryOutputFormat.KEY_CLASS});
    Configuration.addDeprecation("mapred.seqbinary.output.value.class", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
        SequenceFileAsBinaryOutputFormat.VALUE_CLASS});
    Configuration.addDeprecation("sequencefile.filter.class", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        SequenceFileInputFilter.FILTER_CLASS});
    Configuration.addDeprecation("sequencefile.filter.regex", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        SequenceFileInputFilter.FILTER_REGEX});
    Configuration.addDeprecation("sequencefile.filter.frequency", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        SequenceFileInputFilter.FILTER_FREQUENCY});
    Configuration.addDeprecation("mapred.input.dir.mappers", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        MultipleInputs.DIR_MAPPERS});
    Configuration.addDeprecation("mapred.input.dir.formats", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        MultipleInputs.DIR_FORMATS});
    Configuration.addDeprecation("mapred.line.input.format.linespermap", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
        NLineInputFormat.LINES_PER_MAP});
    Configuration.addDeprecation("mapred.binary.partitioner.left.offset", 
      new String[] {org.apache.hadoop.mapreduce.lib.partition.
        BinaryPartitioner.LEFT_OFFSET_PROPERTY_NAME});
    Configuration.addDeprecation("mapred.binary.partitioner.right.offset", 
      new String[] {org.apache.hadoop.mapreduce.lib.partition.
        BinaryPartitioner.RIGHT_OFFSET_PROPERTY_NAME});
    Configuration.addDeprecation("mapred.text.key.comparator.options", 
      new String[] {org.apache.hadoop.mapreduce.lib.partition.
        KeyFieldBasedComparator.COMPARATOR_OPTIONS});
    Configuration.addDeprecation("mapred.text.key.partitioner.options", 
      new String[] {org.apache.hadoop.mapreduce.lib.partition.
        KeyFieldBasedPartitioner.PARTITIONER_OPTIONS});
    Configuration.addDeprecation("mapred.mapper.regex.group", 
      new String[] {org.apache.hadoop.mapreduce.lib.map.RegexMapper.GROUP});
    Configuration.addDeprecation("mapred.mapper.regex", 
      new String[] {org.apache.hadoop.mapreduce.lib.map.RegexMapper.PATTERN});
    Configuration.addDeprecation("create.empty.dir.if.nonexist", 
      new String[] {org.apache.hadoop.mapreduce.lib.jobcontrol.
                    ControlledJob.CREATE_DIR});
    Configuration.addDeprecation("mapred.data.field.separator", 
      new String[] {org.apache.hadoop.mapreduce.lib.fieldsel.
                    FieldSelectionHelper.DATA_FIELD_SEPERATOR});
    Configuration.addDeprecation("map.output.key.value.fields.spec", 
      new String[] {org.apache.hadoop.mapreduce.lib.fieldsel.
                    FieldSelectionHelper.MAP_OUTPUT_KEY_VALUE_SPEC});
    Configuration.addDeprecation("reduce.output.key.value.fields.spec", 
      new String[] {org.apache.hadoop.mapreduce.lib.fieldsel.
                    FieldSelectionHelper.REDUCE_OUTPUT_KEY_VALUE_SPEC});
    Configuration.addDeprecation("mapred.min.split.size.per.node", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
                    CombineFileInputFormat.SPLIT_MINSIZE_PERNODE});
    Configuration.addDeprecation("mapred.min.split.size.per.rack", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
                    CombineFileInputFormat.SPLIT_MINSIZE_PERRACK});
    Configuration.addDeprecation("key.value.separator.in.input.line", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
                    KeyValueLineRecordReader.KEY_VALUE_SEPERATOR});
    Configuration.addDeprecation("mapred.linerecordreader.maxlength", 
      new String[] {org.apache.hadoop.mapreduce.lib.input.
                    LineRecordReader.MAX_LINE_LENGTH});
    Configuration.addDeprecation("mapred.lazy.output.format", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
                    LazyOutputFormat.OUTPUT_FORMAT});
    Configuration.addDeprecation("mapred.textoutputformat.separator", 
      new String[] {org.apache.hadoop.mapreduce.lib.output.
                    TextOutputFormat.SEPERATOR});
    Configuration.addDeprecation("mapred.join.expr", 
      new String[] {org.apache.hadoop.mapreduce.lib.join.
                    CompositeInputFormat.JOIN_EXPR});
    Configuration.addDeprecation("mapred.join.keycomparator", 
      new String[] {org.apache.hadoop.mapreduce.lib.join.
                    CompositeInputFormat.JOIN_COMPARATOR});
    Configuration.addDeprecation("hadoop.pipes.command-file.keep", 
      new String[] {org.apache.hadoop.mapred.pipes.
                    Submitter.PRESERVE_COMMANDFILE});
    Configuration.addDeprecation("hadoop.pipes.executable", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.EXECUTABLE});
    Configuration.addDeprecation("hadoop.pipes.executable.interpretor", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.INTERPRETOR});
    Configuration.addDeprecation("hadoop.pipes.java.mapper", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.IS_JAVA_MAP});
    Configuration.addDeprecation("hadoop.pipes.java.recordreader", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.IS_JAVA_RR});
    Configuration.addDeprecation("hadoop.pipes.java.recordwriter", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.IS_JAVA_RW});
    Configuration.addDeprecation("hadoop.pipes.java.reducer", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.IS_JAVA_REDUCE});
    Configuration.addDeprecation("hadoop.pipes.partitioner", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.PARTITIONER});
    Configuration.addDeprecation("mapred.pipes.user.inputformat", 
      new String[] {org.apache.hadoop.mapred.pipes.Submitter.INPUT_FORMAT});
    
    Configuration.addDeprecation("webinterface.private.actions", 
        new String[]{JTConfig.PRIVATE_ACTIONS_KEY});
  }
}

