我怎样才能从我的Map减少工作中得到回应?
我已经在java程序中提交了这样的作业输入。
conf.set("key1", somevalue);conf.set("key2", somevalue);
Job job = new Job(conf, jobId);
if (job != null) {
job.waitForCompletion(true);
}
此作业已成功执行,现在在作业完成时(它是仅Map的作业),我想返回一些值。我要用
protected void cleanup(Context context) throws IOException,
InterruptedException { // How can I set value here }
我想返回上一个/最大的密钥Map器使用过的密钥,或者是否有任何方法从inputsplit获取上一个密钥?
2条答案
按热度按时间xj3cbfub1#
要获得最大值,您应该声明一个示例变量,并使用它来保存mapper()方法迄今为止看到的最大值。您可能需要某种方法来表明尚未看到任何值。最后调用cleanup()方法时,变量将保存所需的值。
返回这个值有点困难。hadoop工作流引擎都使用以下方法的变体在hadoop作业之间传递数据。您可以使用此方法在作业完成时将最大值传递给需要它的人。hack/kludge涉及使用一个众所周知的hdfs目录(可以传入)和taskid来构建一个唯一的、可发现的文件名来保存值。使用hdfs文件io api写出值。
lpwwtiir2#
但是,这可能不是最好的解决方案,但是作为一种解决方法,您可以将每个任务的最大值存储在
counter
可以在jobrunner类中检索。然后遍历它们并选择最大的值。例如:Map器:
工作人员
选择作业完成后的最大值: