Gae MapReduce. Как отправить почтовый запрос программно - PullRequest
1 голос
/ 13 марта 2012

Я пытаюсь отправить пост-запрос на mapreduce в GAE. Google предоставил

private String generateHtml(String configXml) {
return "<html>"
    + "<body>"
    + "<form action=\"/mapreduce/start\" method=\"POST\">"
    + "<textarea name=\"configuration\" rows=20 cols=80>"
    + configXml
    + "</textarea>"
    + "<input type=\"submit\" value=\"Start\">"
    + "</form>";

}

Как настроить:

 String configString = ConfigurationXmlUtil.convertConfigurationToXml(config);
 String body = "configuration=" + configString;

При этом я получаю исключение нулевого указателя, когда сервер пытается получить параметр «конфигурация»;

Как мне создать запрос, чтобы он был идентичен html-сценарию с textarea?

1 Ответ

3 голосов
/ 13 марта 2012

Вот как я это сделал один раз, используя TaskQueue:

import static com.google.appengine.api.datastore.FetchOptions.Builder.withLimit;
import static com.google.appengine.api.taskqueue.TaskOptions.Builder.withUrl;

import com.google.appengine.api.taskqueue.TaskOptions;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.Mapper;
//... other imports

// mapreduce config
Configuration conf = new Configuration(false);
conf.setClass("mapreduce.map.class", YourMapperClass.class, Mapper.class);
conf.setClass("mapreduce.inputformat.class", DatastoreInputFormat.class, InputFormat.class);

// setup callbacks if you need to know when the job is done.
//conf.set(AppEngineJobContext.DONE_CALLBACK_URL_KEY, "/job-done-callback");

// you can also specify a queue. Defaults to "default" :)
//conf.set(AppEngineJobContext.CONTROLLER_QUEUE_KEY, "mrqueue");
//conf.set(AppEngineJobContext.DONE_CALLBACK_QUEUE_KEY, "mrqueue");
//conf.set(AppEngineJobContext.WORKER_QUEUE_KEY, "mrqueue");


conf.set(DatastoreInputFormat.ENTITY_KIND_KEY, 'YourEntityKind');
String xml = ConfigurationXmlUtil.convertConfigurationToXml(conf);

TaskOptions opts = withUrl("/mapreduce/start")
    .param("configuration", xml)
    .method(TaskOptions.Method.POST)
    .header("X-Requested-With", "XMLHttpRequest");

// use our dedicated dbm4g queue
// this needs to be configured by a user
QueueFactory.getQueue("mrqueue").add(opts);

Я использовал очередь не по умолчанию, чтобы убедиться, что мои задания MapReduce не будут слишком сильно выходить за пределы. Но вы также можете безопасно использовать очередь по умолчанию.

...