使用 mongoimport 将数据从 HDFS 导入 MongoDB

Posted

技术标签:

【中文标题】使用 mongoimport 将数据从 HDFS 导入 MongoDB【英文标题】:Import data from HDFS to MongoDB using mongoimport 【发布时间】:2012-03-25 13:26:31 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您尝试过 MongoInsertStorage 吗?

您可以简单地使用 pig 加载数据集,然后使用 MongoInsertStorage 直接转储到 Mongo。它在内部启动了一组映射器,这些映射器完全按照 'David Gruzman's answer on this page 所提到的那样工作。这种方法的一个优点是,由于多个映射器同时插入到 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

【讨论】:

我们可以直接将包含 CSV 的文件夹放入 BIG_DATA 加载中吗?还是我们需要循环它? @user3270763 无需循环【参考方案2】:

您是否将 CSV/JSON 文件存储在 HDFS 中?如果是这样,您只需要某种方式 mapping them to your filesystem 以便您可以将 mongoimport 指向该文件。

或者,除非指定文件,否则 mongoimport 将从标准输入获取输入。

【讨论】:

【参考方案3】:

您可以使用不带 --file 参数的 mongoimport,并从标准输入加载:

hadoop fs -text /path/to/file/in/hdfs/*.csv | mongoimport ...

【讨论】:

【参考方案4】:

如果我们谈论大数据,我会研究可扩展的解决方案。 我们在 HDFS 中有类似的严重数据集(数 TB)的案例。这些数据虽然经过一些转换,但要加载到 Mongo 中。 我们所做的是开发 MapReduce Job,它在数据上运行,每个映射器通过 API 将其拆分的数据插入 mongodb。

【讨论】:

以上是关于使用 mongoimport 将数据从 HDFS 导入 MongoDB的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的流星应用程序数据库中使用 mongoimport?

使用 mongoimport 从 Windows 文件夹批量导入 MongoDB

可以从 Heroku 运行 mongoimport 吗?

如何使用mongoimport导入csv

如何在远程服务器中进行 mongoimport

JSON文件的mongoimport