我需要一些帮助,了解如何在我的应用程序中获得正确数量的Map和Reduce任务。 有没有办法发现这个数字?
由于
答案 0 :(得分:3)
在执行之前无法获取应用程序的map和reduce任务的实际数量,因为在执行之前无法准确确定任务失败后重新尝试和推测执行尝试的因素,这是一个近似的数字任务可以派生出来。
MapReduce作业的Map任务总数取决于其输入文件及其FileFormat 对于每个输入文件,将计算拆分,并且将调用每个输入拆分的一个映射任务。
分割尺寸将根据
计算input_split_size = max(mapreduce.input.fileinputformat.split.minsize, min(mapreduce.input.fileinputformat.split.maxsize, dfs.blocksize))
如果属性
mapreduce.input.fileinputformat.split.minsize
mapreduce.input.fileinputformat.split.maxsize
是默认情况下,考虑到文件是可拆分的,文件的输入拆分大小将近似等于blocksize
。
地图任务的总数将等于每个文件的输入拆分数之和。
减少任务的总数,为1
(默认)或等于mapreduce.job.reduces
。
答案 1 :(得分:2)
映射器的数量取决于HDFS中的文件块大小(默认情况下)和输入拆分大小(如果我们指定的是默认值以外)。
如果假设您有128MB文件,并且hdfs块大小为64MB,那么由于默认行为,一些map任务将为2。
如果输入分割大小为32MB但hdfs块大小为64MB,那么map任务的时间数将为4。 因此,map任务取决于上面定义的所有三个因素。
减少任务的数量取决于
conf.seNumReduceTask(num)
或mapreduce.job.reduces
(mapred.reduce.tasks
已弃用)。