我正在实现一个迭代算法,它在每次迭代中产生一些结果,这个结果在下一次迭代的Map阶段使用。我应该使用分布式缓存将结果提供给mapper,还是从hdfs读取?什么更有效?那个文件不应该那么大。这个想法只是在设置阶段读取它,并将其保存在mapper的内存中。谢谢
nbewdwxp1#
如果文件不是那么大,并且将在mapper的设置中读取,那么distributedcache是前进的方向。当然,如果你在第二份工作中没有阅读任何其他内容,那么你就不必问为什么要使用mapreduce工作了。从hdfs读取(即通过inputformat将文件流式传输到Map器)和使用distributedcache有两种完全不同的用例。distributedcache是为可以放入内存的小文件而设计的,而使用inputformat读入Map器是为只能使用分布式进程处理的大型分布式数据集而设计的。如果您的数据集足够小,可以在distributedcache中使用,那么您可以使用java作业来处理它,并避免mapreduce的大量开销。
1条答案
按热度按时间nbewdwxp1#
如果文件不是那么大,并且将在mapper的设置中读取,那么distributedcache是前进的方向。当然,如果你在第二份工作中没有阅读任何其他内容,那么你就不必问为什么要使用mapreduce工作了。
从hdfs读取(即通过inputformat将文件流式传输到Map器)和使用distributedcache有两种完全不同的用例。distributedcache是为可以放入内存的小文件而设计的,而使用inputformat读入Map器是为只能使用分布式进程处理的大型分布式数据集而设计的。
如果您的数据集足够小,可以在distributedcache中使用,那么您可以使用java作业来处理它,并避免mapreduce的大量开销。