web-dev-qa-db-fra.com

Traitement de données à grande échelle Hbase vs Cassandra

Je suis presque arrivé à Cassandra après mes recherches sur des solutions de stockage de données à grande échelle. Mais il est généralement dit que Hbase est une meilleure solution pour le traitement et l'analyse de données à grande échelle.

Alors que les deux sont le même stockage de clé/valeur et que les deux sont/peuvent exécuter (Cassandra récemment) la couche Hadoop, ce qui fait de Hadoop un meilleur candidat lors du traitement/de l'analyse est requis sur des données volumineuses.

J'ai également trouvé de bons détails sur les deux à http://ria101.wordpress.com/2010/02/24/hbase-vs-cassandra-why-we-moved/

mais je cherche toujours des avantages concrets de Hbase.

Bien que je sois plus convaincu de Cassandra en raison de sa simplicité pour ajouter des nœuds et une réplication transparente et pas de fonctionnalités de point de défaillance. Et il conserve également la fonctionnalité d'index secondaire, donc c'est un bon avantage.

82
Gary Lindahl

Essayer de déterminer ce qui vous convient le mieux dépend vraiment de l'utilisation que vous en ferez, chacun a ses avantages et sans plus de détails, cela devient davantage une guerre de religion. Ce poste que vous avez référencé a également plus d'un an et les deux ont subi de nombreux changements depuis. Veuillez également garder à l'esprit que je ne connais pas les développements les plus récents Cassandra.

Cela dit, je vais paraphraser Andrew Purtell, le responsable de HBase, et ajouter quelques-unes de mes propres expériences:

  • HBase est dans des environnements de production plus grands (1000 nœuds), bien que cela soit encore dans le stade de l'installation des 400 nœuds de Cassandra, donc c'est vraiment une différence marginale.

  • HBase et Cassandra prennent tous deux en charge la réplication entre les clusters/centres de données. Je crois que HBase expose plus à l'utilisateur, donc cela semble plus compliqué, mais vous obtenez également plus de flexibilité.

  • Si votre application a besoin d'une cohérence élevée, HBase est probablement un meilleur choix. Il est conçu de A à Z pour être cohérent. Par exemple, il permet une implémentation plus simple des compteurs atomiques (je pense Cassandra vient de les avoir) ainsi que les opérations Check and Put.

  • Les performances d'écriture sont excellentes, d'après ce que je comprends, c'est l'une des raisons pour lesquelles Facebook a choisi HBase pour son messager.

  • Je ne suis pas sûr de l'état actuel du partitionneur commandé de Cassandra, mais dans le passé, cela nécessitait un rééquilibrage manuel. HBase s'en charge pour vous si vous le souhaitez. Le partitionneur ordonné est important pour le traitement de style Hadoop.

  • Cassandra et HBase sont tous deux complexes, Cassandra le cache simplement mieux. HBase l'expose davantage via l'utilisation de HDFS pour son stockage, si vous regardez la base de code Cassandra est Si vous comparez les papiers Dynamo et Bigtable, vous pouvez voir que la théorie du fonctionnement de Cassandra est en fait plus complexe.

  • HBase a plus de tests unitaires FWIW.

  • All Cassandra RPC is Thrift, HBase has a Thrift, REST and Java native. The Thrift and REST do only offer) un sous-ensemble de l'API client totale mais si vous voulez une vitesse pure, le client natif Java est là.

  • Il y a des avantages à la fois de pair à pair et de maître à esclave. La configuration maître-esclave facilite généralement le débogage et réduit un peu la complexité.

  • HBase n'est pas lié uniquement au HDFS traditionnel, vous pouvez changer votre stockage sous-jacent en fonction de vos besoins. MapR semble assez intéressant et j'ai entendu de bonnes choses même si je ne l'ai pas utilisé moi-même.

90
cftarnas

En tant que développeur Cassandra, je suis mieux à même de répondre à l'autre côté de la question:

  • Cassandra évolue mieux. Cassandra est connu pour évoluer jusqu'à plus de 400 nœuds dans un cluster ; lorsque Facebook a déployé la messagerie au-dessus de HBase, ils ont dû la répartir sur 100 nœuds Sous-clusters HBase .
  • Cassandra prend en charge des centaines, voire des milliers de familles de colonnes. " HBase ne fonctionne actuellement pas bien avec les familles supérieures à deux ou trois colonnes ."
  • En tant que système entièrement distribué sans nœuds ou processus "spéciaux" , Cassandra est plus simple à configurer et à utiliser , plus facile à dépanner, et plus robuste.
  • La prise en charge de Cassandra pour la réplication multimaître signifie que non seulement vous obtenez la puissance évidente de plusieurs centres de données - redondance géographique, latences locales - mais vous pouvez également diviser les charges de travail en temps réel et analytiques en groupes séparés, avec temps réel, bidirectionnel réplication entre eux . Si vous ne divisez pas ces charges de travail, elles seront spectaculaires.
  • Étant donné que chaque nœud Cassandra gère son propre stockage local, Cassandra présente un avantage de performance substantiel qui ne sera probablement pas réduit de manière significative. (Par exemple, il est courant de mettre le Cassandra commitlog sur un périphérique séparé afin qu'il puisse effectuer ses écritures séquentielles sans être gêné par les E/S aléatoires des requêtes de lecture.)
  • Cassandra vous permet de choisir la force à laquelle vous souhaitez qu'elle nécessite une cohérence pour chaque opération. Parfois, cela est mal compris car "Cassandra ne vous donne pas une forte cohérence", mais c'est incorrect.
  • Cassandra propose RandomPartitioner ainsi que le plus Bigtable-like OrderedPartitioner. RandomPartitioner est beaucoup moins sujet aux points chauds.
  • Cassandra offre une mise en cache sur ou hors segment avec des performances comparables à celles de Memcached, mais sans les problèmes de cohérence du cache ou la complexité de nécessiter des pièces mobiles supplémentaires
  • Les clients non Java ne sont pas des citoyens de seconde zone

À ma connaissance, le principal avantage de HBase en ce moment (HBase 0.90.4 et Cassandra 0.8.4) est que Cassandra ne prend pas encore en charge la compression de données transparente . (Cela a été ajouté pour Cassandra 1. , prévu début octobre, mais aujourd'hui c'est un réel avantage pour HBase.) HBase peut également être mieux optimisé pour le types d'analyses de plage effectuées par traitement par lots Hadoop.

Il y a aussi des choses qui ne sont pas nécessairement meilleures, ou pires, juste différentes. HBase adhère plus strictement au modèle de données Bigtable, où chaque colonne est implicitement versionnée. Cassandra supprime le contrôle de version et ajoute des SuperColonnes à la place.

J'espère que ça t'as aidé!

115
jbellis

La raison de l'utilisation de clusters hBase à 100 nœuds n'est pas parce que HBase ne s'adapte pas à des tailles plus grandes. C'est parce qu'il est plus facile de faire des mises à niveau logicielles hBase/HDFS sur une mode continue sans arrêter l'ensemble de votre service. Une autre raison est d'empêcher qu'un seul NameNode soit un SPOF pour l'ensemble du service. De plus, HBase est utilisé pour divers services (pas seulement les messages FB) et il est prudent d'avoir une approche coupant les cookies pour configurer de nombreux clusters HBase basés sur une approche de pod à 100 nœuds. Le nombre 100 est ad hoc, nous n'avons pas cherché à savoir si 100 est optimal ou non.

23
dhruba