我正在使用mapreduce,当我们不在数据存储区中时,我需要保留一些实体。我将新实体添加到 DatastoreMutationPool ,以便可以使用批量调用来保留这些实体。当mapreduce结束时,将调用回调函数。回调函数将使用其中一些实体。我的问题是,在调用回调函数之前,是否所有实体都会被刷新到数据存储区,或者它们仍然可以在DatastoreMutationPool中但不在数据存储区中。
感谢。
mapper示例:
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
...
}
答案 0 :(得分:2)
变异池是per-mapper,而mapreduce完成后,回调将在映射器外部运行。因此,您可以预期,在回调运行时,所有突变池都将被刷新。