這種傳遞參數方式因不一樣的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中,並無找到那些方法,汗