我正在尝试使用early experimental release of mapper implementation清空数据存储区。该解决方案是在similar SO question中提出的。
这是我目前正在使用的 AppEngineMapper 。它只是删除实体。
public class EmptyFixesMapper extends AppEngineMapper<Key, Entity, NullWritable, NullWritable> {
public EmptyFixesMapper() {
}
@Override
public void taskSetup(Context context) {
}
@Override
public void taskCleanup(Context context) {
}
@Override
public void setup(Context context) throws IOException, InterruptedException {
super.setup(context);
}
@Override
public void cleanup(Context context) {
getAppEngineContext(context).flush();
}
@Override
public void map(Key key, Entity value, Context context) {
log.warning("Mapping key: " + key);
DatastoreMutationPool mutationPool =
this.getAppEngineContext(context).getMutationPool();
mutationPool.delete(value.getKey());
}
}
这是我的 mapreduce.xml 配置文件:
<configurations>
<configuration name="Empty Entities">
<property>
<name>mapreduce.map.class</name>
<value>com.google.appengine.demos.mapreduce.EmptyFixesMapper</value>
</property>
<property>
<name>mapreduce.inputformat.class</name>
<value>com.google.appengine.tools.mapreduce.DatastoreInputFormat</value>
</property>
<property>
<name human="Entity Kind to Map Over">mapreduce.mapper.inputformat.datastoreinputformat.entitykind</name>
<value template="optional">Fix</value>
</property>
</configuration>
...
当我在mydomain / mapreduce / status中进入 mapreduce控制面板时,我可以启动任务,但它们永远不会完成。这是截图,您可以在其中看到字段“0/0分片”:
我可以看到在 appengine默认任务队列中创建了一些任务,并进行了大量重试:
最后,在我的GAE应用程序日志中,我看到:
1。 09-11 03:23 AM 08.556 / mapreduce / mapperCallback 500 10081ms 0cpu_ms 0kb AppEngine-Google; (+ http://code.google.com/appengine)
0.1.0.2 - - [11/Sep/2010:03:23:18 -0700] "POST
/ mapreduce / mapperCallback HTTP / 1.1“ 500 0 “http://xxx.appspot.com/mapreduce/command/start_job” “AppEngine上,谷歌; (+ http://code.google.com/appengine)” xxx.appspot.com“ms = 10081 cpu_ms = 0 api_cpu_ms = 0 cpm_usd = 0.000057 queue_name =默认 TASK_NAME =工人试图-1284198892815-0001-M-000002-1--0
2。 W 09-11 03:23 AM 18.638
Request was aborted after waiting too long to attempt to service
你的要求。这可能发生 偶尔在App Engine时 服务集群意外 高负荷或不均匀负荷。如果你看到这个 留言频繁,请联系 App Engine团队。
可能会发生什么?我确信我已按照getting started guide中描述的步骤进行操作,数据存储区中的实体数量少于1000个......
答案 0 :(得分:1)
嗯,问题与appengine-mapreduce无关。我正在保护/ mapreduce / ** URI,因此默认任务队列中的任务无法访问/ mapreduce / mapperCallback,/ mapreduce / command / start_job等,因为没有发送用户名/密码信息。
无论如何这是一个有趣的问题,因为我真的不想向所有人开放/ mapreduce / ** ......