4

根据http://www.dbta.com/Articles/Columns/Notes-on-NoSQL/Cassandra-and-Hadoop---Strange-Bedfellows-or-a-Match-Made-in-Heaven-75890.aspx

Cassandra 所追求的解决方案与 Hadoop 有所不同。Cassandra 擅长大容量实时事务处理,而 Hadoop 擅长更多面向批处理的分析解决方案。

Cassandra 和 Hadoop 的架构/实现有什么不同,这导致了这种使用上的差异。(在外行软件专业术语中)

4

3 回答 3

2

我想补充一下,因为我认为这里可能有一个误导性的说法,即 Cassandra 可能在读取方面表现良好。Cassandra 也不太擅长随机读取,与其他解决方案相比,它在如何随机读取大量数据方面做得很好,但在某些时候,如果读取真的是随机的,你就无法避免每次都敲击磁盘单次是昂贵的,并且它可能会归结为无用的东西,例如几千次点击/秒,具体取决于您的集群,因此计划进行大量随机查询可能不是最好的,如果您开始就会碰壁那样想。我想说当您进行顺序读取或找到顺序存储它们的方法时,大数据中的所有内容都会更好地工作。大多数情况下,即使您进行实时处理,您仍然希望找到一种批处理查询的方法。这就是为什么您需要事先考虑您在密钥下存储的内容并尝试从读取中获取尽可能多的信息。语句在同一个句子中说 transaction 和 Cassandra 也很有趣,因为这真的不会发生。另一方面,hadoop 几乎按照定义是批处理的,但 hadoop 是一个分布式 map reduce 框架,而不是 db,事实上,我已经看到并使用了很多 hadoop 而不是 cassandra,它们不是对抗性技术。实时处理大数据是可行的,但需要好好思考并关心何时以及如何访问数据库。因为那真的不会发生。另一方面,hadoop 几乎按照定义是批处理的,但 hadoop 是一个分布式 map reduce 框架,而不是 db,事实上,我已经看到并使用了很多 hadoop 而不是 cassandra,它们不是对抗性技术。实时处理大数据是可行的,但需要好好思考并关心何时以及如何访问数据库。因为那真的不会发生。另一方面,hadoop 几乎按照定义是批处理的,但 hadoop 是一个分布式 map reduce 框架,而不是 db,事实上,我已经看到并使用了很多 hadoop 而不是 cassandra,它们不是对抗性技术。实时处理大数据是可行的,但需要好好思考并关心何时以及如何访问数据库。

编辑:删除二级索引示例,上次我检查使用随机读取(尽管我已经离开 Cassandra 一年多了)。

于 2013-02-28T00:28:13.750 回答
1

Vanilla hadoop 由一个以分布式文件系统 (DFS) 为核心的分布式文件系统 (DFS) 和支持 Map Reduce 模型的库组成,以编写程序进行分析。DFS 使 Hadoop 具有可扩展性。它负责将数据分块到多节点集群中的多个节点中,以便 Map Reduce 可以处理单个可用节点的数据块,从而实现并行性。

可以在此处找到作为 Hadoop 分布式文件系统 (HDFS) 基础的 Google 文件系统的论文

Map Reduce 模型的论文可以在这里找到

有关 Map Reduce 的详细说明,请阅读这篇文章

Cassandra 是一个高度可扩展、最终一致、分布式、结构化的键值对存储。它不是传统的数据库,但更像是存储键/值对的 Hashtable 或 HashMap。Cassandra 在 HDFS 之上工作并利用它来扩展。Cassandra 和 HBase 都是 Google BigTable 的实现。可以在此处找到 Google BigTable 的论文。

BigTable 使用字符串排序表 (SSTable) 来存储键/值对。SSTable 只是 HDFS 中的一个文件,它存储键后跟值。此外,BigTable 维护一个索引,该索引在文件中具有该键的键和偏移量,这使得仅使用对偏移位置的查找就可以读取该键的值。SSTable 实际上是不可变的,这意味着在创建文件后,无法对现有的键/值对进行任何修改。新的键/值对被附加到文件中。记录的更新和删除附加到文件中,使用更新的键/值进行更新,并使用键和墓碑值进行删除。此文件中允许 SSTable 的重复键。每当发生更新或删除时,也会修改索引,以便该键的偏移量指向最新值或墓碑值。

因此,您可以看到 Cassandra 的内部允许快速读/写,这对于实时数据处理至关重要。而带有 Map Reduce 的 Vanilla Hadoop 可用于处理面向批处理的被动数据。

于 2012-11-13T06:26:06.627 回答
0

Hadoop 由两个基本组件组成:分布式数据存储 (HDFS) 和分布式计算框架 (MapReduce)。它读取一堆输入数据,然后从/向数据存储写入输出。它需要分布式数据存储,因为它对机器集群上的本地数据执行并行计算,以最大限度地减少数据加载时间。

而 Cassandra 是具有线性可扩展性和容错能力的数据存储。它缺乏 MapReduce 在 Hadoop 中提供的并行计算能力。

Hadoop 的默认数据存储(HDFS)可以替换为其他存储后端,例如 Cassandra、Glusterfs、Ceph、Amazon S3、Microsoft Azure 的文件系统、MapR 的 FS 等。但是,每种替代方案都有其优点和缺点,它们应该根据需求进行评估。

有一些资源可以帮助您将 Hadoop 与 Cassandra 集成: http: //docs.datastax.com/en/cassandra/3.0/cassandra/configuration/configHadoop.html

于 2017-05-17T06:31:46.073 回答