(超详细)快速上手分布式数据库——HBase

本文深入介绍了HBase的原理与特性,包括其分布式架构、数据模型、读写流程和Compaction过程。在HadoopHA集群上详细阐述了HBase的安装配置步骤,如下载HBase、配置环境变量、启动集群等。此外,还展示了HBase的Shell命令操作,如创建表、查询数据等,并给出了HBase Java API编程示例,包括数据的增删改查操作。

HBase的安装、命令操作和基础编程

 JunLeon——go big or go home


目录

HBase的安装、命令操作和基础编程

一、HBase的概述

1.什么是HBase?

2.HBase的特点

3.HBase组成部分及数据模型

(1)HBase架构的组件及其作用

(2)HBase的数据模型

(3)表和Region

4.HBase的读写流程

5.HBase的Compaction过程

二、基于Hadoop HA集群的HBase环境安装配置

1.下载HBase

2.解压安装配置

(1)上传到虚拟机中指定的opt目录下

(2)解压HBase

(3)配置环境及其相关属性

3.启动HBase集群

4.查看进程及HBase集群信息

三、HBase的Shell命令

1.基本Shell命令

2.DDL操作命令

3.DML操作命令

4.运行HBase Shell脚本

四、HBase基础编程

1.HBase API

2.HBase API编程代码演示


前言:

        学习HBase这个组件,可能很多人都有这个这个疑惑:HDFS和MySQL等都可做数据的持久化存储,那为什么还要学习这个HBase呢?而HBase的最终数据还是存储在HDFS中,那为什么还要使用HBase呢?HBase和HDFS又有什么关系呢?

        HBase作为Hadoop的分布式数据库,基于Google发行的三篇论文之一——《BigData》研发的Hadoop生态组件之一。那我们为啥要用HBase呢?HBase在HDFS之上提供了高并发的随机写支持实时查询,这是HDFS不具备的。

        HDFS是分布式文件存储系统,HBase是分布式数据库,两者其实没有什么可比性。可能很多人对MySQL比较熟悉,MySQL的数据持久化就是将数据落地磁盘存储。简单理解就是可以把HBase当做是MySQL,把HDFS当做是硬盘。HBase只是一个NoSQL数据库,把数据存在HDFS上。

一、HBase的概述

1.什么是HBase?

        HBase是高可靠性、高性能、面向列、可伸缩的分布式存储系统,是基于HDFS的分布式数据库,也是一种非关系型数据库。分布式数据库HBase是Hadoop生态系统的组件之一。HBase的运行依赖于Hadoop HDFS文件系统提供数据的持久化,依赖于Zookeeper提供集群的的同步与协调。HBase使用Zookeeper服务来进行节点管理以及表数据的定位。

2.HBase的特点

        (1)大:一个表可以有上亿行,上百万列。
        (2)面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
        (3)稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
        (4)无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
        (5)数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
        (6)数据类型单一:HBase中的数据都是字符串,没有类型。

3.HBase组成部分及数据模型

(1)HBase架构的组件及其作用

        HBase采用Master/slaves的主从服务器架构,由一个HMaster服务器和多个HRegionServer服务器组成。HBase采用Master/Slave架构,主要角色包括Master服务器(HMaster,管理节点)、Region服务器(HRegionServer,数据节点)、ZooKeeper服务器以及客户端。

 1.HMaster HMaster

        HMaster HMaster是主节点,它主要负责HRegionServer的管理以及元数据的更改,包括以下内容:新HRegionServer的注册、表的增删改查、HRegionServer的负载均衡,Region(表的分区,存储在Region服务器上)的分布调整、Region分裂以及分裂后的Region分配,HRegionServer失效后的Region迁移等。

        HMaster采用主备模式部署,集群启动时,通过竞争获得主HMaster角色。主HMaster只能有一个,备HMaster进程在集群运行期间处于休眠状态,不干涉任何集群事务。当主用Master故障时,备用Master将取代主用Master对外提供服务。

2.HRegionServer

        HRegionServer是HBase的从节点,它负责提供表数据读写等服务,是数据存储和计算单元。HRegionServer一般与HDFS集群的DataNode部署在一起,实现数据的存储功能。一台HRegionServer管理多个Region对象和一个HLog文件。

        一个Region由一个或多个Store组成。每个Store存储该Region一个列族的数据。一个Store包含一个MemStore缓存以及若干StoreFile文件,MemStore缓存客户端向Region插入的数据,当HRegionServer中的MemStore大小达到配置的容量上限时,RegionServer会将MemStore中的数据刷新(Flush)到HDFS中。MemStore的数据刷新到HDFS后成为HFile,HFile定义了StoreFile在文件系统中的存储格式,它是当前HBase系统中StoreFile的具体实现。随着数据的插入,一个Store会产生多个StoreFile,当StoreFile的个数达到配置的最大值时,RegionServer会将多个StoreFile合并为一个大的StoreFile。

        HLog日志是一种预写式日志(Write Ahead Log),用户更新数据时需要先写入HLog再写入MemStore,MemStore中的数据被刷新到StoreFile之后才会在HLog中清除对应的记录,这样的设计保证了当HRegionServer故障时,用户写入的数据不丢失,一台HRegionServer的所有Region共享同一个HLog。

3.ZooKeeper

        ZooKeeper为HBase集群各进程提供分布式协作服务。各HRegionServer将自己的信息注册到ZooKeeper中,HMaster据此感知各个HRegionServer的健康状态。

        HBase还通过ZooKeeper实现HMaster的高可用。ZooKeeper存储HBase的如下信息:HBase元数据、HMaster地址。当HMaster主节点出现故障时,HMaster备用节点会通过ZooKeeper获取主HMaster存储的整个HBase集群状态信息,接管HMaster主节点的工作。

4.Client

        客户端通过HBase的元数据找到所需数据所在的HRegionServer进行访问(HBase的元数据存储在ZooKeeper中,因此客户端在做读取操作时不需要与HMaster进行通信,这样的设计减少了HMaster的负担),客户端会在缓存中维护访问过的Region位置信息,下次访问时就可以跳过向ZooKeeper寻址的过程。如果缓存中位置信息所指向的HRegionServer失效或Region已被迁移到其他服务器,客户端在查找不到该Region的情况下,会重新查询元数据以获取该Region的新地址。除了读取HRegionServer的信息外,客户端还可以与HMaster通信做表的修改。

(2)HBase的数据模型

        HBase中,数据存储在由行和列组成的表中,HBase的表是稀疏的,多维映射的。HBase用键值对的方式存储数据。每个值都是未经解释的字符串,通过行键、列族、列限定符、时间戳等信息进行定位。

1.表(Table)

        HBase采取表的形式存储数据,表由行和列组成。

2.行(Row)

        HBase中的行由行键(RowKey)和若干列组成。行是通过行键按字典顺序进行排序的,因此行键的设计非常重要,好的行键设计可以将内容相关的行排列到相邻位置,方便查找和读取。以存储网页内容为例,将URL作为行键,如org.apache.www、org.apache.mail,可以将相邻子网页存储在相邻的位置。

3.列族(Column Family)

        一个表在水平方向上由一个或多个列族组成。一个列族可以由任意多个列组成,列族在表创建时就需要预先设定好。

        列族是Region的物理存储单元。同一个Region下面的多个列族,位于不同的Store下面。

        列族信息是表级别的配置。同一个表的多个Region,都拥有相同的列族信息(例如,都有两个列族,且不同Region的同一个列族配置信息相同)。不是每一行下的列族或列中都存储了信息,因此说HBase的表是稀疏的。

4.列限定符(Column Qualifier)

        列族中添加不同的列限定符可以对数据进行划分定位,列限定符以列族名作为前缀,用“:”连接后缀。例如以“content”为列族,那么列限定符则可以是“content:xxxx”。列限定符是列族下的一个标签,可以在写入数据时任意添加,支持动态扩展,无需预先定义列的数量和类型。

5.单元格(Cell)

        一个单元格保存了一个值的多个版本,单元格通过行键、列族和列限定符进行定位,每个版本对应一个时间戳。

6.时间戳(TimeStamp)

        HBase每个值都会带一个时间戳,时间戳标识了这个值的版本。默认情况下,在一个值发生变化(写入、更新、删除)时,所在的HRegionServer会自动为其创建一个时间戳。用户也可以在值发生变化时自定义时间戳。如果一个值有多个版本,在用户查询时默认返回最新的版本。HBase保存的版本数可以自定义,当超过设置的版本数时,新的版本会替换掉最早的版本。

(3)表和Region

        一个HBase集群中维护着多张表,每张表可能包含非常多的行,在单台机器上无法全部存储,HBase会将一张数据表按行键的值范围横向划分为多个子表,实现分布式存储,如图5-1所示。这些子表,在HBase中被称作“Region”,Region是HBase分布式存储的基本单元。每一个Region都关联一个行键值的范围,即一个使用StartKey和EndKey描述的区间。事实上,每一个Region仅仅记录StartKey就可以了,因为它的EndKey就是下一个Region的StartKey。

        每张表最开始值包含一个Region,随着表中数据的不断增大,Region中的行数超过一定阈值时就会分裂为两个新的Region。

        Region分为元数据Region以及用户Region(User Region)两类。用户Region用于存储普通数据,元数据Region包括.META.表和-ROOT-表,用于存储Region的位置信息。.META.表记录了每一个用户Region的路由信息,用户可以通过.META.表查询到要访问的Region所在的HRegionServer,从而与其建立通信进行数据操作。.META.表的路由信息存储在-ROOT-表中,-ROOT-表不可被分割,只有一个Region。用户可以通过访问ZooKeeper服务器来获得-ROOT-表的位置。Region的划分如下图:

        从HBase0.96.0开始,-ROOT-表的设置已被移除,.META.表改名为hbase:meta,hbase:meta的位置信息直接保存在ZooKeeper中。

4.HBase的读写流程

1.HBase的读流程

        HBase的读流程如下: ·

        客户端发起请求,与ZooKeeper服务器通信获取hbase:meta所在的HRegion Server,记为HRegionServer A;

        访问HRegionServer A中的hbase:meta,hbase:meta中记载着各个User Region信息(行键范围,所在RegionServer等),通过行键查找hbase:meta获取所要读取的Region所在HRegionServer,记为HRegionServer B;

        请求发送到HRegionServer B,HRegionServer B先查询MemStore,如果未查询到目标数据,则在HFile中查找; ·

    &nbs

评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT路上的军哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值