我在使用MRJob的8核机器上运行MapReduce作业。我使用Python API编写它,然后将其作为
运行$ python main.py -r local files/input*
该文件夹中有大约750个输入文件,当我以这种方式运行时,我相信mrjob会启动与输入文件一样多的映射器进程。即使机器有8芯,我也看到负载平均为
load average: 551.26, 553.29, 556.82
是不是有办法限制地图制作者的数量,所以它一次只启动8个(或16个)?我无法为此找到配置选项,这表明我在某处做错了什么?
谢谢!
修改
这是我的MRjob任务的粗略轮廓。
from mrjob.job import MRJob
from mrjob.step import MRStep
class MyMR(MRJob):
def mapper_xml_init(self):
self.abuf = ""
def mapper_xml(self, _, line):
self.abuf += line.strip()
# ... work with self.abuf
if acondition:
self.abuf = ""
def reducer_mean(self, _, values):
# process some stuff
def steps(self):
return [
MRStep(mapper_init=self.mapper_xml_init,
mapper=self.mapper_xml),
MRStep(reducer=self.reducer_mean),
]
if __name__ == '__main__':
MyMR.run()