将多核与 LocalMRJobRunner 用于 MRJob

Utilize multi-core with LocalMRJobRunner for MRJob

我正在为我的 mapreduce 作业使用 python yelp/mrjob 框架。只有大约4G的数据,我不想经历设置Hadoop或EMR的麻烦。我有一台 64 核机器,用 mrjob 处理数据大约需要 2 个小时。我注意到 mrjob 为我的工作分配了 54 个映射器,但似乎 运行 一次只分配一个。有没有办法让 mrjob 运行 所有任务与我所有 cpu 核心并行?

我手动更改了任务数量,但没有太大帮助。 --jobconf mapred.map.tasks=10 --jobconf mapred.reduce.tasks=10

编辑: 我在执行作业时有 -r local,但是,查看 code,它似乎默认为一次 运行 一个进程。请告诉我我错了。

作业的 运行ner 可以通过带有 -r 选项的命令行指定。

当您从命令行运行一个mrjob脚本时,默认的运行模式是inline,这运行是您在本地的工作机器在一个单一的过程中。 运行ning 作业的其他明显选项是 emrhadoop

您可以通过将 运行ner 设置为 local

在本地计算机上并行执行作业 运行
$ python myjob.py -r local

那些 --jobconf 选项只能被 Hadoop 识别(即在 EMR 或 Hadoop 集群上)。

mrjob 的本地作业 运行ner 只为每个 MR 阶段生成一个子进程,一个用于映射器,一个用于组合器(可选),一个用于缩减器,并在它们之间传递数据通过管道。它根本没有设计为具有任何并行性,因此它永远不会利用您的 64 核。

我的建议是 运行 在您的本地计算机上使用 hadoop 并使用 -r hadoop 选项提交作业。以伪分布式模式在本地计算机上运行的 hadoop 集群 运行 应该能够利用多核。

查看解决该主题的问题:Full utilization of all cores in Hadoop pseudo-distributed mode