HBase 是一个在
Hadoop Distributed File System (HDFS)
上运行的列式存储非关系数据库管理系统。 HBase 提供了存储稀疏数据集的容错方式,这类数据集在许多大数据用例中十分常见。 它非常适合实时数据处理或者对大量数据的随机读取/写入访问。
与
关系数据库系统
不同,HBase 不支持 SQL 一类的结构化查询语言;事实上,HBase 根本不是关系数据存储库。 HBase 应用程序以 Java™ 编写,更像是一款典型的
Apache MapReduce
应用程序。 HBase 确实支持以
Apache Avro
、REST 和 Thrift 编写应用程序。
HBase 系统设计为线性扩展。 它包括一系列由行和列组成的标准表,更像是传统数据库。 每个表必须有一个定义为主键的元素,且所有对 HBase 表的访问尝试都必须使用此主键。
Avro 作为组件,支持一系列丰富的原始数据类型(包括数字、二进制数据和字符串)以及多种复杂类型(包括数组、映射、枚举和记录)。 对于数据,也可以定义排序顺序。
HBase 依赖于
zookeeper
实现高性能协调。 zookeeper 内置到 HBase 中,但如果您正在运行生产集群,那么建议您配备一个与 HBase 集成的专用 ZooKeeper 集群。
HBase 非常适合与
Hive
结合使用,后者是用于大数据批处理的查询引擎,以支持容错性大数据应用程序。
一个 HBase 列代表对象的一个属性;如果该表存储的是您所在环境中服务器的诊断日志,则每行可能是一条日志记录,而一个典型列 可能是编写日志记录时的时间戳记,也可以是记录源自的服务器名称。
HBase 支持将许多属性组合到一个列族中,这样列族中的元素就会全部存储在一起。 这与行式存储关系数据库不同,其中指定行的所有列均存储在一起。 使用 HBase 时,必须预定义表模式,并指定列族。 然而,新列可随时添加到列族中,因此该模式十分灵活,且能适应不断变化的应用程序需求。
就像 HDFS 有一个 NameNode 和从属节点,而 MapReduce 有 JobTracker 和 TaskTracker 从属节点,HBase 的构建理念类似。 在 HBase 中,主节点管理集群,区域服务器存储表的各个部分并对数据执行处理。 同样,一些企业会对 HDFS 心存忧虑,因为 NameNode HBase 可能会因其主节点的丢失而丧失可用性。