【问题标题】:MapReduce: Mrjob Saving Results PersistentlyMapReduce:Mrjob 持久保存结果
【发布时间】:2013-02-06 13:51:47
【问题描述】:

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

【问题讨论】:

    标签: python mapreduce mrjob


    【解决方案1】:

    您可以将多个输入传递给一个作业,只需将前一个作业的输出作为输入。

    当您说要将结果保存到磁盘时,听起来您是在依赖将输出流式传输回标准输出?这种行为只是一种方便(并且可以关闭),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 停止输出返回到标准输出(我在上面的第一步中使用了它,您可能不想要中间结果,但在第二步中省略了它以展示差异) .在您需要三个步骤的情况下,您可以在前两个步骤中省略它,在第三个步骤中保留它。或者,将第三步的输出写入您可以轻松读取的文件夹中。

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

    【讨论】:

    • 如果你使用with job1.make_runner() as runner1: ,那么离开with范围后firstOutput目录不会被清理吗? job2 不应该在 job1 with 语句的范围内吗?参考:pythonhosted.org/mrjob/…
    猜你喜欢
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多