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



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

谢谢

您无法概括设置映射器/简化器的数量。

映射器数量:您不能显式地将映射器的数量设置为特定数量(有参数可以设置,但它不会生效)。这是由hadoop为给定的输入集创建的Input split 的数量决定的。您可以通过设置mapred.min.split.size参数来控制它。有关更多信息,请阅读此处的InputSplit部分。如果由于大量的小文件而生成了大量的映射器,并且您希望减少映射器的数量,那么您将需要合并来自多个文件的数据。阅读本文:如何组合输入文件以获得单个映射器并控制映射器的数量。

引用自维基页面:

映射的数量通常由DFS块的数量驱动输入文件。尽管这会导致人们调整他们的DFS块大小调整地图的数量。正确的并行度级别地图似乎在10-100张/节点左右,尽管我们已经把它提高了到300左右对于cpu非常轻的映射任务。任务设置需要一些时间,所以如果映射的执行时间至少为1分钟,则效果最好。

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

地图任务的数量也可以使用JobConf的conf.setNumMapTasks(int num)。这可以用来增加映射任务的数量,但不会设置低于其中的数量Hadoop通过分割输入数据来决定。

减速机数量:您可以显式地设置reducer的数量。设置"mapred.reduce.tasks"参数即可。有一些关于设置这个数字的指导方针,但通常默认的reducer数量应该足够好。有时需要单个报告文件,在这种情况下,您可能希望将reducer的数量设置为1。

再次引用维基百科:

正确的减少数似乎是0.95或1.75 *(节点*)mapred.tasktracker.tasks.maximum)。在0.95所有的减少可以立即启动并开始将地图输出作为地图传输完成。在1.75时,速度较快的节点将完成第一轮然后启动第二轮的reduce,做得更好

目前减少的数量被限制在大约1000输出文件的缓冲区大小(io.buffer.)size * 2 * numcuts <<heapSize)。这将在某个时候被修复,但直到它是它提供一个相当牢固的上界。

的数目也控制输出文件的数目输出目录,但通常这并不重要,因为下Map/reduce步骤将把它们分割成更小的映射。

也可以通过相同的方式增加reduce任务的数量映射任务,通过JobConf的conf.setNumReduceTasks(int num)。

其实没有。映射器主要是由no控制的。您正在使用的InputFormat创建的inputsplit的值和减速器的数目。在映射阶段之后得到的分区。话虽如此,您还应该记住每个slave可用的插槽数量以及可用内存。但根据经验,您可以使用以下方法:

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

HTH

相关内容

  • 没有找到相关文章

最新更新