我在HDFS上有一组文件。我可以直接将这些文件加载到mongoDB(使用mongoimport),而无需将文件从HDFS复制到我的硬盘。
答案 0 :(得分:1)
你试过MongoInsertStorage吗?
您可以使用pig加载数据集,然后使用MongoInsertStorage直接转储到Mongo。它在内部启动了一系列映射器,完全符合'David Gruzman在本页面上的回答。这种方法的优点之一是由于多个映射器同时插入Mongo集合而实现的并行性和速度。
以下是对猪可以做什么的粗略描述
REGISTER mongo-java-driver.jar
REGISTER mongo-hadoop-core.jar
REGISTER mongo-hadoop-pig.jar
DEFINE MongoInsertStorage com.mongodb.hadoop.pig.MongoInsertStorage();
-- you need this here since multiple mappers could spawn with the same
-- data set and write duplicate records into the collection
SET mapreduce.reduce.speculative false
-- or some equivalent loader
BIG_DATA = LOAD '/the/path/to/your/data' using PigStorage('\t');
STORE BIG_DATA INTO 'mongodb://hostname:27017/db USING MongoInsertStorage('', '');
此处提供更多信息 https://github.com/mongodb/mongo-hadoop/tree/master/pig#inserting-directly-into-a-mongodb-collection
答案 1 :(得分:0)
您是否将CSV / JSON文件存储在HDFS中?如果是这样,您只需要mapping them to your filesystem的某种方式,这样您就可以将mongoimport指向该文件。
除非指定了文件,否则mongoimport将从stdin获取输入。
答案 2 :(得分:0)
你可以在没有--file
参数的情况下使用mongoimport,并从stdin加载:
hadoop fs -text /path/to/file/in/hdfs/*.csv | mongoimport ...
答案 3 :(得分:0)
如果我们谈论大数据,我会研究可扩展的解决方案。
我们在HDFS中有类似的严重数据集(几TB)。这个数据虽然有一些转换,但是要加载到Mongo中。
我们所做的是开发运行数据的MapReduce Job,每个映射器通过API将其数据分割插入到mongodb中。