使用 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?