Wol*_*old 6 mapreduce mongodb mongoid mongoid3
我正在使用Mongoid 3.0编写map/reduce操作.我正在尝试使用该print
语句来调试JS函数.这是来自MongoDB文档的疑难解答建议,例如:
reduce = %Q{
function(user_id, timestamps) {
var max = 0;
timestamps.forEach(function(t) {
var diff = t.started_at - t.attempted_at;
if (diff > max) { max = diff; }
});
print(user_id + ', ' + max);
return max;
};
}
MyCollection.all.map_reduce(map, reduce).to_a
Run Code Online (Sandbox Code Playgroud)
不幸的是,print
语句的输出既没有显示在控制台上也没有显示在日志上 - 似乎在DB,驱动程序,Moped或任何中间层之间的某处被抑制.有没有办法打开它?
Wol*_*old 13
事实证明,print
语句日志是MongoDB服务器日志.在OSX上,就是这样/usr/local/var/log/mongodb/mongo.log
Sim*_*Sim 11
根据海报的评论,第一步是确保您正在查看mongod
服务器日志.在本地执行此操作的最简单方法是访问鲜为人知的HTTP接口mongod
:http://localhost:28017
.即使服务器未安装在其默认位置,这也将起作用,因此,日志将不在默认的OS特定位置,例如,/usr/local/var/log/mongodb/mongo.log
在Mac OS X上.请参阅文档以了解如何以非标准方式访问此服务器部署环境.
如果这不能解决您的问题,您将不得不深入调试MongoDB M/R,这有点棘手,原因如下:
以下是基于我们在生产中广泛使用Mongo M/R的建议:
提高日志记录级别
突然之间,一些以前看不见的print
输出会出现.一次做一级,直到你开始看到它.
use admin
db.runCommand( { setParameter: 1, logLevel: 2 } )
Run Code Online (Sandbox Code Playgroud)
日志级别从0到5不等.请参阅setParameter.您也可以在服务器启动时使用-v,-vv,..., - vvvvv执行此操作.
将分析级别增加到max(2)
我发现这很有用,特别是当与高日志级别结合使用时,因为它提供了可以通过编程方式检查的数据耗尽(分析集合).查看文档.
如果您正在运行非常大的M/R作业,这可能会对性能产生负面影响.
Piggyback通过M/R调试输出
这个想法很简单:添加一个对象数组,其中包含你需要的任何调试信息,比如在_debug
字段中,对所有发出的文档和过滤器+连接,如你认为适合在reduce阶段.这样,_debug
数组将最终出现在输出集合中.如果您想快速找到特定问题,甚至可以将它们编入索引.
希望这可以帮助.祝好运!
归档时间: |
|
查看次数: |
7191 次 |
最近记录: |