我正在将文档从 MapReduce 作业中的地图插入 MongoDB。为映射提供了一堆字符串,它为每个字符串生成 SHA-1 消息并将它们插入到 MongoDB 中。大约有 4 亿个字符串(从 HDFS 上的文件中读取)。我正在使用 10 个分片和 3 个 mongos,并且没有复制。我在 64 位 Linux 上使用 MongoDB 2.2.0。但是,此 MR 作业没有完成,我在日志中看到以下 2 种类型的异常。
MongoDB 中每个分片的连接太多(大约 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 用户列表,但希望让更广泛的受众检查此问题,因此在此处重新发布。