Mapreduce,MR-IncrementalTask​​,ApiProxy $ RequestTooLargeException

时间:2013-10-15 16:20:48

标签: java google-app-engine mapreduce

在app引擎的java实例中,我使用mapreduce进行迭代 一组实体进行一些总结。

当我使用10个分片运行时,我得到了很多这些:

/mapreduce/workerCallback
com.google.apphosting.api.ApiProxy$RequestTooLargeException: 
The request to API call datastore_v3.Put() was too large.

我的映射器正在尝试处理大约70,000个实体,每个实体大约750个字节。 对于每次调用我的映射器,我可能会进行几十次数据存储读取,也许两次 数据存储更新。

我确定我的个人实体远不及1MB的数据存储限制。 运行更多分片并没有多大帮助。

我注意到mapreduce添加了一些实体类型,其中一个是MR-IncrementalTask​​。 当出现这些错误时,MR-IncrementalTask​​实体变大,如800k或900k。 我怀疑这些错误与这些错误有关。

那么,那么,为什么这些变得如此之大,我可能会做些什么 那有助于此吗?

感谢所有人。

1 个答案:

答案 0 :(得分:0)

您是正确的,mapper类被序列化并在任务队列执行任务之间写入数据存储区。这为映射器的任何成员变量提供了连续性,这些变量在运行时进行了更新。

减少与此数据相关的问题变大,并降低开销或读取和写入数据。较新版本的MapReduce会压缩此状态。