Hadoop 与关系数据库

2025-06-07

Hadoop 与关系数据库

大数据已不再是一个流行词,而变成了企业高管需要弄清楚如何应对的必需品。

如今,大数据技术和工具的采用已见证了显著的增长,  据 Forrester 预测, 超过 40% 的组织正在实施大数据,而 IDC 预测,大数据和商业分析市场 将从今年的 1891 亿美元达到 2022 年的历史最高水平 2743 亿美元。

随着大数据和大数据分析的蓬勃发展,找到合适的写入系统、最佳实践和数据模型,让分析师和工程师能够访问海量数据可能并非易事。您使用的是传统数据库、列式数据库还是其他数据存储系统?
​让
我们先从比较传统关系数据库和 Hadoop(特别是与 Presto 或 Hive 等层级合作的 Hadoop)开始讨论。

图片

什么是 Apache Hadoop?

Hadoop 是一个具有开源基础设施的分布式文件系统,可以分发和处理大数据集。

Hadoop 旨在从单台服务器扩展到多台机器,为每台服务器提供本地存储和计算能力。Apache Hadoop 附带分布式文件系统和其他组件,例如 Mapreduce(使用键值对进行并行计算的框架)、Yarn 和 Hadoop Common(Java 库)。

普雷斯托

Presto 是一个分布式 SQL 查询引擎,可以运行在 HDFS、Hadoop、Cassandra 等数据系统,甚至传统的关系数据库之上。它使分析师能够充分利用 Hadoop 的优势,而无需了解底层机制的复杂性和复杂性。这使得工程师能够使用表格等抽象概念,以更传统的数据仓库格式组织数据。

什么是关系数据库(DB)?

关系型数据库 (RDB) 由一组描述性表组成,这些数据可以通过各种方式重新组合或访问,而无需重新组织整个数据库表。我知道这听起来有点奇怪,但最简单的 RDB 是所有 SQL 以及所有数据库管理系统(例如 Microsoft SQL Server、Oracle 和 MySQL)的基础。RDB
也可以称为 RDBMS,即关系数据库管理系统 (RDB)。RDB 是一种使用关系模型的数据库管理系统。RDBMS 是所有数据库的演进;它更像是任何典型的数据库,而不是一个重要的禁令。

差异

数据架构和数据量

与关系型数据库管理系统 (RDBMS) 不同,Hadoop 并非数据库,而是一个分布式文件系统,可以跨计算机存储和处理海量数据集群。然而,关系型数据库管理系统 (RDBMS) 是一种结构化数据库,数据以行和列的形式存储,可以使用 SQL 语句更新,并呈现在不同的表中。关系型数据库的这种结构化方法限制了其存储和处理海量数据的能力。因此,Hadoop 可以结合 Mapreduce 或 Spark 来处理海量数据。

数据种类

数据种类通常指的是所处理数据的类型。目前,我们主要有三种数据类型:结构化数据、非结构化数据和半结构化数据。关系型数据库只能管理和处理有限量的结构化和半结构化数据。关系型数据库在管理非结构化数据方面能力有限。然而,Hadoop 能够管理和处理上述所有类型的数据:结构化数据、非结构化数据和半结构化数据。事实上,Hadoop 是目前已知的管理和处理海量非结构化数据最快的方法。

数据仓库和 Hadoop

如前所述,Hadoop 本身并不是一个数据库。然而,得益于 Hive 和 Presto 等开源项目,您可以将文件系统抽象为类似表的格式,以便通过 SQL 访问。
这使得许多公司开始将其部分或全部数据仓库迁移到 Hadoop。

为什么?

它是为了方便使用,并希望在更便宜的机器上实现更好的性能。但这是否真的有效,取决于不同的公司和不同的数据管理团队。

尽管像 Hadoop 这样的系统承诺提供更好的性能,但它也存在许多不太被讨论的缺点。

图片

RDBMS 和 Hadoop 的弱点

“在我们开始之前,看起来我好像不喜欢 Hadoop。但事实并非如此,我只是想指出一些最大的陷阱和弱点。

技术能力

我们很快就会讨论技术难题。但在讨论技术难题之前,我们想先讨论一下人才问题。

Hadoop 和传统关系数据库都需要技术知识,而获取这些知识的成本很高。这一点或许还有待商榷,但总体而言,大多数关系数据库都  容易使用。

这是因为相比之下,Hadoop 的可移动部件非常少。使用 Hadoop,你需要考虑管理集群、Hadoop 节点、安全性、Presto 或你正在使用的任何接口,以及其他一些技术管理任务,这些任务需要大量的时间和技能。作为一名数据工程师,这些技能可以让你每年赚到 15 万美元以上。这对员工来说很棒,但对公司来说却很昂贵。

相比之下,大多数关系数据库系统(例如 SQL Server 或 Oracle)“在某种程度上”更加简单。它们内置了安全性、性能调优功能,最重要的是,拥有大量了解如何管理和使用标准数据库的人才。

您认为 Presto 和 Hive 等接口与 SQL 非常相似,它们存在的原因是什么?这是因为数据专业人员需要一种更熟悉的方法来与 Hadoop 交互。

因此,大多数公司面临的最大问题不是 Hadoop 的复杂性,而是缺乏/成本能够正确操作 Hadoop 的人才。

安全问题

与关系型数据库管理系统 (RDBMS) 不同,Hadoop 面临许多安全问题,这些问题在管理复杂应用程序时可能颇具挑战性。事实上,最初的 Hadoop 版本并未设置身份验证系统,因为当时的假设是系统运行在安全的环境中。

较新的版本确实提供了访问和权限、身份验证和加密模块。但它们的使用并不那么简单,通常需要相当多的准备工作。如果您只是直接使用 Hadoop,而没有像 Hortonworks($$$) 这样的第三方软件,这可能会给支持和扩展带来困难。

功能问题

Hadoop 的设计理念是“一次写入,多次读取”。Hadoop 的设计并非“一次写入,多次更新”。因此,对于习惯于更新数据的数据专家来说,最好还是别再考虑它了。

对于那些不熟悉数据建模的人来说,这个问题可能一眼看不出来。理解起来也并非那么令人兴奋……
但无法运行更新语句会限制很多从数据量角度来看有益的建模。

例如(我们即将进行更细粒度的分析)。假设您想跟踪公司中某人的晋升情况。传统上,在关系型数据库 (RDMS) 中,您只需跟踪员工 ID、职位以及该职位的开始和结束日期即可。您无需跟踪职位转换期间的所有日期。当职位切换时,您可以更新结束日期,为该员工添加一个包含新职位和开始日期的新行,并将结束日期保留为空。如下所示。

这需要两行数据,现在我们拥有了所需的所有信息。

相比之下,有几种方法可以使用 Presto 来存储这些数据,以保存类似的信息

一种方法是将一个人每天的职位存储在日期分区中。这种方法的缺点是,你实际上需要为该人每天的职位记录一行数据。问题在于,你将存储大量的数据。如果你有 10,000 名员工,那么每天就需要 10,000 行数据。

另一种方法是使用与关系数据库管理系统 (RDBMS) 类似的数据模型。也就是说,每个员工 ID 和职位组合,以及开始和结束日期,只对应一行。但是,这种方法只有在您能够访问前几天的信息时才有效。这是一个限制因素。

最终,您可能会存储远超实际需要的数据,或者执行大量不必要的事务。关键在于,尽管 Hadoop 可以提供一些优势,但它并非总是最佳工具。

如果您喜欢这篇关于软件工程的文章,那么也请考虑这些文章!

4 个简单的 Python 想法,让您的工作流程自动化;
仪表板的实际使用案例和实际投资回报率
;使用 BigQuery 和 Python 分析医疗数据
;学习数据科学:我们的 25 门顶级数据科学课程;
您唯一需要观看的最佳 Python 教程;
改进您的数据策略

文章来源:https://dev.to/seattledataguy/hadoop-vs-relational-databases-3odp
PREV
如何撰写引人注目的编程和技术文章 面试和获得编程工作 成长为一名工程师 几乎所有语言的介绍 有趣的项目列表 结论
NEXT
2020 年开发人员需要的 5 项技术技能:基于职位描述