伪分布式数字映射和减少任务

时间:2013-05-07 08:33:55

标签: hadoop mapreduce

我是Hadoop的新手。我已经在伪分布式模式下成功配置了hadoop设置。现在我想知道选择map和reduce任务数量的逻辑是什么。我们指的是什么?

由于

2 个答案:

答案 0 :(得分:2)

您无法概括如何设置映射器/缩减器的数量。

Mappers数量: 您不能明确地将映射器的数量设置为特定数量(有设置此参数的参数但它不会生效)。这取决于hadoop为您给定的输入集创建的输入拆分的数量。您可以通过设置mapred.min.split.size参数来控制此操作。有关更多信息,请阅读InputSplit部分here。如果由于大量小文件而生成了大量的映射器,并且您希望减少映射器的数量,那么您将需要组合来自多个文件的数据。请阅读:How to combine input files to get to a single mapper and control number of mappers

引用维基页面:

  

地图数量通常由DFS块的数量驱动   输入文件。虽然这会导致人们调整他们的DFS块   大小来调整地图的数量。正确的并行度   地图似乎大约是10到100个地图/节点,尽管我们已经采用了它   非常cpu-light地图任务的300左右。任务设置需要一段时间,所以   最好是地图至少需要一分钟才能执行。

     

实际控制地图的数量是微妙的。该   mapred.map.tasks参数只是对InputFormat的一个提示   地图数量。默认的InputFormat行为是拆分总计   到正确数量的片段的字节数。但是,在   默认情况下,输入文件的DFS块大小被视为   输入拆分的上限。分割大小的下限可以是   通过mapred.min.split.size设置。因此,如果您期望10TB的输入数据   并且有128MB的DFS块,你最终会得到82k的地图,除非你的   mapred.map.tasks甚至更大。最终,InputFormat决定了   地图的数量。

     

也可以使用手动增加地图任务的数量   JobConf的conf.setNumMapTasks(int num)。这可以用来增加   地图任务的数量,但不会设置下面的数字   Hadoop通过拆分输入数据来确定。

减速机数量: 您可以显式设置减速器的数量。只需设置参数mapred.reduce.tasks即可。有guidelines用于设置此数字,但通常默认的减速器数量应该足够好。有时需要单个报告文件,在这些情况下,您可能希望将多个Reducer设置为1.

再次引用wiki:

  

正确的减少数量似乎是0.95或1.75 *(节点*   mapred.tasktracker.tasks.maximum)。在0.95时,所有减少都可以   立即启动并开始将地图输出作为地图传输   完。在1.75,更快的节点将完成他们的第一轮   减少并启动第二轮减少做得更好的工作   负载平衡。

     

目前减少的数量被限制在1000左右   输出文件的缓冲区大小(io.buffer.size * 2 * numReduces<<   HEAPSIZE)。这将在某个时候修复,但直到它   提供了一个相当坚定的上限。

     

reduce的数量也控制着输出文件的数量   输出目录,但通常不重要,因为下一个   map / reduce步骤会将它们分割成更小的地图分割。

     

还可以以相同的方式增加减少任务的数量   地图任务,通过JobConf的conf.setNumReduceTasks(int num)。

答案 1 :(得分:0)

其实没有。 mappers的主要是由no。您正在使用的InputFormat创建的InputSplits和no。减速机的数量在地图阶段之后获得的分区。话虽如此,你还应该记住每个奴隶可用的插槽数量,以及可用内存。但根据经验,你可以使用这种方法:

拿不了。虚拟CPU * .75,这是没有。您可以配置的插槽。例如,如果您有12个物理核心(或24个虚拟核心),则您将拥有(24 * .75)= 18个插槽。现在,根据您的要求,您可以选择要使用的映射器和缩减器数量。使用18个MR插槽,您可以拥有9个映射器和9个减速器或12个映射器和9个减速器或您认为可以随意使用的任何内容。

HTH

相关问题