Cassandra采用了与Hadoop不同的解决方案。 Cassandra擅长大批量实时事务处理,而Hadoop则擅长更多面向批处理的分析解决方案。
Cassandra和Hadoop的架构/实现有何不同,它们考虑了这种使用差异。 (在非专业软件专业术语中)
答案 0 :(得分:2)
我想补充一下,因为我觉得这里可能有一个误导性的陈述,说Cassandra可能对读取有益。 Cassandra在随机读取方面也不是很擅长,与其他解决方案相比它很好,你如何随机读取大量数据,但在某些时候,如果读取真的是随机的,你就无法避免每次都碰到磁盘单个时间是昂贵的,它可能会降到无用的东西,如几千次点击/秒,具体取决于您的群集,因此计划进行大量随机查询可能不是最好的,如果你开始,你会碰到一堵墙这样想。我会说当你进行顺序读取或找到顺序存储它们的方法时,大数据中的所有内容都能更好地工作。大多数情况下即使您进行实时处理,您仍然希望找到一种批处理查询的方法。 这就是为什么你需要事先考虑你在密钥下存储的内容,并尝试从阅读中获取尽可能多的信息。 交易和Cassandra在同一句话中说这也很有趣,因为这真的不会发生。 另一方面,hadoop几乎是按照定义批量生产,但hadoop是一个分布式地图缩减框架,而不是db,事实上,我已经看到并使用了很多hadoop而不是cassandra,它们不是对抗技术。 实时处理大数据是可行的,但需要仔细思考并关心何时以及如何访问数据库。
编辑:删除了二级索引示例,就像我上次检查使用的随机读取一样(虽然我已经离开Cassandra一年多了)。
答案 1 :(得分:0)
Vanilla hadoop由核心的分布式文件系统(DFS)和支持Map Reduce模型编写程序进行分析的库组成。 DFS使Hadoop具有可扩展性。它负责将数据分块到多节点集群中的多个节点,以便Map Reduce可以处理单个数据块可用节点,从而实现并行性。
可以找到作为Hadoop分布式文件系统(HDFS)基础的Google文件系统论文here
可以找到Map Reduce模型的论文here
有关Map Reduce的详细说明请阅读此post
Cassandra是一个高度可扩展,最终一致,分布式,结构化的键值存储。它不是传统的数据库,而更像是存储键/值对的Hashtable或HashMap。 Cassandra在HDFS之上工作,并利用它来扩展。 Cassandra和HBase都是Google BigTable的实现。可以找到Google BigTable的论文here。
BigTable使用字符串排序表(SSTable)来存储键/值对。 SSTable只是HDFS中的一个文件,它存储键后跟值。此外,BigTable维护一个索引,该索引在该密钥的文件中具有密钥和偏移量,该索引仅使用对偏移位置的搜索来读取该密钥的值。 SSTable实际上是不可变的,这意味着在创建文件之后,不能对现有的键/值对进行修改。新的键/值对将附加到文件中。更新和删除记录将附加到文件中,使用较新的键/值进行更新,并使用键和逻辑删除值进行删除。对于SSTable,此文件中允许重复的密钥。每当更新或删除发生时,索引也会被修改,以便该键的偏移量指向最新值或逻辑删除值。
因此,您可以看到Cassandra的内部允许快速读/写,这对于实时数据处理至关重要。而使用Map Reduce的Vanilla Hadoop可用于处理面向批处理的被动数据。
答案 2 :(得分: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