1

我使用 spark mongo-connector 将数据从 mongodb 集合同步到 hdfs 文件,如果通过 mongos 读取集合,我的代码可以正常工作,但是当涉及到 local.oplog.rs 时,只能通过 mongod 读取副本集合,它给了我例外:

原因:com.mongodb.hadoop.splitter.SplitFailedException:无法计算输入拆分:找不到索引拆分键{_id:1}

我认为oplog.rs和普通collection的数据结构不同,oplog.rs没有“_id”属性,所以newAPIHadoopRDD不能正常工作,是吗?

4

1 回答 1

0

是的,oplog.rs 中的文档结构有点不同。您将在 oplog 文档的“o”字段中找到您的实际文档。

示例 oplog 文档:

{
"_id" : ObjectId("586e74b70dec07dc3e901d5f"),
"ts" : Timestamp(1459500301, 6436),
"h" : NumberLong("5511242317261841397"),
"v" : 2,
"op" : "i",
"ns" : "urDB.urCollection",
"o" : {
    "_id" : ObjectId("567ba035e4b01052437cbb27"),
      .... 
     .... this is your original document.

      }

}

使用 oplog.rs 的“ns”和“o”来获取您期望的集合和文档。

于 2017-01-27T06:01:19.230 回答