GAE映射器生成“无配额,中止”错误

时间:2010-11-25 04:02:28

标签: google-app-engine

我正在尝试使用此处的映射器框架在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!

没有额外的堆栈跟踪。每次尝试开始工作时,这都会出现大约十几次。

2 个答案:

答案 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