Я пытаюсь использовать ранний экспериментальный выпуск реализации mapper для очистки хранилища данных. Это решение было предложено в аналогичном вопросе SO .
Это 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>
...
Когда я вхожу в панель управления mapreduce в mydomain / mapreduce / status, я могу запускать задачи, но они никогда не завершаются. Это скриншот, где вы можете увидеть поле "0/0 осколков":
И я вижу, что некоторые задачи создаются в очереди задач по умолчанию appengine , с большим количеством попыток:
Наконец, в журналах приложений GAE я вижу:
1.
09-11 03:23 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-Google;
(+ 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-м-000002-1--0
2.
Вт 09-11 03:23 18.638
Request was aborted after waiting too long to attempt to service
ваш запрос. Это может случиться
время от времени, когда App Engine
обслуживающий кластер неожиданно
высокая или неравномерная нагрузка. Если вы видите это
сообщение часто, пожалуйста, свяжитесь с
Команда App Engine.
Что может происходить? Я уверен, что выполнил шаги, описанные в руководстве по началу работы , и у меня в хранилище данных менее 1000 объектов ...