我正在尝试使用此处的映射器框架在Google应用引擎上设置映射器作业(java版本):http://code.google.com/p/appengine-mapreduce/
我通过以下代码来解决这个问题:
Configuration conf = new Configuration(false);
conf.setClass("mapreduce.map.class", MyMapper.class, Mapper.class);
conf.setClass("mapreduce.inputformat.class", DatastoreInputFormat.class, InputFormat.class);
conf.set(DatastoreInputFormat.ENTITY_KIND_KEY, "Organization");
// Queue up the mapper request.
String configString = ConfigurationXmlUtil.convertConfigurationToXml(conf);
Queue queue = GaeQueueFactory.getQueue(QUEUE_NAME);
queue.add(
Builder.url("/mapreduce/start")
.param("configuration", configString));
我在开发服务器和prod服务器上的日志中收到以下错误:
com.google.appengine.tools.mapreduce.MapReduceServlet processMapper: No quota. Aborting!
没有额外的堆栈跟踪。每次尝试开始工作时,这都会出现大约十几次。
答案 0 :(得分:0)
我认为您没有足够的配额来处理具有预定义默认值的Mapper作业。
尝试降低这些configuration参数:
<强> mapreduce.mapper.inputprocessingrate 强>
所有映射器每秒处理的实体总数
用于防止大量配额在短时间内用完
默认1000
<强> mapreduce.mapper.shardcount 强>
要使用的并发工作人员数量
这也决定了将输入分成
的分片数
默认= 8
答案 1 :(得分:0)
我已经弄明白了这个问题,并且正在录制这个问题。最令我困惑的是,它在几个星期前工作,似乎最近停止了。因为应用程序不在生产环境中使用,所以没有人注意到。
我将地图请求发送到自定义“映射器”任务队列的变化是什么;不是默认任务队列。因为我有几个映射器作业,所以我为所有映射器作业设置了不同的队列:
<queue>
<name>mapper</name>
<rate>5/s</rate>
<bucket-size>10</bucket-size>
</queue>
当我将代码切换回使用默认队列时,一切都按预期工作。我在这里向映射器团队提交了一个错误:http://code.google.com/p/appengine-mapreduce/issues/detail?id=73