我将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,似乎默认一次运行一个进程。请告诉我我错了。在
mrjob的本地作业运行器只为每个MR阶段生成一个子进程,一个子进程用于映射器,一个用于合并器(可选),一个用于reducer,并通过管道在它们之间传递数据。它的设计根本没有任何并行性,所以它永远不会利用64核的优势。在
我的建议是在本地机器上运行hadoop并使用
-r hadoop
选项提交作业。在本地机器上以psedoo分布式模式运行的hadoop集群应该能够利用您的多个核心。在请看这个问题,它涉及到这个主题:Full utilization of all cores in Hadoop pseudo-distributed mode
可以通过命令行使用
-r
选项指定作业的运行器。在当您从命令行运行}。在
mrjob
脚本时,默认的运行模式是inline
,它在一个进程中在本地计算机上运行您的作业。运行作业的其他明显选项是emr
和{通过将运行器设置为
local
,可以使作业在本地计算机上并行运行这些
jobconf
选项仅由Hadoop识别(即在EMR或Hadoop集群上)。在相关问题 更多 >
编程相关推荐