Mapreduce 每个贴图都有自己的线程吗?

Mapreduce 每个贴图都有自己的线程吗?,mapreduce,Mapreduce,每个贴图都有自己的线程吗?所以,当我们进行拆分时,我们应该将任务拆分为尽可能多的Map函数,因为我们有可用的处理器?或者,除了线程之外,还有其他方法可以并行运行map函数?我想您是在谈论hadoop mapreduce实现。另外,我想你说的是核心工作量 对于简介,给定作业的映射任务数是从输入数据拆分的数量推导而来的。然后,这些任务被调度到启动映射程序的任务节点,每个节点最多可调度到mapred.tasktracker.map.tasks.maximum。对于不同的节点,该配置参数可能不同,例如在

每个贴图都有自己的线程吗?所以,当我们进行拆分时,我们应该将任务拆分为尽可能多的Map函数,因为我们有可用的处理器?或者,除了线程之外,还有其他方法可以并行运行map函数?

我想您是在谈论hadoop mapreduce实现。另外,我想你说的是核心工作量

对于简介,给定作业的映射任务数是从输入数据拆分的数量推导而来的。然后,这些任务被调度到启动映射程序的任务节点,每个节点最多可调度到
mapred.tasktracker.map.tasks.maximum
。对于不同的节点,该配置参数可能不同,例如在计算能力不同的情况下。我将从我的另一个答案中添加一个示例,以便:

默认情况下,在不同的JVM中运行,并且可以有多个JVM在节点上的任何特定实例上运行,最多为
mapred.tasktracker.map.tasks.max
。这些JVM是为每个起始映射任务重新创建的,也可以是 连续几次。不会深入讨论细节,但由于内存碎片和JVM安装开销之间的权衡,此设置也会影响性能

继续回答您的问题,运行JVM加载的内核数量由底层操作系统控制,底层操作系统会平衡负载并优化计算。如果可能的话,可以预期不同的JVM将在不同的内核上执行。在一般情况下,如果映射器的数量超过了内核的数量,则可能会导致性能下降。我歪曲了后者不正确的用例

例如:

假设您已将作业拆分为100个映射任务,将在2个任务节点上运行,每个任务节点有2个cpu单元,
mapred.tasktracker.map.tasks.maximum
等于2。然后,在大多数情况下(除非等待映射程序启动),100个元素的任务将在给定时间执行4次,从而(平均)每个节点完成50个任务

最后,但并非最不重要。对于mapper任务,通常不将CPU作为瓶颈,而是将IO作为瓶颈。在这种情况下,使用许多小型CPU机器与使用少量大型CPU的服务器相比,获得更好的结果并不少见