利用多核与LocalMRJobRunner for MRJob

2024-05-23 18:58:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 数据hadoop机器框架作业经历tasks小时
2条回答

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

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

请看这个问题,它涉及到这个主题:Full utilization of all cores in Hadoop pseudo-distributed mode

可以通过命令行使用-r选项指定作业的运行器。在

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

通过将运行器设置为local,可以使作业在本地计算机上并行运行

$ python myjob.py -r local

这些 jobconf选项仅由Hadoop识别(即在EMR或Hadoop集群上)。在

相关问题 更多 >