HBase 的优点、缺点和性能瓶颈

⚡ 智能摘要

HBase 是一个分布式、面向列的 NoSQL 数据库,它基于……构建。 Hadoop HDFS它能够对数十亿行数据进行实时随机读写访问,但查询、索引和硬件成本方面存在明显的权衡。

  • 🗄️ Foundation: HBase 是一个基于 HDFS 的 NoSQL、面向列的存储系统,适用于稀疏的、非常大的表。
  • 优点: 它可水平扩展,支持随机实时读写,并聚合数十亿行数据。
  • ⚠️ 缺点: 它缺少 SQL、连接和二级索引,并且仍然会占用大量 CPU 和内存。
  • 🚧 瓶颈: 单个活动 HMaster 和缓慢的故障转移会造成公认的性能瓶颈。
  • ???? 与关系型数据库管理系统相比: 与关系型数据库不同,HBase 通过牺牲事务处理能力和丰富的查询功能来换取规模优势。
  • 🤖 人工智能视角: 机器学习管道读取 HBase 表以进行实时特征和异常检测。

HBase 的优势、劣势和性能瓶颈

什么是 HBase?

HBase 是一个开源的、分布式的、面向列的 NoSQL 数据库,运行在 Hadoop 分布式文件系统 (HDFS) 之上。 Google Bigtable 将数据存储在由行和列族组成的表中,专为稀疏数据集而设计,这些数据集可以增长到数十亿行和数百万列。

与关系型数据库不同,HBase 不使用固定模式,也不提供查询优化器。相反,每个值都由行键、列族、列限定符和时间戳来寻址,这使得即使在大规模数据的情况下,随机实时读写操作也能快速完成。

一个 HBase 集群依赖于几个核心组件。HMaster 负责协调集群并分配区域,Region Server 负责存储和提供实际数据,而 Apache 服务器则负责提供数据服务。 动物园管理员 tracks 指示哪些服务器处于活动状态,并有助于故障转移。由于 HBase 位于 Hadoop 生态系统中,因此它可以与以下工具协同工作: 映射简化, 蜂房以及用于批量分析的 Pig。要深入了解其内部机制,请参阅…… HBase架构.

HBase的优势

使用 HBase 的主要优势如下:

  • 在 HDFS 之上存储海量数据集,并可聚合和分析 HBase 表中保存的数十亿行数据。
  • 在分布式环境中,数据库可以被多个客户端共享。
  • 与传统关系模型相比,数据读取和处理所需时间更少。
  • 支持快速随机读写操作。
  • HBase被广泛用于在线分析操作。
  • 在银行应用中,例如 ATM 的实时余额更新,HBase 可以可靠地处理大量读写操作。

HBase 的缺点

以下是HBase的一些重要局限性:

  • HBase 并不能完全替代传统的关系模型;某些关系型功能不受支持。
  • HBase 无法执行诸如以下功能: SQL它不支持 SQL 结构,因此没有查询优化器。
  • HBase 属于 CPU 和内存密集型任务,需要进行大量的顺序输入/输出访问,而 MapReduce 任务大多是 I/O 密集型任务,内存使用量固定。将 HBase 与 MapReduce 任务集成可能会导致不可预测的延迟。
  • 将 HBase 与 Pig 和 Hive 作业集成有时会导致集群内存问题。
  • 在共享集群环境中,该设置需要为每个节点分配更少的任务槽位来满足 HBase CPU 需求。

HBase 中的性能瓶颈

HBase 提供了可扩展性,但一些架构选择会造成性能瓶颈,团队应该围绕这些瓶颈进行规划:

在大型生产环境中,HBase 集群可以运行在数千个节点上,但只有 HMaster 作为所有从属 RegionServer 的主节点。如果 HMaster 发生故障,即使客户端仍然可以访问 RegionServer,恢复过程也可能需要很长时间。虽然可以运行备用主节点,但同一时间只能有一个 HMaster 处于活动状态,而且在故障发生后将第二个 HMaster 提升为主节点并非瞬时完成。因此,HMaster 被公认为是性能瓶颈。

HBase 本身并不直接支持跨表或连接操作。虽然可以使用 MapReduce 实现连接,但这会显著增加设计和开发时间,而且某些表连接在 HBase 中实际上并不实用。

将数据从外部关系数据库管理系统 (RDBMS) 迁移到 HBase 通常需要重新设计数据库模式,而且迁移过程可能耗时很长。查询也比较困难:许多团队会在 HBase 之上添加 SQL 层(例如 Apache Phoenix),以便能够…… 读取和写入数据 提出一些熟悉的问题。

HBase 仅支持单个索引——行键充当主键——因此对任何其他字段的搜索速度都很慢。团队通过编写 MapReduce 代码或集成 Apache 来解决这个问题。 Solr的 以及用于二级索引的 Apache Phoenix。

  • 多用户数据访问的安全控制措施改进缓慢。
  • HBase 不完全支持部分键。
  • 每个表只允许设置一个默认排序顺序。
  • 在 HBase 中存储大型二进制文件很困难。
  • HBase 存储限制了实时查询和排序。
  • 对表内容进行键查找和范围查找可以限制必须实时运行的查询。
  • 默认索引缺失;程序员必须编写额外的代码或脚本来添加索引。
  • 硬件要求和内存块分配使得 HBase 的运行成本很高。
  • 分布式集群需要许多服务器——NameNode、DataNode、ZooKeeper 和 Region Server 都需要单独的节点。
  • 要获得良好的性能,需要配备大内存的机器。
  • 总体成本和维护费用高于更简单的替代方案。

HBase 与关系数据库管理系统 (RDBMS) 的比较

文章反复对比了 HBase 与传统关系型数据库。下表总结了主要区别,以便您确定哪种模型更适合您的工作负载:

特性 HBase的 RDBMS
数据模型 面向列、模式灵活的 NoSQL 存储 具有固定模式的面向行的表
查询语言 不支持原生 SQL;需要 API 或类似 Apache Phoenix 的附加层。 带有查询优化器的完整 SQL
缩放 横向,跨商品节点(PB级) 主要为垂直方向;难以横向扩展
交易 仅支持行级原子性;不支持多行 ACID 完整的 ACID 交易
连接和索引 不支持原生连接;单行键索引 原生连接和多个二级索引
最合适 稀疏、海量、高写入量的实时数据 需要复杂查询的结构化数据

简而言之,HBase 更注重可扩展性和实时访问,而关系型数据库管理系统 (RDBMS) 则更注重丰富的查询功能和强一致性。当数据量和写入吞吐量超过关系型数据库的处理能力时,应选择 HBase。

常见问题

是的。HBase 是一个分布式、面向列的 NoSQL 数据库,它基于……构建。 Hadoop HDFS 并以……为模型 Google Bigtable 以列族而非固定关系表的形式存储稀疏数据,并且相比 SQL 连接和事务,它更注重可扩展性和实时访问。

HBase 是一个实时、随机访问的 NoSQL 数据存储系统,用于读写操作;而 Hive 是一个数据仓库层,它在 Hadoop 上运行类似 SQL 的批量查询。HBase 适用于实时查找;Hive 则更适合大规模分析扫描。许多数据管道会将两者结合使用。

HBase 适用于高容量、实时工作负载:银行和 ATM 交易更新、消息和聊天记录、物联网和传感器数据、推荐引擎、欺诈检测以及时间序列或点击流存储。它适用于任何需要对数十亿行稀疏数据进行快速随机读写操作的场景。

HBase本身没有原生SQL,但Apache Phoenix在其之上添加了一个SQL层,将查询转换为HBase的扫描和获取操作。Apache Solr则可以添加全文搜索功能。这些层使得在不替换其存储引擎的情况下,更易于查询HBase。

两者都是宽列式 NoSQL 存储,但 HBase 运行在 Hadoop HDFS 拥有单个活跃的HMaster和强大的稳定性, Cassandra HBase 是无主库,具有可调性和最终一致性。它侧重于读取一致性和与 Hadoop 的集成; Cassandra 有利于提高写入可用性并简化多数据中心设置。

HDFS 是一种分布式文件系统,它将大型文件以不可变数据块的形式存储,以便进行批量访问。HBase 运行在 HDFS 之上,并添加了一个数据库层,支持对单个行和单元格进行随机、实时的读写访问。它们相辅相成。

机器学习管道将 HBase 表作为低延迟特征存储进行读取,实时提取模型特征并将预测结果写回。 Spark MLlib 和 TensorFlow 作业可以基于 HBase 数据进行训练,而 AI 异常检测会扫描存储的指标,快速标记异常模式。

是的。 GitHub 副驾驶 可以编写 HBase shell 命令, Java 客户端代码支持 put、get 和 scan 操作,并可从简短的注释中生成 Apache Phoenix SQL。这可以简化样板代码的编写,但在运行之前,请务必检查生成的代码,确保表名、列族和行键设计正确。

总结一下这篇文章: