|
一、HBase 简介HBase 是 Apache 顶级项目(最初为 Hadoop 子项目)。 HBase 名称的由来是由于其作为 Hadoop Database 存在的,用来存储非结构化、半结构化数据。 在 Apache 的 Hadoop 生态系统中,HBase 是构建在 HDFS 之上的,这是由于 HBase 内部管理的文件全部都是存储在 HDFS 当中的。同时,MapReduce 这个计算框架在 HBase 之上又提供了高性能的计算能力来处理海量数据。此外还有一些像 Pig、Hive 用来提供高层语言的支持。还有 Sqoop 用来完成传统数据库到 HBase 之间的数据迁移。 HBase 的特性:
Google 的三架马车 BigTable、GFS、MapReduce 现在在开源社区中都能找到对应的实现。HBase 主要基于 BigTable 这个数据模型开发的,因此具有 Key-Value 特征的,同时也具有 Bigtable 稀疏的、面向列的这些特性。 由于 HBase 利用 HDFS 作为它的文件系统,因此它也具有 HDFS 的高可靠性和可伸缩性。BigTable 利用 Chubby 来进行协同服务,HBase 则是利用 Zookeeper 来对整个分布式系统进行协调服务。 二、HBase 基本概念RowKey(行键)顾名思义也就是我们在关系型数据库中常见的主键,它是 Unique 的,在 HBase 中这个主键可以是任意的字符串,其最大长度是64K,在内部存储中会被存储为字节数组,HBase 表中的数据是按照 RowKey 的字典序排列的。 不过也要注意一个点,现实当中期望排序是1、2、3、4...10,而在 HBase 中1 后面紧跟的会是10。 Column Family(列族)列族是由若干列构成,是表 Schema(模式)的一部分,所以需要在创建表的时候就指定好。HBase 中可允许定义的列族个数最多就20多个。一个列族包含的所有列在物理存储上都是在同一个底层的存储文件当中。 Column(列)一般都是从属于某个列族,跟列族不一样,列的数量一般的没有强限制的,一个列族当中可以有数百万个列,而且这些列都可以动态添加的。 Version Number(版本号)HBase 中每一列的值或者说是每个单元格的值都是具有版本号的,默认使用的系统当前的时间戳,精确到毫秒。一个单元格里面是数据是按照版本号降序的。也就是说最后写入的值会被最先读取。 Cell(单元格)一个单元格就是由前面说的行键、列标示、版本号唯一确定的,这里说的列标示包括列族和列名。Cell 中的数据是没有类型的,全部都是字节码。 三、HBase 表逻辑视图由于 HBase 表的一个单元格是由多维决定的,我这里尝试用一个二维的电子表格来展示。可以结合前面说的 HBase 的基本概念来理解。 HBase 表的特点:
四、HBase 表物理视图表的横向切分(Table -> Region)Table 中所有的行都是按照 row key 的字典序排列的。 Table 在行的方向上分割为多个 Region。 Region 的分裂Region 具有最大值,达到阈值时会等分为两个 Region。 Region 的分布Region 是 HBase 扩展和负载均衡的基本单元,不同的 Region 分布到不同的 RegionServer。 Region 的存储结构Region 是分布式存储的最小单元,但不是存储的最小单元。 一个 Region 是由一个或多个 Store 组成。每一个 Store 其实就是一个列族。每个 Store 又是由一个 memStore 和 0 个或多个 storeFile 组成。memStore 是存储在内存中,storeFile 是存储在 HDFS 中,有时候也称作 HFile。数据都会先写入 memStore,一旦 memStore 超过给的最大值之后,HBase 就会将 memStore 持久化为 storeFile。 五、HBase 集群结构HBase 的三个主要组件:客户端库(API)、一台主服务器(Master)、多台 Region 服务器(RegionServer)。 一个 HBase 集群一般由一个 Master 和多个 RegionServer 组成。
转载请并标注: “本文转载自 linkedkeeper.com (文/张松然)” ©著作权归作者所有 |
