生产环境选型考虑:Hive全方位对比HBase

Apache Hive 和 Apache HBase 是用于大数据的令人难以置信的工具。虽然它们的功能有一些相同之处,但 Apache Hive 和 Apache HBase 都具有独特的作用,使它们更适合特定的场景。一些主要区别包括:

Apache Hive 是建立在 Hadoop 之上的数据仓库系统,而 Apache HBase 是在 HDFS 或 Alluxio 之上的 NoSQL 键/值。

Hive 为 Spark/Hadoop 数据提供 SQL 功能,HBase 实时存储和处理 Hadoop 数据。

HBase 用于实时查询或大数据,而 Hive 不适合实时查询。

Hive 最适合用于数据的分析查询,而 HBase 主要用于将非结构化 Hadoop 数据作为湖存储或处理。

归根结底,将 Apache Hive 与 Apache HBase 进行比较就像将苹果与橘子,或 Google 与 Facebook 进行比较。虽然这两个实体相似,但它们不为用户提供相同的功能。然而,尽管存在差异,Apache Hive 和 Apache HBase 都是处理大数据时使用的绝佳工具。继续阅读以了解有关 Apache Hive、Apache HBase 的更多信息,以及它们的各种功能如何在处理大数据时改善您的业务。

什么是 Apache Hive

让我们从 Apache Hive 开始“Hive 与 Hbase”的考试。 Apache Hive 是一个构建在 Hadoop 之上的数据仓库系统。它为大型 Hadoop 非结构化数据池提供数据汇总、分析和查询。您可以查询存储在 Apache HDFS 中的数据,甚至可以查询存储在 Apache HBase 中的数据。 MapReduce、Spark 或 Tez 执行该数据。

Apache Hive 使用一种称为 HiveQL(或 HQL)的类似 SQL 的语言来查询批量 MapReduce 作业。 Hive 还支持 ACID 事务,例如 INSERT/DELETE/UPDATE/MERGE 语句。从更新 3.0 开始,Hive 通过减少表模式约束和提供对矢量化查询的访问权限为此添加了一些额外的功能。

简而言之,Apache Hive 为 Spark/Hadoop 数据提供了 SQL 特性(MapReduce 的 Java API 不太容易使用),它既是一个数据仓库系统,也是一个具有丰富集成和大量用户友好的 ETL 工具特征。与许多类似的产品(例如 Apache Pig)一样,Hive 在技术上可以处理许多不同的功能。例如,Hive 允许您使用 SQL,而不是为 MapReduce 作业编写冗长的 Java。您在堆栈中使用 Hive 的原因将因您的需求而异。

Hive 的核心功能

Hive 可以帮助精通 SQL 查询与 Hadoop 集成的各种数据存储中的数据。由于它符合 JDBC,它还与现有的基于 SQL 的工具集成。运行 Hive 查询可能需要一段时间,因为默认情况下它们会遍历表中的所有数据。尽管如此,Hive 的分区功能限制了数据量。分区允许对存储在单独文件夹中的数据运行过滤查询,并且只读取与查询匹配的数据。例如,如果文件将日期格式作为其名称的一部分,它可以用于仅处理在特定日期之间创建的文件。

以下是 Hive 的一些功能:

它使用 SQL。

出色的 Apache Spark 和 Tez 集成。

您可以使用用户定义函数 (UDF)。

它有很棒的带有 Hive 3+ 的 ACID 表。

您可以查询庞大的 Hadoop 数据集。

大量集成(例如,BI 工具、Pig、Spark、HBase 等)。

其他基于 Hive 的功能(例如 HiveMall)可以提供一些额外的独特功能。

什么是 Apache HBase

Apache HBase 是运行在 HDFS 或 Alluxio 之上的 NoSQL 键/值存储。与 Hive 不同,HBase 操作在其数据库而不是 MapReduce 作业上实时运行。所以,你有随机访问能力——这是 HDFS 所缺少的。由于 HDFS 不是为处理具有随机读/写操作的实时分析而构建的,因此 HBase 为 HDFS 带来了大量功能。您可以将其设置为通过 Hadoop 处理的实时数据的数据存储。您可以将它与 MapReduce 集成。更好的是,您可以将它与 Hive 和 MapReduce 集成以获得 SQL 功能。

HBase 包含表,并且表被拆分为列族。列族(在架构中声明)将一组特定的列组合在一起(列不需要架构定义)。例如,“message”列族可以包括以下列:“to”、“from”、“date”、“subject”和“body”。 HBase 中的每个键/值对都定义为一个单元格,每个键由 row-key、c​​olumn family、column 和 time-stamp 组成。 HBase 中的一行是由行键标识的一组键/值映射。 HBase 享有 Hadoop 的基础设施并横向扩展。

简而言之,HBase 可以存储或处理具有近乎实时读/写需求的 Hadoop 数据。这包括结构化和非结构化数据,尽管 HBase 擅长后者。 HBase 具有低延迟,可通过 shell 命令、Java API、Thrift 或 REST 访问。 HBase 通常是 Hadoop 集群中的存储层,Adobe 等大型品牌利用 HBase 来满足其所有 Hadoop 存储需求。

HBase的核心特性

HBase 通过将数据存储为模仿 Google 的 Bigtable 的键/值来工作。它支持四种主要操作:添加或更新行、扫描以检索一系列单元格、返回指定行的单元格以及删除以从表中删除行、列或列版本。版本控制是可用的,因此它可以获取数据的先前值(历史记录不时删除以通过 HBase 压缩清理空间)。尽管 HBase 包含表,但仅表和列族需要模式,列不需要模式,并且它包括增量/计数器功能。

以下是 HBase 的一些功能:

它支持键值

它是一个支持随机读/写操作的 NoSQL 数据库

中型对象 (MOB) 支持

HBase 支持协处理器。这对于计算海量数据非常有用,并且操作类似于 MapReduce 作业,并具有一些额外的好处。

允许您利用 Apache Phoenix

您可以执行扫描操作

Hive 和 HBase 的局限性是什么?

每个工具都有自己的优缺点。因此,Hive 和 HBase 总是存在某些限制。阅读下面的这些限制。

Hive限制

首先,Hive 具有非常基本的 ACID 功能。他们到达了 Hive 0.14,但没有 MYSQL 等产品的成熟度。也就是说,仍然有 ACID 支持,并且每个补丁都会变得更好。

Hive 查询通常也具有高延迟。由于它在 Hadoop 上运行批处理,因此可能需要几分钟甚至几小时才能获得查询结果。此外,更新数据可能既复杂又耗时。

Hive 在小数据查询(尤其是大容量数据)方面并不是最好的,大多数用户倾向于依靠传统的 RDBMS 来处理这些数据集。

HBase 限制

HBase 查询采用自定义语言,需要经过培训才能学习。类似 SQL 的功能可以通过 Apache Phoenix 实现,尽管它是以维护模式为代价的。此外,HBase 并不完全符合 ACID,尽管它确实支持某些属性。最后但同样重要的是——为了运行 HBase,你需要 ZooKeeper——一个用于分布式协调的服务器,例如配置、维护和命名。

HBase 可以通过协同处理来处理小数据,但它仍然不如 RDBMS 有用。

实践中的 Hive 和 HBase

正如 Hive 和 HBase 在某些场景中有其局限性一样,它们也有它们蓬勃发展的特定场景。在下面的实践中阅读 Hive 和 HBase。

Hive使用场景

Hive 应该用于对一段时间内收集的数据进行分析查询——例如,计算趋势或网站日志。

我们通常会看到两个 Hive 用例:

HDFS 的 SQL 查询引擎 – Hive 可以成为 SQL 查询的重要来源。您可以利用 Hive 处理 Hadoop 数据湖并将它们连接到您的 BI 工具(如 Tableau)以实现可见性。

具有 HBase、Pig、Spark 或 Tez 的表存储层。大量 HDFS 工具使用 Hive 作为表存储层。从技术上讲,这可能是其最大的全球用例。

Hive 使用的真实例子

目前有超过 4,330 家公司品牌使用 Hive。这比使用 HBase 少,但仍然有很多品牌——尤其是因为大多数公司仍在运行 SQL 堆栈。

Scribd 将 Hive 典型的数据科学用例与 Hadoop 结合使用。这包括机器学习、数据挖掘和 BI 工具的临时查询。确实,Scribd 使用 Hive 作为其整体 Hadoop 堆栈的一部分——这是它最适合的地方。您可以将 Hive 和 HBase 放在同一个集群上进行存储、处理和即席查询。

MedHelp 将 Hive 用于其 Find a Doctor 功能。他们每天在 Hadoop 堆栈上处理数百万个查询,而 Hive 像专业人士一样处理它。

Last.fm 还使用 Hive 进行临时查询。再次,这就是 Hive 的亮点。如果您需要在 Hadoop 上进行临时查询,请使用 Hive。

HubSpot、hi5、eHarmony 和 CNET 也使用 Hive 进行查询。

HBase 使用场景

HBase 非常适合实时查询大数据(例如 Facebook 曾经将其用于消息传递)。 Hive 不应该用于实时查询,因为结果需要一段时间。

HBase 主要用于将非结构化 Hadoop 数据作为湖存储和处理。您也可以使用 HBase 作为所有 Hadoop 数据的仓库,但我们主要看到它用于写入繁重的操作。

HBase 使用的真实使用场景

几乎所有这些案例都将使用 HBase 作为 Hadoop 的存储和处理工具——这是它自然适合的地方。

Adobe 自推出以来一直在运行 HBase。他们的第一个节点早在 2008 年就启动了,他们目前将 HBase 用于他们的 30 个 HDFS 节点。他们将其用于内部结构化数据和非结构化外部数据。

Flurry 使用 HBase 运行 50 个 HDFS 节点,它使用 HBase 处理数百亿行。

HubSpot 主要使用 HBase 进行客户数据存储。作为 HDFS 堆栈的一部分,他们还使用 Hive 对该 HBase 数据运行查询。

Twitter 也在他们的 Hadoop 堆栈中使用 HBase。它用于用户搜索的内部数据。

Streamy 从 SQL 切换到带有 HBase 的 Hadoop 堆栈。他们声称能够比以往更快地处理。

Sematext(为 HBase 创建 SMP)使用 HBase 和 MapReduce 堆栈。同样,这两者可以很好地协同工作(通常通过 Hive 加以利用),因为它们完美地互补了彼此的优缺点。 超过 10,000 家企业使用 HBase。而且大部分都很大。在当前的技术生态系统中,大品牌倾向于更频繁地利用 Hadoop,因此 HBase 往往处于一些大堆栈中(例如,TCS、Marin Software、Taboola、KEYW Corp 等)

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。更多免费资源在http://www.gitweixin.com/?p=2627

发表评论

邮箱地址不会被公开。 必填项已用*标注