我真的不明白Hadoop为什么比关系型数据库更好地扩展。可以有人详细解释一下吗?这与底层数据结构和算法有关吗?
请看另一个相关的SE问题:
首先,Hadoop不是数据库的替代品。
关系型数据库(RDBMS)是纵向扩展,而Hadoop是横向扩展。
这意味着,为了将RDBMS扩展两倍,您需要具有双倍的内存、双倍的存储和双倍的CPU硬件。这非常昂贵且有限制。例如,没有一台服务器拥有10TB的RAM。使用Hadoop就不同了,您不需要昂贵的边缘技术,而是可以使用多个普通服务器一起工作,模拟一个更大的服务器(有一些限制)。您可以拥有一个分布在多个节点上的10TB RAM集群。
另一个优点是,与其购买新的更强大的服务器并放弃旧服务器,分布式系统只需要将新节点添加到集群中即可进行扩展。
我对上面的描述唯一的问题是并行RDBMS需要昂贵的硬件。Teridata和Netezza需要特殊的硬件。Greenplum和Vertica可以放在普通硬件上。(现在我承认我有偏见,像其他人一样。)我见过Greenplum每天扫描PB级别的信息。(沃尔玛最近达到了2.5 PB。)我处理过Hawq和Impala。它们都需要大约30%的额外硬件来处理结构化数据。Hbase效率较低。
没有魔法银勺子。我的经验是结构化和非结构化都有其用处。Hadoop非常适合摄取大量数据并仅扫描几次。我们将其用作我们的加载程序的一部分。RDBMS非常适合使用高度复杂的查询多次扫描相同的数据。
您始终必须对数据进行结构化以利用它。这种结构化需要花费时间。您可以在将其放入RDBMS之前或在查询时进行结构化。