这种传递参数方式因不一样的API的有些许的不一样,另外应该还有其余的传递方式。本人初学者,遇到这个问题将本身的心得写一下,有什么问题欢迎各位指教…… java
1. 旧式的API: ide
Main函数: 函数
JobConf conf = new JobConf(MainApi.class); conf.set("fileName",fileName);而后在本身实现的Map类中 重写public void configure(JobConf job),这个函数。
@Override public void configure(JobConf job) { // TODO Auto-generated method stub //获取配置信息 fileName = job.get("fileName"); try { ecSpec = XmlParser.generateECSpec(new URL(fileName)); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }2. 新API
样式差很少: oop
Configuration conf = new Configuration(); if(fileName != null && !"".equals(fileName)){ conf.set("ECSpec.file.fileName", fileName); } Job job = new Job(conf, "aggressionEvent");此处须要注意的地方是必定要先设置完conf后,在用conf生成Job,二者顺序不能乱。
在实现的Map或Reduce中重写:set(Context context)函数: 云计算
@Override protected void setup(Context context) throws IOException, InterruptedException { // TODO Auto-generated method stub Configuration conf = context.getConfiguration(); // 获取配置信息 fileName = conf.get("ECSpec.file.fileName"); System.out.println("fileName" + fileName); } 此外若是参数不少,很大能够使用“全局数据文件”的传递的方式,具体可见刘鹏《实战Hadoop:开启通向云计算的捷径》一书中的p167页 内容。 可是我在hadoop1.0.4中,并无找到那些方法,汗