将多核与 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 作业的其他明显选项是 emr
和 hadoop
。
您可以通过将 运行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
我正在为我的 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 作业的其他明显选项是 emr
和 hadoop
。
您可以通过将 运行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