菜单
本页目录

HBase概述

从1970年开始,大多数公司使用关系型数据库来存储和维护数据。随着大数据技术的出现,许多公司开始选择像Hadoop这样的分布式系统来存储和处理海量数据。

Hadoop简介

Hadoop使用分布式文件系统HDFS来存储数据,并使用MapReduce来处理数据。它擅长存储各种格式的大数据,支持任意格式,甚至非结构化的数据。此外,Hadoop生态系统中包含许多组件,例如Hive、Pig和Spark,这些组件进一步增强了数据处理的灵活性和效率。

Hadoop的局限性

Hadoop主要用于批量数据处理,通过顺序访问数据来实现。查找数据时必须遍历整个数据集,随机读取数据的效率较低。此外,Hadoop的MapReduce编程模型相对复杂,开发效率低,延迟高,不适合需要低延迟的数据处理任务。

HBase与NoSQL

NoSQL是指代非关系型数据库的通用术语,通常不使用SQL作为主要语言。HBase是BigTable的开源Java实现,建立在HDFS之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的NoSQL数据库系统。

HBase只支持通过主键(rowkey)或主键范围检索数据,仅支持单行事务。它适用于存储结构化和半结构化的松散数据。

HBase的特点与局限

HBase的查询功能简单,不支持join操作和复杂事务(只支持行级事务)。HBase更像是一个"数据存储"而不是"数据库",因为它缺少关系型数据库中的特性,例如带类型的列、二级索引和高级查询语言。HBase中的数据类型为byte[]。

HBase的扩展主要依赖于横向扩展,通过增加廉价的服务器来提高存储和处理能力。例如,将集群从10个节点扩展到20个节点,存储能力和处理能力都会加倍。

HBase中的表特点:

  • 大规模:单个表可以有上十亿行和上百万列。
  • 面向列:列族的存储和权限控制,支持独立检索。
  • 稀疏性:为空的列不占用存储空间,因此表可以设计得非常稀疏。

HBase的应用场景

  • 对象存储:例如网页、图片、新闻、病毒库。
  • 时序数据:例如物联网设备的传感器数据(基于OpenTSDB模块)。
  • 推荐系统:例如个性化内容推荐。
  • 时空数据存储:例如地理位置信息和时间序列数据。
  • 日志和事件数据处理:存储和分析服务器日志和用户行为事件。
  • 数据立方体(Cube):存储和管理多维数据立方体,支持OLAP场景中的复杂查询与分析。
  • 消息和订单处理:用于处理电商系统中的订单信息和消息流,提供高效的数据分析和实时响应。
  • Feeds流:管理社交媒体等实时数据流,支持用户活动和内容更新的高效处理。
  • NewSQL:与NewSQL数据库结合使用,获得传统关系型数据库的特性与NoSQL的扩展性。
  • 其他:适用于需要大规模存储和快速随机访问的场景,如用户画像、内容管理等。

HBase与Hadoop的关系

HBase基于Hadoop集群搭建,弥补了Hadoop的一些局限性,例如高吞吐量的批量数据处理,但在随机查询和实时操作方面不如传统关系型数据库。HBase不支持join操作,仅有一种数据类型:byte[],写入速度非常快。

HBase适用于存储非常大的表,支持上亿行和上百万列,常用于实时数据处理中。HBase与Hadoop集成,能够结合MapReduce、Hive和Spark等工具,支持复杂的数据分析和处理任务。

HBase特点

  • 强一致性读/写:适用于需要强一致性的场景。
  • 高速计数器聚合:适合高速计数器聚合任务。
  • 自动分块:表通过Region分布在集群上,随着数据增长,区域自动拆分和重新分布。
  • 自动RegionServer故障转移:在RegionServer故障时自动转移。
  • Hadoop/HDFS集成:HBase支持HDFS作为其分布式文件系统。
  • MapReduce支持:通过MapReduce支持大规模并行处理。
  • Java Client API:支持Java API编程访问。
  • Thrift/REST API:提供Thrift和REST API接口,支持多语言访问。
  • 块缓存和布隆过滤器:用于查询优化。
  • 运行管理:提供内置网页进行业务监控和管理。

RDBMS与HBase的对比

RDBMS

  1. 结构

    • 数据库以表的形式存在。
    • 支持多种文件系统,如FAT、NTFS、EXT等。
    • 使用主键(PK)进行唯一标识。
    • 通过外部中间件支持分库分表。
    • 数据组织为行、列、单元格。
  2. 功能

    • 支持向上扩展(通过更好的服务器提升性能)。
    • 使用SQL进行查询。
    • 面向行,每一行都是一个连续单元。
    • 数据量受限于服务器配置。
    • 支持ACID特性。
    • 适合结构化数据。
    • 支持事务和Join操作。

HBase

  1. 结构

    • 数据以表的形式存在。
    • 支持HDFS文件系统。
    • 使用行键(row key)进行数据定位。
    • 原生支持分布式存储和计算。
    • 使用行、列、列族和单元格的层次结构。
  2. 功能

    • 支持向外扩展(通过增加服务器数量提升性能)。
    • 使用API和MapReduce、Spark、Flink等工具来访问数据。
    • 面向列,每个列都是独立的单元。
    • 数据总量不依赖某台机器,而取决于机器数量。
    • 不支持ACID特性。
    • 支持结构化和非结构化数据。
    • 数据存储和访问方式是分布式的。
    • 仅支持单行事务操作,不支持Join操作。

HDFS对比HBase

  1. HDFS

    • 适合存储大型文件的分布式文件系统。
    • 不适合在文件中快速查询特定数据。
  2. HBase

    • 构建在HDFS之上,为大型表提供快速查找和更新。
    • 数据存储在HDFS中名为「StoreFiles」的索引中,以便高速查找。
    • 适合快速查询场景,但不适合大规模OLAP应用。

Hive对比HBase

  1. Hive

    • 数据仓库工具,基于HDFS,适用于离线数据分析。
    • 使用HQL来管理和查询数据,具有较高的延迟。
    • 编写的HQL语句最终会被转换为MapReduce代码执行。
  2. HBase

    • NoSQL数据库,采用面向列存储的非关系型数据结构。
    • 适用于单表数据存储,不适合JOIN操作。
    • 基于HDFS,数据以HFile形式存放,RegionServer管理数据。
    • 延迟低,适合在线业务,提供高效的数据访问速度。

总结 Hive 与 HBase

Hive 和 HBase 是两种基于 Hadoop 的不同技术。

  • Hive:Hive 是一种类 SQL 的数据仓库工具,使用 HQL(Hive Query Language)进行查询,依赖于 MapReduce 任务运行,适用于批量数据分析和处理。

  • HBase:HBase 是构建在 Hadoop 之上的 NoSQL 数据库,采用键值(Key/Value)存储,擅长实时随机读写操作。

  • 这两种工具可以结合使用。例如,Hive 适合统计查询,HBase 适合实时查询。数据可以从 Hive 写入 HBase,也可以从 HBase 写回 Hive。