2012-03-25 3 views

Répondre

0

Enregistrez-vous des fichiers CSV/JSON dans HDFS? Si oui, vous avez juste besoin d'un moyen de mapping them to your filesystem afin que vous puissiez pointer mongoimport vers le fichier.

Alternativement, mongoimport prendra l'entrée de stdin sauf si un fichier est spécifié.

0

Vous pouvez utiliser mongoimport sans l'argument --file, et la charge de stdin:

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

Si nous parlons de gros volumes de données, je chercherais des solutions évolutives.
Nous avions un cas similaire d'ensemble de données sérieuses (plusieurs téraoctets) dans HDFS. Ces données, bien qu'avec une certaine transformation, devaient être chargées dans Mongo.
Ce que nous avons fait était de développer MapReduce Job qui exécute des données et chaque mappeur insère sa division de données dans mongodb via API.

1

Avez-vous essayé MongoInsertStorage?

Vous pouvez simplement charger l'ensemble de données à l'aide de cochon, puis utiliser MongoInsertStorage pour vider directement dans Mongo. Il lance en interne un groupe de cartographes qui font exactement ce qui est mentionné par la réponse de David Gruzman sur cette page. L'un des avantages de cette approche est le parallélisme et la rapidité que vous obtenez grâce à l'insertion simultanée de plusieurs mappeurs dans la collection Mongo.

Voici une coupe approximative de ce qui peut être fait avec le porc

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('', ''); 

Plus d'informations ici https://github.com/mongodb/mongo-hadoop/tree/master/pig#inserting-directly-into-a-mongodb-collection

+0

Peut-on mettre directement le dossier contenant les CSVs de la charge BIG_DATA? ou avons-nous besoin de le boucler? – user3270763

+1

@ user3270763 pas besoin de boucle – Nerrve

Questions connexes