【发布时间】:2014-05-15 15:50:33
【问题描述】:
我在 Ubuntu 12.10(最新)上使用 Riak 2.0.0b1。这是一个开发者盒子,所以我只有一个 Riak 实例 - 没有集群等。
我已将大约 100k JSON 文档(每个大约 300 字节)放入一个存储桶中,现在正尝试对其进行 mapreduce。数据是随机的,我在其中一个键上也有 2i 索引,它基本上将数据集分成 10 个几乎均匀的部分,大约 10k 个文档。
此查询按预期工作:
curl -XPOST -d'{
"inputs": {"bucket": "bucket", "index": "idx_bin", "key": "10"},
"query": [
{
"map": {
"language": "javascript",
"source": "Riak.mapValuesJson"
}
}
]
}' http://localhost:8080/mapred -H 'Content-Type: application/json' | python -m json.tool | egrep '^ {4}\{' | wc -l
9974
得到了大约 10k 个结果。现在,如果我想在 reduce 步骤中做某事,我会得到一个没有意义的答案:
curl -XPOST -d'{
"inputs": {"bucket": "bucket", "index": "idx_bin", "key": "10"},
"query": [
{
"map": {
"language": "javascript",
"source": "Riak.mapValuesJson"
}
},
{
"reduce": {
"language": "javascript",
"source": "function(o) { return [o.length] }"
}
}
]
}' http://localhost:8080/mapred -H 'Content-Type: application/json' | python -m json.tool
[
15
]
如果我达到了一些(未记录的)限制或对象的完整列表,而不是 15,我希望在这里看到一个错误。(这个数字在运行之间会有所不同;有时还有更多。)我去了到配置并完成此操作:
javascript.map_pool_size = 64
javascript.reduce_pool_size = 64
javascript.maximum_stack_size = 32MB
javascript.maximum_heap_size = 64MB
根本没有帮助。
发生了什么以及如何在reduce阶段获取所有对象?
【问题讨论】: