使用mongoimport将数据从HDFS导入MongoDB

时间:2012-03-25 13:26:31

标签: mongodb hadoop apache-pig hdfs mongoimport

我在HDFS上有一组文件。我可以直接将这些文件加载​​到mongoDB(使用mongoimport),而无需将文件从HDFS复制到我的硬盘。

4 个答案:

答案 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中。