0
如何在reducer中設置變量,在所有任務完成執行後驅動程序都可以讀取執行後的變量?喜歡的東西:在reducer中設置Hadoop變量並在驅動中讀取
class Driver extends Configured implements Tool{
public int run(String[] args) throws Exception {
...
JobClient.runJob(conf); // reducer sets some variable
String varValue = ...; // variable value is read by driver
}
}
替代方法
我想出了這個 「醜」 的解決方法。主要思想是您創建一組計數器,其中您只保存一個計數器,其名稱是您希望返回的值(您忽略實際計數器值)。代碼如下所示:
// reducer || mapper
reporter.incrCounter("Group name", "counter name -> actual value", 0);
// driver
RunningJob runningJob = JobClient.runJob(conf);
String value = runningJob.getCounters().getGroup("Group name").iterator().next().getName();
對於映射器也是如此。雖然這解決了我的問題,但我認爲這種解決方案是「醜陋的」。因此我讓問題開放。
將一個值添加到'conf'並在驅動程序中讀取它?我不確定數據是否會從映射器/還原器返回給驅動程序,但值得一試。 :) – Nija 2012-07-19 20:27:44