在许多应用 MapReduce 的现实生活中,最终的算法最终都是几个 MapReduce 步骤。
即Map1、Reduce1、Map2、Reduce2等等。
因此,您可以将最后一次归约的输出作为下一个映射的输入。
一旦管道成功完成,您(通常)就不想保留中间数据。另外,由于此中间数据通常是某种数据结构(如“映射”或“集合”),因此您不想在写入和读取这些键值对上花费太多精力。
在 Hadoop 中执行此操作的推荐方法是什么?
是否有一个(简单的)示例展示如何以正确的方式处理这些中间数据,包括事后的清理?
我认为雅虎开发者网络上的本教程将帮助您解决此问题:链接作业
您使用JobClient.runJob()
。第一个作业的数据输出路径将成为第二个作业的输入路径。这些需要作为参数传递给您的作业,并使用适当的代码来解析它们并设置作业的参数。
我认为上述方法可能是现在较旧的 mapred API 的做法,但它应该仍然有效。新的mapreduce API 中会有类似的方法,但我不确定它是什么。
至于在作业完成后删除中间数据,您可以在代码中执行此操作。我以前做过的方法是使用类似的东西:
FileSystem.delete(Path f, boolean recursive);
其中路径是数据在 HDFS 上的位置。您需要确保仅在没有其他作业需要时才删除此数据。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)