用于 Hadoop 作业的 Cassandra 与 HBase

Cassandra vs HBase for Hadoop jobs

在 MapReduce 作业方面,Cassandra 相对于 HBase 有哪些优势?

我有很多小文件想从 HDFS 移动到数据库,这些文件将作为 MapReduce 作业的输入。我不会获取所有文件,而是针对某个用户,所以可能是整行,至少是一个列族。我可以拿某个时期的文件。

我知道 HBase 是 Hadoop 数据库,所以我希望它能满足我的需求,但我还了解到 Cassandra 的性能要好得多。但是我想知道当你用它作为MapReduce作业的输入时是什么情况。性能还是比HBase好很多吗?

我必须强调,我不是在寻找一般的 HBase 和 Cassandra 的比较,而是在 MapReduce 作业的具体案例中。 this 之类的问题并未具体讨论 MapReduce 作业的性能。另外,我正在寻找新的信息(我提到的问题是从 2011 年开始的,我相信从那时起可能会有一些变化)。

两个数据库的读写性能都很好。可能用于批量读取的 HBase 比 Cassandra 具有更好的性能。但是我有两个用例,由于 HBase 的设计,HBase 的工作速度明显快于 Cassandra。

首先,当您需要 map reduce 时,只需要根据列名减少一部分数据,例如a html 页面和其中的一些解析信息。您将 html 放在一个列族中,将已解析的信息放在其他列族中。不同的列族位于 HDFS 的不同文件中,因此只读一个就不需要读其他的。这为您带来了显着的性能优势,因为在您需要只读解析数据的情况下,磁盘上占用的 space 比 html 少几倍。在 Cassandra 的情况下,你需要阅读整个 table。

其次,当您需要按行键或基于此顺序的 table 的某些部分排序的访问信息时,例如。从某个域读取 html 页面。在 HBase 的情况下,您可以将行键作为域和 url 的总和。 HBase 对于未散列行键的情况有一个很好的平衡器。但是 Cassandra 没有,或者你应该在这种情况下使用一些技巧来平衡,或者需要扫描整个 table.

希望这个用例能给你一些画面,什么时候最好使用 HBase 什么时候使用 Cassandra。