我正在使用python /mrjob框架来执行mapreduce作业。只有大约4G的数据,我不想经历设置Hadoop或EMR的麻烦。我有一个64核心机器,它需要大约两个小时来处理数据与mrjob。我注意到mrjob为我的工作分配了54个映射器,但似乎一次只运行一个。是否有一种方法可以让mrjob与我的所有cpu内核并行运行所有任务?
我手动更改了任务的数量,但没有起到多大作用。--jobconf mapred.map.tasks=10 --jobconf mapred.reduce.tasks=10
编辑:当我执行作业时,我有-r local,但是,看看代码,似乎一次运行一个进程是默认的。请告诉我我错了。
发布于 2015-07-13 06:06:11
mrjob的本地作业运行程序只是为每个MR阶段生成一个子进程,一个用于映射器,一个用于组合器(可选),另一个用于减速器,并通过管道在它们之间传递数据。它根本不具有任何并行性,所以它永远不会利用您的64个内核。
我的建议是在本地机器上运行hadoop并使用-r hadoop选项提交作业。在您的本地机器上以pseduo分布式模式运行的hadoop集群应该能够利用您的多核。
请参阅这个问题,该问题涉及到这个主题:Hadoop伪分布模式下所有核的充分利用
发布于 2015-07-10 02:57:27
作业的运行程序可以通过带有-r选项的命令行指定。
当您从命令行运行mrjob脚本时,默认的运行模式是inline,它在单个进程中在本地机器上运行作业。运行作业的其他明显选项是emr和hadoop。
通过将运行程序设置为local,可以使作业在本地计算机上并行运行。
$ python myjob.py -r local这些--jobconf选项仅由Hadoop (即在EMR或Hadoop集群上)认可。
https://stackoverflow.com/questions/31181608
复制相似问题