我有一套文件说10个文件和一个大文件,这是所有的10个文件的总和。
我把它们放到分布式缓存中,job conf。
当我在reduce中阅读它们时,我注意到以下几点:
在reduce方法中,我只读取添加到分布式缓存中的选定文件。我希望速度更快,因为在每个reduce中读取的文件大小比在所有reduce方法中读取的大文件小。但是,速度比较慢。
而且,当我将它拆分成更小的文件并将它们添加到分布式缓存中时,问题变得更糟。作业本身只是在很长一段时间后才开始运行。
我找不到原因。请帮忙。
我有一套文件说10个文件和一个大文件,这是所有的10个文件的总和。
我把它们放到分布式缓存中,job conf。
当我在reduce中阅读它们时,我注意到以下几点:
在reduce方法中,我只读取添加到分布式缓存中的选定文件。我希望速度更快,因为在每个reduce中读取的文件大小比在所有reduce方法中读取的大文件小。但是,速度比较慢。
而且,当我将它拆分成更小的文件并将它们添加到分布式缓存中时,问题变得更糟。作业本身只是在很长一段时间后才开始运行。
我找不到原因。请帮忙。
1条答案
按热度按时间o4hqfura1#
我认为您的问题在于读取reduce()中的文件。您应该读取configure()中的文件(使用旧api)或setup()中的文件(使用新api)。因此,对于每个reducer,它只被读取一次,而不是为reducer的每个输入组读取一次(基本上,每次调用reduce方法)
您可以编写如下内容:使用新的MapReduceAPI(org.apache.hadoop.mapreduce.*)-
使用旧的mapredapi(org.apache.hadoop.mapred.*)-