我有一个map reduce作业,它的输入是一个大数据集(比如100gb大小)。这个map reduce作业所做的是将大数据分割成块并编写单独的文件,每个数据块一个。也就是说,作业的输出是多个文件,每个文件的大小为64mb。
此map reduce作业的输出用作另一个map reduce作业的输入。由于新输入包含多个文件,每个文件大小为64mb,因此第二个map reduce作业中的每个Map器是只读取一个文件还是可能读取多个文件?
我有一个map reduce作业,它的输入是一个大数据集(比如100gb大小)。这个map reduce作业所做的是将大数据分割成块并编写单独的文件,每个数据块一个。也就是说,作业的输出是多个文件,每个文件的大小为64mb。
此map reduce作业的输出用作另一个map reduce作业的输入。由于新输入包含多个文件,每个文件大小为64mb,因此第二个map reduce作业中的每个Map器是只读取一个文件还是可能读取多个文件?
1条答案
按热度按时间vfh0ocws1#
默认情况下,jobtracker会将一个map任务分配给一个块。您可以使用combinefileinputformat绕过此行为,将多个块blob到一个输入拆分中(但这不是您要问的问题)。
在您的情况下,如果您的文件超过64mb,并且您的默认块大小为64mb,那么每个~64mb文件可能会有两个块,这可能是不好的。如果所有文件都小于块大小,则每个块应该有一个Map器。
我想知道你为什么要做第一个mapreduce工作。您基本上是在免费为您重新创建hadoop所做的事情。如果你有一堆大文件加起来高达100gb,让hadoop的块为你做“拆分”。例如,使用64mb块大小的140mb文件将自动拆分为64mb、64mb和12mb块。三个Map器将生成以处理一个文件。