我想在一台机器上运行mapreduce任务,我想使用机器的所有内核。哪种方法最好?如果我在伪分布式模式下安装 Hadoop,可以使用所有内核吗?
您可以使用属性 mapred.tasktracker.map.tasks.maximum 和 mapred.tasktracker.reduce.tasks.max 来增加在 TaskTracker 上同时生成的映射器/化简器的数量,具体取决于您的硬件规格。默认情况下,它设置为 2,因此在给定实例上最多运行 2 个映射和 2 个化简。但是,要记住的一件事是,如果你的输入非常小,那么框架将决定不值得并行执行。在这种情况下,您需要通过mapred.max.split.size调整默认拆分大小来处理它。
话虽如此,根据我的个人经验,我注意到MR作业通常是I/O(有时可能是内存)绑定的。因此,CPU在正常情况下并没有真正成为瓶颈。因此,您可能会发现很难一次充分利用一台计算机上的所有内核来完成作业。
我建议设计一些策略来确定映射器/化简器的适当数量,以有效地执行处理,以确保您正确利用CPU,因为映射器/化简器在每个节点上占用插槽。一种方法是将内核数乘以 .75,然后根据需要设置映射器和化简器的数量。例如,您有 12 个物理核心或 24 个虚拟核心,那么您可以有 24*.75 = 18 个插槽。现在,根据您的需求,您可以决定是否使用9Mappers+9Reducers或12Mappers+6Reducers或其他东西。
我重新发布了这个问题的答案:多核机器上的Hadoop和map-reduce。
对于Apache Hadoop 2.7.3,我的经验是,启用YARN也将实现多核支持。以下是在单个节点上启用 YARN 的简单指南:
https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/SingleCluster.html#YARN_on_a_Single_Node
默认配置似乎运行良好。如果你想调整你的核心用法,那么也许可以考虑在yarn-site中设置"yarn.scheduler.minimum-allocation-vcores"和"yarn.scheduler.maximum-allocation-vcores".xml(https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-common/yarn-default.xml)
此外,有关如何配置具有多核支持的简单 Hadoop 沙箱的说明,请参阅此处:https://bitbucket.org/aperezrathke/hadoop-aee