Hadoop 伪分布数映射与reduce任务

Hadoop 伪分布数映射与reduce任务,hadoop,mapreduce,Hadoop,Mapreduce,我是Hadoop的新手。我已经成功地在伪分布式模式下配置了hadoop设置。现在我想知道选择map和reduce任务数量的逻辑是什么。我们指的是什么 感谢实际上,映射器的数量主要由您使用的InputFormat创建的InputSplit的数量决定,而还原器的数量则由您在映射阶段之后获得的分区的数量决定。话虽如此,您还应该记住每个从机的可用插槽数量以及可用内存。但根据经验,您可以使用这种方法: 以虚拟CPU的数量*.75为例,这就是您可以配置的插槽数量。例如,如果您有12个物理内核(或24个虚拟内

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


感谢

实际上,映射器的数量主要由您使用的InputFormat创建的InputSplit的数量决定,而还原器的数量则由您在映射阶段之后获得的分区的数量决定。话虽如此,您还应该记住每个从机的可用插槽数量以及可用内存。但根据经验,您可以使用这种方法:

以虚拟CPU的数量*.75为例,这就是您可以配置的插槽数量。例如,如果您有12个物理内核(或24个虚拟内核),那么您将有(24*.75)=18个插槽。现在,根据您的需求,您可以选择要使用多少映射器和还原器。使用18个MR插槽,您可以有9个映射器和9个还原器,或者12个映射器和9个还原器,或者您认为合适的任何东西


HTH

您无法概括如何设置映射器/还原器的数量

映射者数量: 不能将映射器的数量显式设置为某个数量(有参数可以设置该数量,但它不会生效)。这取决于hadoop为给定的输入集创建的输入拆分的数量。您可以通过设置
mapred.min.split.size
参数来控制此操作。有关更多信息,请阅读InputSplit部分。如果由于大量小文件而生成了大量映射程序,并且希望减少映射程序的数量,则需要合并多个文件中的数据。请阅读以下内容:

要引用wiki页面中的内容:

映射的数量通常由中DFS块的数量决定 输入文件。尽管这会导致人们调整DFS块 调整贴图数量的大小。正确的并行级别 地图似乎是10-100个地图/节点左右,尽管我们已经开始使用它 对于非常cpu的光照贴图任务,大约为300。任务设置需要一段时间,所以 最好至少花一分钟执行映射

实际上,控制贴图的数量是很微妙的。这个 mapred.map.tasks参数只是对 地图的数量。默认的InputFormat行为是拆分总数 将字节数转换为正确的片段数。但是, 默认情况下,输入文件的DFS块大小被视为 输入拆分的上限。可以设置拆分大小的下限 通过mapred.min.split.size设置。因此,如果您希望输入10TB的数据 如果有128MB DFS块,则最终将得到82k个映射,除非 mapred.map.tasks甚至更大。输入格式最终决定了 地图的数量

还可以使用手动增加映射任务的数量 JobConf的conf.setNumMapTasks(int num)。这可以用来增加 映射任务的数量,但不会将该数量设置为 Hadoop通过拆分输入数据来确定

减速器的数量: 可以显式设置减速器的数量。只需设置参数
mapred.reduce.tasks
。设置这个数字有很多方法,但通常默认的减速器数量应该足够好。有时需要一个报告文件,在这种情况下,您可能希望将还原数设置为1

再次引用维基:

正确的reduces数似乎是0.95或1.75*(节点)* mapred.tasktracker.tasks.max)。在0.95时,所有的减排量都可以 立即启动并开始将地图输出传输为地图 结束。在1.75时,速度较快的节点将完成其第一轮测试 减少并启动第二轮减少,做得更好 负载平衡

目前,减少的数量被限制在大约1000个 输出文件的缓冲区大小(io.buffer.size*2*numReduces