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