1

我正在使用 mapreduce,当它们不在数据存储区中时,我需要保留一些实体。我将新实体添加到DatastoreMutationPool中 ,以便这些实体可以通过批处理调用进行持久化。当 mapreduce 结束时,将调用回调函数。回调函数将使用其中一些实体。我的问题是,在调用回调函数之前,它们的所有实体是否都会刷新到数据存储区,或者它们仍然可以在 DatastoreMutationPool 中但不在数据存储区中。

谢谢。

映射器示例:

public class MyMapper extends AppEngineMapper<Key, Entity, NullWritable, NullWritable> {
     @Override
     public void map(Key key, Entity value, Context context) {
         ...
         DatastoreMutationPool mutationPool = this.getAppEngineContext(context).getMutationPool();
     mutationPool.put(entity);
     }
}

回调示例:

@RequestMapping(value="/callback/function",method=RequestMethod.POST)
public void callback(@RequestParam("job_id") String jobIdName){
    JobID jobId = JobID.forName(jobIdName);
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    //search for some entities persisted in the mapper
    ...
}
4

1 回答 1

2

突变池是每个映射器的,而一旦 mapreduce 完成,回调就会在映射器之外运行。因此,您可以预期在您的回调运行时所有突变池都将被刷新。

于 2011-03-22T01:41:59.860 回答