Hadoop 与 RDBMS 的比较

Hadoop comparison to RDBMS

我真的不明白 hadoop 缩放比 RDBMS 更好的真正原因。谁能详细解释一下?这与底层数据结构和算法有关系吗

首先,hadoop 不是数据库的替代品。

RDBMS 纵向扩展和 hadoop 横向扩展。

这意味着要将 RDBMS 扩展两倍,您需要具有双倍内存、双倍存储和双倍 cpu 的硬件。那是非常昂贵的并且有限制。例如,没有 10TB 内存的服务器。 hadoop 不同,你不需要昂贵的边缘技术,取而代之的是你可以使用几个商品服务器一起工作来模拟一个更大的服务器(有一些限制)。您可以拥有一个分布在多个节点中的 10 Tb 内存的集群。

另一个优点是不必购买更强大的新服务器并丢弃旧服务器,扩展分布式系统只需要将新节点添加到集群中。

RDBMS 在处理 TB 和 Peta 字节的海量数据方面面临挑战。即使您有 Independent/Inexpensive 磁盘冗余阵列 (RAID) 和数据粉碎,它也无法很好地扩展大量数据。您需要非常昂贵的硬件。

编辑: 要回答为什么 RDBMS 无法扩展,请查看 Overheads of RBDMS

日志记录。组装日志记录并跟踪所有更改 在数据库结构中会降低性能。日志记录可能不是 如果可恢复性不是必需的,或者如果可恢复性 通过其他方式(例如,网络上的其他站点)提供。

锁定。传统的两阶段锁定会带来相当大的开销 因为对数据库结构的所有访问都由一个 单独的实体,锁管理器。

锁存。在多线程数据库中,许多数据结构 必须在他们可以被访问之前被锁存。删除这个 功能和使用单线程方法有一个明显的 性能影响。

缓冲区管理。主存数据库系统不 需要通过缓冲池访问页面,从而消除了 间接访问每个记录。

Hadoop 如何处理?:

Hadoop 是一个免费的、基于 Java 的编程框架,支持在分布式计算环境中处理大型数据集,它可以 运行 在商品硬件上。它对于存储和检索大量数据很有用。

Hadoop 实现存储机制 (HDFS) 和处理作业(YARN Map reduce 作业)可以实现这种可扩展性和效率。除了可伸缩性之外,Hadoop 还提供 存储数据的高可用性

可伸缩性、高可用性、处理大量数据(结构化数据、非结构化数据、半结构化数据)和灵活性是 Hadoop 成功的关键。

数据存储在数以千计的节点上,处理是通过 Map Reduce 作业在存储数据的节点上完成的(大部分时间)。 Data Locality 处理前端是 Hadoop.

成功的关键领域之一

这是通过名称节点、数据节点和资源管理器实现的。

要了解 Hadoop 如何实现这一点,您必须访问这些链接:HDFS Architecture , YARN Architecture and HDFS Federation

RDBMS 仍然适用于千兆字节数据上的多个 write/read/updates 和一致的 ACID 事务。但不适合处理 Tera 字节和 Peta 字节的数据。具有 CAP 理论的 Consistency 和 Availability Partitioning 两个属性的 NoSQL 在某些用例中表现良好。

但是 Hadoop 并不意味着具有 ACID 属性的实时事务支持。它适用于批处理的商业智能报告 - “一次写入,多次读取”范例。

来自 slideshare.net

再看一个相关的 SE 问题:

NoSql vs Relational database

在 RDBMS 中,数据是结构化的,而不是 索引。 检索任何特定 'nth' 列的数据正在加载整个数据库,然后选择 'nth' 列。

在 Hadoop 中,比如 Hive,我们只加载整个数据集中的特定列。 更重要的是,数据加载也由 Map reduce 程序完成,该程序在分布式结构中完成,从而减少了总时间。

因此,使用 Hadoop 及其工具有两个优点。

上述描述的一个问题是并行 RDBMS 需要昂贵的硬件。 Teridata 和 Netezza 需要特殊的硬件。 Greenplum 和 Vertica 可以放在商用硬件上。 (现在我承认我有偏见,就像其他人一样。)我已经看到 Greenplum 每天扫描数 PB 的信息。 (沃尔玛最后我努力达到 2.5 PB。)我处理了 Hawq 和 Impala。它们都需要多出大约 30% 的硬件才能对结构化数据执行相同的工作。 Hbase效率较低。

世上没有万能的银汤匙。根据我的经验,结构化和非结构化都有它们的位置。 Hadoop 非常适合摄取大量数据并对其进行少量扫描。我们将其用作加载程序的一部分。 RDBMS 很乐意用高度复杂的查询一遍又一遍地扫描相同的数据。

您总是必须构建数据才能使用它。这种结构需要时间。在将其放入 RDBMS 之前或在查询时创建以太结构。