我正在尝试传递多个集合作为执行map-reduce hadoop作业的输入。 我发现版本1.2中的MultiCollectionSplitBuilder具有该功能。以下示例发布在github中,这是不起作用任何帮助表示赞赏。
MultiCollectionSplitBuilder mcsb = new MultiCollectionSplitBuilder();
mcsb.add(new MongoURI("mongodb://localhost:27017/mongo_hadoop.yield_historical.in"),
(MongoURI)null, // authuri
true, // notimeout
(DBObject)null, // fields
(DBObject)null, // sort
(DBObject)null, // query
false,
MultiMongoCollectionSplitter.class)
.add(new MongoURI("mongodb://localhost:27017/mongo_hadoop.yield_historical.in"),
(MongoURI)null, // authuri
true, // notimeout
(DBObject)null, // fields
(DBObject)null, // sort
new BasicDBObject("_id", new BasicDBObject("$gt", new Date(883440000000L))),
false, // range query
MultiMongoCollectionSplitter.class);
Configuration conf = new Configuration();
conf.set(MultiMongoCollectionSplitter.MULTI_COLLECTION_CONF_KEY, mcsb.toJSON());
答案 0 :(得分:0)
感谢你指出这个问题。这是一个例子中的错误。已提交HADOOP-109来解决此问题。
我通过将所有输入集合的子拆分器类设为null
来修复此问题。请参阅this pull request。
为了使其正常工作,请确保将以下参数传递给Hadoop:
-D mongo.splitter.class=com.mongodb.hadoop.splitter.MultiMongoCollectionSplitter
以上修复是一种解决方法。为您提供有关该问题的更多详细信息。根据设计,子分割器类可以是除MultiMongoCollectionSplitter
之外的任何分割器类。但是有一个错误HADOOP-110阻止我们这样做。这个问题将在未来版本中尽快解决。