我在 HDFS 上有一组文件。我可以直接将这些文件加载到 mongoDB(使用 mongoimport)而不将文件从 HDFS 复制到我的硬盘吗?
4 回答
你试过 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
您可以使用不带参数的 mongoimport --file
,并从标准输入加载:
hadoop fs -text /path/to/file/in/hdfs/*.csv | mongoimport ...
如果我们谈论大数据,我会研究可扩展的解决方案。
我们在 HDFS 中有类似的严重数据集(数 TB)的案例。这些数据虽然经过一些转换,但要加载到 Mongo 中。
我们所做的是开发 MapReduce Job,它在数据上运行,每个映射器通过 API 将其数据拆分插入 mongodb。
您是否将 CSV/JSON 文件存储在 HDFS 中?如果是这样,您只需要某种方式将它们映射到您的文件系统,这样您就可以将 mongoimport 指向该文件。
或者,除非指定了文件,否则 mongoimport 将从标准输入获取输入。