我正在实现一种迭代算法,该算法在每次迭代中都会产生一些结果,并且该结果用于下一次迭代的映射阶段。
我应该使用分布式缓存使该结果可用于映射器,还是应该从HDFS中读取它?什么更有效率?
该文件不应该那么大。这个想法只是在设置阶段读取它并将其保存在映射器的内存中。
谢谢
如果文件不是那么大,并且将在映射器的设置中读取,那么分布式缓存是前进的方向。当然,如果你没有在第二个工作中读取任何其他内容,那么这就引出了一个问题,即你为什么要使用MapReduce作业。
从HDFS读取(即通过InputFormat将文件流式传输到映射器)和使用分布式缓存有两个完全不同的用例。分布式缓存是为可以放入内存的小文件而设计的,而使用 InputFormat 读入映射器是为只能使用分布式进程处理的大型分布式数据集而设计的。
如果你的数据集足够小,可以在分布式缓存中使用,你可以使用Java作业来处理它,避免MapReduce的大开销。