Aide À La Requête Hbase / Hadoop
je travaille sur un projet avec un ami qui utilisera Hbase pour stocker ses données. Existe-il des bons exemples de requêtes? Je semble être en train d'écrire une tonne de code Java pour itérer à travers des listes de Rowresult's quand, dans SQL land, je pourrais écrire une requête simple. Ai-je raté quelque chose? Ou est-ce que Hbase manque quelque chose?
6 réponses
je pense que vous, comme beaucoup d'entre nous, faites l'erreur de traiter bigtable et HBase comme juste un autre RDBMS alors qu'il s'agit en fait d'un modèle de stockage en colonne conçu pour stocker et récupérer efficacement de grands ensembles de données éparses. Cela signifie stocker, idéalement, des relations de plusieurs à un dans une seule rangée, par exemple. Vos requêtes devraient retourner très peu de lignes mais contenir (potentiellement) beaucoup de points de données.
peut-être que si vous nous en dites plus sur ce que vous essayez de stocker, nous pourrait vous aider à concevoir votre schéma pour correspondre à la façon bigtable / HBase de faire les choses.
pour un bon résumé de ce que HBase fait différemment d'un SGBDR "traditionnel", consultez cet article impressionnant: Impédance correspondante: quand utiliser HBase par Bryan Duxbury.
si vous voulez accéder à HBase en utilisant un langage de requête et un pilote JDBC, c'est possible. Paul Ambrose a publié une bibliothèque appelée HBQL à hbql.com cela vous aidera à le faire. Je l'ai utilisé pour quelques projets et ça marche bien. Vous n'aurez évidemment pas accès au SQL complet, mais cela le rend un peu plus facile à utiliser.
j'ai regardé Hadoop et Hbase et comme Sean dit, je me suis vite rendu compte qu'il ne me donne pas ce que je voulais, qui a été un cluster de base de données compatible JDBC.
je pense que vous pourriez être mieux d'utiliser quelque chose comme C-JDBC ou HA-JDBC qui ressemblent plus à ce que j'étais après. (Personnellement, je ne suis pas allé plus loin avec l'un ou l'autre de ceux-ci autre que la lecture de la documentation de sorte que je ne peux pas dire lequel d'entre eux est bon, le cas échéant.)
Merci pour la réponse Sean, et désolé pour ma réponse tardive. Je fais souvent l'erreur de traiter HBase comme un SGBDR. Tellement souvent en fait que j'ai dû réécrire le code à cause de ça! C'est une chose difficile à désapprendre.
pour l'instant nous n'avons que 4 tables. Qui, dans ce cas, est très peu compte tenu de mes antécédents. J'espérais juste à utiliser la fonctionnalité RDBMS tout en s'en tenant le plus souvent au modèle de stockage en colonne.
content d'apprendre que vous utilisez HBase! Je ne suis pas un expert par n'importe quel bout de l'imagination, mais voici quelques choses qui pourraient aider.
HBase est basé sur / inspiré par BigTable, qui se trouve être exposé par AppEngine comme leur api db, donc parcourant leurs docs devrait t'aider beaucoup si vous travaillez sur une webapp.
Si vous ne travaillez pas sur une webapp, le type d'itération que vous décrivez est généralement manipulé via map / reduce (n'émettez pas les valeurs que vous ne voulez pas). Sauter sur les valeurs en utilisant des itérateurs garantit virtuellement que votre application aura des goulots d'étranglement avec des ensembles de données de la taille de HBase. Si vous trouvez que vous pensez toujours en SQL, consultez le tutoriel pig de cloudera et le tutoriel hive.
fondamentalement, la différence mentale HBase/SQL entière (pour les non-webapps) se résume à "envoyer le calcul aux données, ne pas envoyer les données au calcul" -- si vous gardez cela dans l'esprit pendant que vous êtes codage, vous ferez bien :-)
Cordialement,
David