J'ai besoin d'obtenir des données basées sur la plage de temps. Y at-il un moyen de partitionner la table hbase en fonction de la plage de temps. Ex: Je veux que les données disent de 9h00 à 9h05.La table Hbase peut-elle être partitionnée en fonction du temps?
Répondre
Vous pouvez définir l'horodatage comme la première partie de votre clé. Évidemment, l'inconvénient est que vous ne pouvez plus interroger directement les autres clés. Si vous en avez également besoin, vous pouvez envisager de dupliquer vos données si celles-ci sont importantes pour vous.
Pour moi le problème est des entrées en double. Je peux avoir beaucoup d'événements se produisant en même temps. Par exemple: je peux avoir 10 événements se produisant à 10h05. Si je le convertis en temps d'époque et l'insère, ils peuvent s'écraser l'un l'autre (ou ne pas écrire) dans hbase.
Je peux ajouter un ID avec horodatage, mais puis-je définir l'heure de début et de fin dans le travail mapreduce si j'ajoute cet ID?
Vous pouvez créer une clé composée du type <timestamp><id>
, puis toutes les entrées dans hbase seront classées par horodatage. Vous pouvez ensuite créer un scanner qui commence au début de la plage et se termine à la fin de la plage.
Un problème que vous pourriez rencontrer est que si vous avez un taux d'insertion élevé, vous aurez un serveur unique pour toutes les nouvelles entrées. Un moyen de contourner cela est d'inverser la clé et de s'assurer que la première partie est aléatoire: <sha1 of ID><timestamp>
. Cela a l'avantage de répartir les écritures sur l'ensemble du cluster, mais l'inconvénient est d'exiger une lecture de la table entière pour obtenir une plage particulière.
Si vous utilisez la première méthode de <timestamp><id>
, il est possible que votre travail de carte ne puisse pas diviser le travail en autant de blocs que vous le souhaitez. Le travail de division de table par défaut est sur la région. Si votre tranche de temps est suffisamment petite, vous pouvez avoir une seule région qui traite les données et ne gagne aucun parallélisme dans votre requête. Vous pourriez potentiellement avoir une table de partition personnalisée qui parallélise la requête entre plusieurs mappeurs plutôt que des régions, mais vous liriez toujours toutes les données d'une région, et cela pourrait aussi avoir des inconvénients pour le parallélisme.
La façon dont vous configurez votre table dépend de votre scénario d'utilisation projeté et de la proportion de lecture/écriture, ainsi que de la performance requise pour chacun d'entre eux.
Si vous ajoutez un ID à votre horodatage pour garantir l'unicité, vous pouvez toujours demander à un scanner de renvoyer tous les événements avec l'horodatage indiqué. HBase trie les clés lexographiquement en fonction de la représentation en octets. Ainsi, si votre clé est <timestamp>:<id>
, vous pouvez configurer votre scanner pour commencer à la ligne <timestamp>
et arrêter la ligne au <timestamp+1>
pour obtenir tous les événements à cet horodateur