我在我的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,似乎默认情况下一次运行一个进程。请告诉我,我错了。
答案 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
,它在一个进程中在本地计算机上运行您的作业。运行作业的其他明显选项是emr
和hadoop
。
通过将跑步者设置为local
$ python myjob.py -r local
这些--jobconf
选项只能被Hadoop识别(即在EMR或Hadoop集群上)。