我有一个 map 缩减工作,其输入是一个大数据集(假设大小为100GB)。映射减少作业的作用是将大数据拆分为多个块,并写入单独的文件,每个数据块一个。也就是说,作业的输出是多个文件,每个文件大小为64MB。
此map-reduce作业的输出用作另一个map-reduce作业的输入。由于新输入包含多个文件,每个文件的大小为64MB,第二个map-reduce作业中的每个映射器是否仅读取一个文件,或者可能读取多个文件?
最佳答案
默认情况下,JobTracker将 map task 分配给一个块。您可以使用CombineFileInputFormat解决此问题,并将多个块blob到一个输入拆分中(但这不是您要的内容)。
在您的情况下,如果文件超过64MB,默认块大小为64MB,则每个〜64MB文件最终可能会有两个块,这可能是不好的。如果所有文件都小于块大小,则每个块应有一个映射器。
我不知道您为什么要拥有第一个mapreduce工作。您基本上是在免费创建Hadoop为您做的事情。如果您有一堆大文件,总计达100GB,那么让Hadoop的块为您完成“拆分”。例如,使用块大小为64MB的140MB文件将自动拆分为64MB,64MB和12MB块。将生成三个映射器来处理一个文件。