利用LocalMRJobRunner多核为MRJob

时间:2015-07-02 10:05:01

标签: python 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,似乎默认情况下一次运行一个进程。请告诉我,我错了。

2 个答案:

答案 0 :(得分:3)

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

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

请参阅此问题,该问题涉及该主题:Full utilization of all cores in Hadoop pseudo-distributed mode

答案 1 :(得分:-1)

可以通过命令行使用-r选项指定作业的跑步者。

从命令行运行mrjob脚本时,默认运行模式为inline,它在一个进程中在本地计算机上运行您的作业。运行作业的其他明显选项是emrhadoop

通过将跑步者设置为local

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

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