从计算引擎

时间:2015-04-28 18:43:48

标签: google-app-engine mapreduce google-compute-engine google-cloud-datastore

有没有办法从计算引擎服务器安排AppEngine mapreduce?

我有在AppEngine上运行的生产应用程序,我想要做的是启动MapReduce作业并从计算引擎实例跟踪它们的状态,一旦MR作业完成,在计算上做一些额外的工作引擎实例。

我在网上做了一些搜索,找不到很多类似的故事。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果用python代码包装mapreduce作业,可以创建一个触发mapreduce的servlet。

from mapreduce import control
class ComputeMRHandler(webapp2.RequestHandler):
    def get(self):
        control.start_map(
            name='Mapreduce Name',
            reader_spec='mapreduce.input_readers.DatastoreInputReader',
            handler_spec='my_mapper_function',
            mapper_parameters={'entity_kind': 'my_datastore.DataRecord'},
        )

然后通过Web请求调用上面的处理程序到你的GAE服务器。

最后做的事情有点困难。您可以在计算引擎上写一些内容来轮询GAE应用程序,等待它完成。

或者你可以探索"管道"库https://github.com/GoogleCloudPlatform/appengine-pipelines,它允许您对一系列操作进行排序(即运行mapreduce,然后运行"完成"代码块)。要做到这一点,你应该真正理解管道,但代码基本上是:

class MyCompletionHandlerPipeline(fixed_pipelines.Pipeline):
    def run(self, results):
        # Request some handler on your GCE instance that tells it:
        # "hey we're done, go process your extra work now"
        pass

class MapreduceAndCompletionPipeline(fixed_pipelines.Pipeline):
    def run(self):
        results = yield MyMapReducePipeline(parameters)
        # the dependency on results ensures it runs after MyMapReducePipeline
        yield MyCompletionHandlerPipeline(results)