comment créer une copie d'une table dans le même cluster HBase? ou, comment servir les requêtes à l'aide de l'état d'origine tout en opérant sur un état de fonctionnement

voix
3

Y at-il un moyen efficace de créer une copie de la structure de table + données HBase, dans le même groupe? Il est évident que la table de destination aurait un nom différent. Ce que j'ai trouvé à ce jour:

  1. Le travail CopyTable, qui a été décrit comme un outil pour copier des données entre différentes grappes Hbase. Je pense qu'il soutiendrait l' opération intra-groupe, mais ont aucune connaissance s'il a été conçu pour gérer efficacement ce scénario.

  2. Les emplois à l'exportation + importation. Faire cela ressemble à un hack, mais depuis que je suis nouveau à HBase peut-être que cela pourrait être une vraie solution?

Certains d'entre vous demandez peut-être pourquoi je suis en train de le faire. Mon scénario est que j'ai des millions d'objets que je besoin d'accéder à, dans un état « instantané » si vous voulez. Il existe un processus batch qui fonctionne tous les jours qui met à jour un grand nombre de ces objets. Si une étape de ce processus par lots échoue, je dois être en mesure de « faire reculer » à l'état d'origine. Non seulement cela, au cours du processus de traitement par lots, je dois être en mesure de répondre à des demandes à l'état d'origine.

Par conséquent, le flux de courant est que dupliquer la table d'origine à une copie de travail, continuer à servir les requêtes en utilisant la table d'origine alors que je mets à jour la copie de travail. Si le traitement par lots se termine avec succès, je préviens tous mes services à utiliser la nouvelle table, sinon je jette juste la nouvelle table.

Cela a bien fonctionné en utilisant BDB mais je suis dans un tout nouveau monde de données vraiment grand maintenant, je pourrais donc être fait fausse route. Si quelqu'un a des suggestions de motifs que je devrais utiliser, ils sont plutôt plus que bienvenus. :-)

Créé 17/08/2010 à 17:16
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Toutes les données HBase a un certain horodatage. Vous pouvez faire lit (Gets et Scans) avec un paramètre indiquant que vous voulez la dernière version des données d'un horodatage donné. Une chose que vous pourriez faire serait de faire est de votre lit au serveur vos requêtes à l'aide de ce paramètre indiquant un temps avant que le processus de traitement par lots commence. Une fois le lot terminé, bump votre horodatage de lecture jusqu'à l'état actuel.

Un couple de choses à faire attention, si vous prenez cette approche:

  • tables Hbase sont configurés pour stocker les versions les plus récentes N d'une cellule donnée. Si vous écrasez les données dans la cellule avec N valeurs nouvelles, alors vous perdrez la valeur plus pendant le compactage suivant. (Vous pouvez également les configurer pour un TTL expirer les cellules, mais cela ne semble pas tout à fait comme elle correspond à votre cas).
  • De même, si vous supprimez les données dans le cadre de votre processus, alors vous ne serez pas en mesure de le lire après le compactage suivant.

Donc, si vous ne émettez supprime dans le cadre de votre processus de traitement par lots, et vous ne pas écrire plus de versions les mêmes données qui existe déjà dans votre table que vous avez configuré pour enregistrer, vous pouvez continuer à servir de vieilles demandes en de la même table que vous mettez à jour. Cela vous donne effectivement un instantané.

Créé 27/08/2010 à 23:01
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more