HDFS に一連のファイルがあります。これらのファイルを HDFS からハードディスクにコピーせずに (mongoimport を使用して) mongoDB に直接ロードできますか?
4 に答える
MongoInsertStorage を試しましたか?
pig を使用してデータセットをロードし、MongoInsertStorage を使用して直接 Mongo にダンプできます。このページの「David Gruzmanの回答」で言及されていることを正確に行う一連のマッパーを内部的に起動します。このアプローチの利点の 1 つは、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 / JSONファイルをHDFSに保存していますか?もしそうなら、mongoimportをファイルにポイントできるように、それらをファイルシステムにマッピングする何らかの方法が必要です。
または、ファイルが指定されていない限り、mongoimportはstdinから入力を受け取ります。
引数なしで mongoimport を使用して--file
、stdin からロードできます。
hadoop fs -text /path/to/file/in/hdfs/*.csv | mongoimport ...
ビッグデータについて話すなら、スケーラブルなソリューションを検討します。
HDFS にある深刻なデータ セット (数テラバイト) の同様のケースがありました。このデータは、いくらか変換されていますが、Mongo にロードする必要がありました。
私たちが行ったことは、データに対して実行される MapReduce ジョブを開発し、各マッパーが API を介してデータの分割を mongodb に挿入することでした。