将mongodb与hadoop结合使用时出现异常

7dl7o3gd  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(379)

我将从mapreduce作业中的Map向mongodb插入文档。一组字符串被提供给map,它为每个字符串生成sha-1消息,并将它们插入mongodb。大约有4亿个字符串(从hdfs上的文件读取)。我使用10个碎片和3个mongos,没有复制。我在64位linux上使用mongodb 2.2.0。但是,这个mr作业没有完成,我在日志中看到以下两种类型的异常。
到mongodb中每个shard的连接太多(大约250个连接)。我在日志中看到以下异常

com.mongodb.DBTCPConnector fetchMaxBsonObjectSize                                                                                                                                 
WARNING: Exception determining maxBSONObjectSize                                                                                                                                                          
java.net.SocketException: Connection reset
``` `Task attempt_*****failed to report status for 600 seconds. Killing!` 集群中有16个节点,任何时候都有256个map任务在运行(在hadoop日志中注意到)。
我四处搜索第一个错误/异常,有人提到mongodb的每个主机的连接数必须增加。我使用mongooptions类将其从10个增加到20个,并在初始化mongos示例时提供了这一点。但这并没有解决问题——这就是例外的原因吗?
我正在map()的configure()方法中创建一个mongo示例,并在close()中关闭它。有没有更好的方法来创建mongo示例?
有人在使用hadoop+mongodb组合时遇到过这些错误吗?在使用这个组合时,我还有什么需要注意的吗?
ps:我把这个问题发布到mongodb用户列表上,但是想让更多的人来检查这个问题,所以把它重新发布到这里。
toe95027

toe950271#

检查主机上ulimit-n的值。听起来您的计算机可能达到了文件描述符的限制。
不过,一般来说,在mapreduce作业期间使用驱动程序连接在mongo中存储文档是一种反模式。最好让mapreduce输出只生成包含所需数据的文档,而不是尝试创建到mongo的附加连接并在带外写入更多数据。

相关问题