1、向作业传递定制的参数
Hadoop自身使用一个配置对象类存储所有作业的配置属性,也可以使用这个对象将参数传递到Mapper和Reducer
- MR的driver类通过属性来配置JobConf对象,这些属性包括输入格式,输出格式,Mapper类等。如果要引入自定义的属性,需要在这个配置对象中给属性一个唯一的名称并设置它的值。
- 这个配置对象会被传递到所有的TaskTracker(AM),然后作业中的所有任务就能够看到配置对象中的属性
- Mapper和Reducer就可以通过读取该配置对象并获得它的属性值
Configuration类(JonConf的父类)有许多通用的setter方法,属性采用键值对的形式,键必须是string,而值可以是常用类型的任意一个。
常用的setter方法:
public void set(String name,String value)
public void setBoolean(String name, boolean value)
public void setInt(String name, int value)
public void setLong(String name, long value)
public void setStrings(String name, String... values)
常用的getter方法:
public String get(String name)
public String get(String name, String defaultValue)
public boolean getBoolean(String name, boolean defaultValue)
public float getFloat(String name, float defaultValue)
public int getInt(String name, int defaultValue)
public long getLong(String name, long defaultValue)
public String getBoolean(String name, String... defaultValue)
Tips:在Hadoop内部,所有的属性都存为字符串
- driver类首选设置配置对象的属性,让它们在所有的任务中可见
- Mapper和Reducer可以访问Configure()方法中的配置对象
- 任务初始化时会调用configure(),它已经被重写为可以提取和存储设置的属性
- map和reduce方法访问这些属性的副本
package MR;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.*;
import java.io.IOException;
import java.util.Iterator;
/**
* Created by Promacanthus on 2017/6/29.
*/
public class tample {
public int run(String[] args)throws Exception{
Configuration conf = new Configuration();
JobConf job = new JobConf(conf);
job.setInt("myjob.property",Integer.parseInt(args[2]));
JobClient.runJob(job);
return 0;
}
public static class MapClass extends MapReduceBase implements Mapper<Text,Text,Text,Text>{
int myproperty;