2013-08-27 4 views
0

J'ai des enregistrements de 1,2M à ma base de données MongoDB. Et je veux stocker toutes ces données à HBase par programme. Fondamentalement, j'essaie de mettre chaque enregistrement récupéré à HBase dans une boucle. Après l'opération est terminée, j'ai obtenu seulement 39912 enregistrements sur HBase.HBase ne stocke pas tous les enregistrements

Voici ce que j'ai essayé:

Configuration config = HBaseConfiguration.create(); 
String tableName = "storedtweet"; 
String familyName = "msg"; 
String qualifierName = "msg"; 
HTable table = new HTable(config, tableName); 
// using Spring Data MongoDB to interact with MongoDB 
List <StoredTweet> storedTweetList = mongoDAO.getMongoTemplate().findAll(StoredTweet.class); 
for (StoredTweet storedTweet: storedTweetList) { 
    Put p = new Put(Bytes.toBytes(storedTweet.getTweetId())); 
    p.add(Bytes.toBytes(familyName), Bytes.toBytes(qualifierName), Bytes.toBytes(storedTweet.getMsg())); 
    table.put(p); 
    table.flushCommits(); 
} 
+1

Pouvez-vous vérifier si certains enregistrements ont le même identifiant de tweet? Si c'est le cas, l'enregistrement suivant remplacera le précédent. – zsxwing

+0

je vous remercie beaucoup @zsxwing, je pensais peut-être qu'il peut encore insérer des enregistrements malgré la duplication. Ce serait mieux si vous publiez ce commentaire comme réponse pour guider les autres. Ensuite, je vais le marquer comme "réponse de question". – talha06

Répondre

2

Si une clé de ligne existe et vous le mettez à nouveau, HBase Put remplacera l'ancien. Je pense qu'il y a des enregistrements ayant le même identifiant de tweet (vous le définissez sur la touche de ligne) dans vos données. C'est pourquoi certains enregistrements disparaissent.

Questions connexes