
# MapReduce Java API接口介绍
#### MapReduce常用接口
MapReduce中常见的类如下。
- org.apache.hadoop.mapreduce.Job：用户提交MR作业的接口，用于设置作业参数、提交作业、控制作业执行以及查询作业状态。
- org.apache.hadoop.mapred.JobConf：MapReduce作业的配置类，是用户向Hadoop提交作业的主要配置接口。
表1类org.apache.hadoop.mapreduce.Job的常用接口 
| 功能                                                                                                                    | 说明                                                                                                                                                                                                         |
|:---|:---|
| Job(Configuration conf, String jobName)，Job(Configuration conf)                                                       | 新建一个MapReduce客户端，用于配置作业属性，提交作业。                                                                                                                                                                            |
| setMapperClass(Class\<extends Mapper\> cls)                                                                           | 核心接口，指定MapReduce作业的Mapper类，默认为空。也可以在"mapred-site.xml"中配置"mapreduce.job.map.class"项。                                                                                                                        |
| setReducerClass(Class\<extends Reducer\> cls)                                                                         | 核心接口，指定MapReduce作业的Reducer类，默认为空。也可以在"mapred-site.xml"中配置"mapreduce.job.reduce.class"项。                                                                                                                    |
| setCombinerClass(Class\<extends Reducer\> cls)                                                                        | 指定MapReduce作业的Combiner类，默认为空。也可以在"mapred-site.xml"中配置"mapreduce.job.combine.class"项。需要保证reduce的输入输出key，value类型相同才可以使用，谨慎使用。                                                                                |
| setInputFormatClass(Class\<extends InputFormat\> cls)                                                                 | 核心接口，指定MapReduce作业的InputFormat类，默认为TextInputFormat。也可以在"mapred-site.xml"中配置"mapreduce.job.inputformat.class"项。该设置用来指定处理不同格式的数据时需要的InputFormat类，用来读取数据，切分数据块。                                               |
| setJarByClass(Class\< \> cls)                                                                                         | 核心接口，指定执行类所在的jar包本地位置。java通过class文件找到执行jar包，该jar包被上传到HDFS。                                                                                                                                                 |
| setJar(String jar)                                                                                                    | 指定执行类所在的jar包本地位置。直接设置执行jar包所在位置，该jar包被上传到HDFS。与setJarByClass(Class\< \> cls)选择使用一个。也可以在"mapred-site.xml"中配置"mapreduce.job.jar"项。                                                                           |
| setOutputFormatClass(Class\<extends OutputFormat\> theClass)                                                          | 核心接口，指定MapReduce作业的OutputFormat类，默认为TextOutputFormat。也可以在"mapred-site.xml"中配置"mapred.output.format.class"项，指定输出结果的数据格式。例如默认的TextOutputFormat把每条key，value记录写为文本行。通常场景不配置特定的OutputFormat。                    |
| setOutputKeyClass(Class\< \> theClass)                                                                                | 核心接口，指定MapReduce作业的输出key的类型，也可以在"mapred-site.xml"中配置"mapreduce.job.output.key.class"项。                                                                                                                     |
| setOutputValueClass(Class\< \> theClass)                                                                              | 核心接口，指定MapReduce作业的输出value的类型，也可以在"mapred-site.xml"中配置"mapreduce.job.output.value.class"项。                                                                                                                 |
| setPartitionerClass(Class\<extends Partitioner\> theClass)                                                            | 指定MapReduce作业的Partitioner类。也可以在"mapred-site.xml"中配置"mapred.partitioner.class"项。该方法用来分配map的输出结果到哪个reduce类，默认使用HashPartitioner，均匀分配map的每条键值对记录。例如在hbase应用中，不同的键值对应的region不同，这就需要设定特殊的partitioner类分配map的输出结果。 |
| setSortComparatorClass(Class\<extends RawComparator\> cls)  | 指定MapReduce作业的map任务的输出结果压缩类，默认不使用压缩。也可以在"mapred-site.xml"中配置"mapreduce.map.output.compress"和"mapreduce.map.output.compress.codec"项。当map的输出数据大，减少网络压力，使用压缩传输中间数据。                                           |
| setPriority(JobPriority priority)                                                                                     | 指定MapReduce作业的优先级，共有5个优先级别，VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW，默认级别为NORMAL。也可以在"mapred-site.xml"中配置"mapreduce.job.priority"项。                                                                               |
   
表2类org.apache.hadoop.mapred.JobConf的常用接口 
| 方法                             | 说明                                                                                                                                                                                                                                 |
|:---|:---|
| setNumMapTasks(int n)          | 核心接口，指定MapReduce作业的map个数。也可以在"mapred-site.xml"中配置"mapreduce.job.maps"项。 说明： 指定的InputFormat类用来控制map任务个数，注意该类是否支持客户端设定map个数。 |
| setNumReduceTasks(int n)       | 核心接口，指定MapReduce作业的reduce个数。默认只启动1个。也可以在"mapred-site.xml"中配置"mapreduce.job.reduces"项。reduce个数由用户控制，通常场景reduce个数是map个数的1/4。                                                                                                         |
| setQueueName(String queueName) | 指定MapReduce作业的提交队列。默认使用default队列。也可以在"mapred-site.xml"中配置"mapreduce.job.queuename"项。                                                                                                                                               |
   
