У меня есть набор файлов на HDFS. Могу ли я напрямую загружать эти файлы в mongoDB (используя mongoimport) без копирования файлов с HDFS на мой жесткий диск.Импорт данных из HDFS в MongoDB с использованием mongoimport
ответ
Вы храните файлы CSV/JSON в HDFS? Если это так, вам просто нужен способ mapping them to your filesystem, чтобы вы могли указать mongoimport в файл.
В качестве альтернативы mongoimport будет принимать данные от stdin, если не указан файл.
Вы можете использовать mongoimport без --file
аргумента, и нагрузки от стандартного ввода:
hadoop fs -text /path/to/file/in/hdfs/*.csv | mongoimport ...
Если мы говорим о большом данном я бы заглянуть в масштабируемые решения.
У нас был аналогичный случай с серьезным набором данных (несколько терабайт), сидящим в HDFS. Эти данные, хотя и с некоторой трансформацией, должны были быть загружены в Монго.
Мы разработали MapReduce Job, которые запускают данные, и каждый картограф вставляет свой раздел данных в mongodb через API.
Вы пробовали MongoInsertStorage?
Вы можете просто загрузить набор данных с помощью свиньи, а затем использовать MongoInsertStorage для сбрасывания непосредственно в Mongo. Он внутренне запускает кучу картографов, которые делают именно то, что упоминается в ответе Дэвида Грузмана на этой странице. Одним из преимуществ этого подхода является параллелизм и скорость, которую вы достигаете благодаря одновременному введению нескольких монстров в коллекцию 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
@ user3270763 нет необходимости в цикле – Nerrve