为什么HBase比使用Hadoop的Cassandra更好?

时间:2013-02-19 05:50:22

标签: hadoop cassandra nosql hbase cap-theorem

为什么使用HBase比使用Cassandra使用Hadoop更好?

任何人都可以对此进行详细解释吗?

由于

2 个答案:

答案 0 :(得分:77)

我认为两者都不比其他人好,不只是一个或另一个。这些是非常不同的系统,每个系统都有自己的优点和缺点,所以它实际上取决于您的使用案例。它们绝对可以在同一基础设施中互补使用。

为了更好地解释这种差异,我想从Cassandra: the Definitive Guide借一张图片,在那里他们回顾了CAP定理。他们所说的基本上是针对任何分布式系统,你必须在一致性可用性分区容忍度之间找到平衡,你只能实际地满足其中2个属性。从中可以看出:

  • Cassandra满足可用性分区容差属性。
  • HBase满足一致性分区容差属性。

CAP

说到Hadoop,HBase是建立在HDFS之上的,如果你已经拥有一个Hadoop堆栈,它可以非常方便地使用。它也得到Cloudera的支持,Cloudera是Hadoop的标准企业发行版。

但是Cassandra还与Hadoop有更多的集成,即Datastax Brisk,它越来越受欢迎。您现在也可以使用Cassandra提供的一些输出格式(例如BulkOutputFormat)将数据从Hadoop作业的输出本地流式传输到Cassandra集群中,我们不再仅仅是Cassandra只是一个独立项目的地步。

根据我的经验,我发现Cassandra对于随机读取非常棒,而对于扫描来说并不是那么多

为了给图片添加一点颜色,我在同一个基础设施中一直使用我的工作,而HBase的目的与Cassandra截然不同。我使用Cassandra主要用于实时非常快速的查找,而我更多地使用HBase来处理具有较低延迟要求的重型ETL批处理作业。

这个问题确实值得一篇博文,所以我不想继续下去,而是指向an article,它总结了两个系统之间的许多关键差异。最重要的是,没有优秀的解决方案恕我直言,你应该考虑你的用例,看看哪个系统更适合。

答案 1 :(得分:14)

我们必须比较专业人士和对两个数据库都有所帮助,并根据业务需求做出谨慎的决定。

<强> 卡桑德拉

<强>优点:

  1. 满足可用性&amp; 分析 CAP 理论&amp; 最终一致
  2. 可扩展具有无单点故障的大型集群
  3. SQL 之类的开发语言允许开发人员轻松地从 RDBMS 背景转换
  4. Cassandra具有出色的单行读取性能,只要最终的一致性语义足以满足用例
  5. Datastax的支持是一个很大的优势
  6. 针对写入
  7. 进行了优化

    <强>缺点:

    1. 不支持基于范围的行扫描
    2. 不支持原子比较和设置
    3. Cassandra不支持协处理器功能 y`
    4. Cassandra支持列名称已知的列族上的二级索引。 (不在动态列上)。
    5. Cassandra节点不支持
    6. Cassandra中的聚合
    7. <强> HBase的

      <强>优点:

      1. 强一致性并符合一致性&amp; CAP 理论的分区
      2. RDBMS等效触发器&amp;存储程序
      3. Hadoop 支持
      4. 基于范围的行扫描
      5. 支持原子比较和设置
      6. 针对读取进行了优化,受单写主支持
      7. 支持聚合
      8. 高可扩展性&amp;数据自动分片
      9. <强>缺点:

        1. 缺乏友好的语言进行开发
        2. 不支持针对单行的读取负载平衡
        3. 行间操作非原子
        4. 单点故障如果只使用了一个HBase Master
        5. 有关详细信息,请查看article 1article 2和此presentation