MapReduce:Mrjob持续保存结果

时间:2013-02-06 13:51:48

标签: python mapreduce mrjob

我正在尝试使用三个步骤实现mapreduce作业,并且在每个步骤之后我需要来自所有步骤的数据到目前为止。有没有人有关于如何在mrjob中将mapper或redurs的结果保存到磁盘的示例/想法?

1 个答案:

答案 0 :(得分:1)

您可以将多个输入传递到作业中,只需将上一个作业的输出作为输入即可。

当您说要将结果保存到磁盘时,听起来您依赖于输出回流到stdout?这种行为只是一种便利(并且可以关闭),MRJob的一切都会从磁盘上反弹。

对于两阶段工作,你可以这样做:

job1 = firstMR(['-r', mode, inputDir, '-o', outputDir, '--no-output']) 
job1.set_up_logging()
with job1.make_runner() as runner1: 
    runner1.run() 
    firstOutput = runner1.get_output_dir()

job2 = secondMR(['-r', mode, firstOutput, anyOtherInput, '-o', finalOutputDir, '--no-output']) 
job2.set_up_logging()
with job2.make_runner() as runner2: 
    runner2.run() 

要注意的事项:

  • 在hadoop上运行,所有目录应该是hdfs:// some / path /
  • MapReduce中任何不是标志且不以选项开头的参数都被视为输入文件或目录
  • 使用--no-output来停止在stdout上返回的输出(我在上面的第一步中使用它,你可能不想要中间结果,但是在第二步中将它留在了以显示差异) 。在你需要三个步骤的情况下,你可以将它留在前两个,而在第三个。或者,将第三步的输出写入您可以轻松读回的文件夹中。

如果你遇到任何障碍,请告诉我,它应该相对简单。