更新时间:2024-08-03 GMT+08:00

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”项。