【问题标题】:How to run appengine mapreduce jobs in a module?如何在模块中运行 appengine mapreduce 作业?
【发布时间】:2013-09-21 06:10:35
【问题描述】:

我一直在审查 appengine 中的新“Modules API”,并尝试以一种方式组织应用程序,使最苛刻的任务通过 dispatch.yaml 路由到通过模块配置更强大的实例。

但是,当尝试在调度程序中配置“/mapreduce/” uri时,它们似乎从未在正确的模块中运行,它们总是在默认模块中运行。

调度程序如下所示:

application: simple-sample
dispatch:
  - url: "*/mapreduce/*"
    module: bigger-instance

  - url: "*/_ah/pipeline/*"
    module: bigger-instance

模块被定义为文档状态,app.yaml 中的默认值和 bigger-instance.yaml 中的更大实例包含 mapreduce 处理程序条目,但到目前为止,每个 mapreduce/* 进程根据日志在默认处理程序中执行,得到404,因为处理程序是在其他地方定义的。

有什么想法吗?

【问题讨论】:

    标签: python google-app-engine mapreduce


    【解决方案1】:

    最简单的选项是设置 mapreduce 管道的 target 属性。

    pipeline = mapreduce.mapreduce_pipeline.MapreducePipeline( ... )
    pipeline.with_params(target="version-dot-module")
    pipeline.start()
    

    target 被传递到任务队列并覆盖您遇到的任务队列default routing。如果指定模块没有匹配的版本,则使用该模块的默认版本。您可以只指定"version",在这种情况下应用默认模块。指定不存在的模块将针对默认模块的默认版本,即使默认模块有匹配的版本。


    也可以为选定的任务队列定义一个目标,然后将您的管道路由到该队列。这种方法的局限性在于路由适用于调用代码的所有版本,但将路由详细信息保存在 yaml 文件中而不是代码库中也许是有好处的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多