HBase
分布式存储

HBase 01:HBase简介及集群搭建

简介:HBase是一个构建在HDFS上的分布式列存储系统,基于Google BigTable模型开发的,典型的key/value系统;HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;从逻辑上讲,HBase将数据按照表、行和列进行存储。与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

1. HBase简介

HBase是一个构建在HDFS上的分布式列存储系统,基于Google BigTable模型开发的,典型的key/value系统;HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;从逻辑上讲,HBase将数据按照表、行和列进行存储。与Hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

1.1. HBase表的特点

  • 大:一个表可以有数十亿行,上百万列;
  • 无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索;
  • 稀疏:空(null)列并不占用存储空间,表可以设计的非常稀疏;
  • 数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
  • 数据类型单一:Hbase中的数据都是字符串,没有类型。
  • HBase建立在Hadoop文件系统之上,利用了Hadoop的文件系统的容错自能力;
  • HBase提供对数据的随机实时读/写访问功能;
  • HBase内部使用哈希表,并存储索引,可将存在HDFS文件中的数据进行快速查找;

1.2. HBase使用场景

  • HBase适用于瞬间写入量很大,常用数据库不好支撑或需要很高成本支撑的场景;
  • HBase适用于数据需要长久保存,且量会持久增长到比较大的场景;
  • HBase不适用于有join操作、多级索引或表关系复杂的数据模型。

1.3. CAP定理

CAP定理指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

  • 一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值,即所有节点在同一时间具有相同的数据。(等同于所有节点访问同一份最新的数据副本)
  • 可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求,即保证每个请求不管成功或失败都有响应,但不保证获取的数据为正确的数据。(对数据更新具备高可用性)
  • 分区容错性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

HBase是符合CP类型的数据库,它的数据是强一致性的,它通过RegionServer、RowKey和多版本组合来保证数据的一致性。

1.4. ACID定义

ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

  • 原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性:一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
  • 隔离性:如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统,不会出现交错执行的状态。
  • 持久性:在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

HBase不支持严格的ACID,只支持到单个的行的ACID。

1.5. HBase概念

  • NameSpace:可以把NameSpace理解为RMDBS的数据库;
  • Table:用于标识单个的表,表名必须是能用在文件路径中的名字;
  • Row:在表中,每一行代表着一个数据对象,每一行都是以一个行键(Row Key)来进行唯一标识的,行键并没有特定的数据类型,是以二进制的字节来存储的;
  • Row Key:可以唯一标识一行记录,不可被改变,想要改变Row Key只能先删除再重新插入;
  • Column:HBase的列由Column Family和Column Qualifier组成,由冒号(:)进行分隔,如family:qualifier
  • Column Family:再定义HBase表的时候需要提前设置好列族,表中所有的列都需要组织在列族中;在物理存储中,相同的Column Family的数据是存放在一起的,存储的优化都是针对Column Family级别的;
  • Column Qualifier:列族中的数据通过列标识来进行映射,可以理解为一个键值对,Column Qualifier就是key;
  • Cell:每一个行键,列族和列标识共同组成的一个单元;
  • Timestamp:每个值都会有一个timestamp作为该值特定版本的标识,HBase默认会保存三个版本的数据。

HBase的结构示意图如下:

1.HBase表结构示意图.png

1.6. HBase与RDBMS对比

对比项 HBase RDBMS
数据库大小 PB GB、TB
数据类型 Bytes 丰富的数据类型
事务支持 ACID只支持单个Row级别 全面的ACID支持,对Row和表
索引 只支持Row Key 支持
吞吐量 百万查询/每秒 数千查询/每秒

2. Hbase的安装

HBase分为单机、伪分布式和完全分布式三种模式,下面分别介绍三种模式的安装。

2.1. standalone模式

单机模式的安装非常简单,只需要解压安装包到指定目录,配置环境变量,修改部分配置文件即可:

  • ubuntu@s100:~/software$ tar -zxf hbase-1.2.4-bin.tar.gz -C /soft/
  • ubuntu@s100:~/software$ cd /soft/
  • ubuntu@s100:/soft$ ln -s hbase-1.2.4 hbase

配置环境变量:

  • ubuntu@s100:/soft/hbase$ sudo nano /etc/environment
  • JAVA_HOME=/soft/jdk
  • HADOOP_HOME=/soft/hadoop
  • HIVE_HOME=/soft/hive
  • HBASE_HOME=/soft/hbase
  • $oop/sbin:/soft/eclipse:/soft/maven/bin:/soft/hive/bin:/soft/hbase/bin"
  • ...
  • ubuntu@s100:/soft/hbase$ source /etc/environment

查看Version信息以检查是否安装完成:

  • ubuntu@s100:/soft/hbase$ hbase version
  • HBase 1.2.4
  • Source code repository git://asf-dev/home/busbey/projects/hbase revision=67592f3d062743907f8c5ae00dbbe1ae4f69e5af
  • Compiled by busbey on Tue Oct 25 18:10:20 CDT 2016
  • From source with checksum b45f19b5ac28d9651aa2433a5fa33aa0

接下来还需要修改配置文件,在${HBASE_HOME}/conf目录下的hbase-site.xml文件中刚添加下面的配置:

  • <property>
  • <name>hbase.rootdir</name>
  • <value>file:///home/ubuntu/hbase</value>
  • </property>
  • <property>
  • <name>hbase.zookeeper.property.dataDir</name>
  • <value>/home/ubuntu/hbase/zk</value>
  • </property>

配置完后,使用启动脚本测试启动和关闭:

  • ubuntu@s100:/soft/hbase/conf$ start-hbase.sh
  • starting master, logging to /soft/hbase/bin/../logs/hbase-ubuntu-master-s100.out
  • Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
  • Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
  • ubuntu@s100:/soft/hbase/conf$ stop-hbase.sh
  • stopping hbase...................

2.2. 伪分布模式

对于伪分布式模式,需要修改的仅仅是HBase文件存放的位置,单机模式下HBase文件存放在普通目录系统下,而伪分布式模式下,HBase的文件存放在HDFS上;修改配置文件如下:

  • <property>
  • <name>hbase.cluster.distributed</name>
  • <value>true</value>
  • </property>
  • <property>
  • <name>hbase.rootdir</name>
  • <value>hdfs://s100:8020/hbase</value>
  • </property>
  • <property>
  • <name>hbase.zookeeper.property.dataDir</name>
  • <value>/home/ubuntu/hbase/zk</value>
  • </property>

启动HBase,并查看进程信息:

  • ubuntu@s100:/soft/hbase/conf$ start-hbase.sh
  • The authenticity of host 'localhost (127.0.0.1)' can't be established.
  • ECDSA key fingerprint is 71:cd:bf:d3:0a:61:54:9e:a0:a5:21:77:91:6c:2c:b1.
  • Are you sure you want to continue connecting (yes/no)? yes
  • localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
  • localhost: starting zookeeper, logging to /soft/hbase/logs/hbase-ubuntu-zookeeper-s100.out
  • starting master, logging to /soft/hbase/bin/../logs/hbase-ubuntu-master-s100.out
  • Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
  • Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
  • starting regionserver, logging to /soft/hbase/bin/../logs/hbase-ubuntu-1-regionserver-s100.out
  • ubuntu@s100:/soft/hbase/conf$ xcall jps
  • ----------- local execute ------------
  • 3664 HRegionServer
  • 2325 ResourceManager
  • 3545 HMaster
  • 3450 HQuorumPeer
  • 2076 NameNode
  • 3983 Jps
  • ----------- s101 execute -----------
  • 2113 Jps
  • 1905 NodeManager
  • 1813 DataNode
  • ----------- s102 execute -----------
  • 2003 NodeManager
  • 1895 DataNode
  • 2203 Jps
  • ----------- s103 execute -----------
  • 1926 NodeManager
  • 1690 DataNode
  • 2124 Jps
  • ----------- s104 execute -----------
  • 2019 NodeManager
  • 1783 DataNode
  • 2223 Jps
  • ----------- s105 execute -----------
  • 1885 Jps
  • ----------- s106 execute -----------
  • 1766 SecondaryNameNode
  • 1975 Jps
  • HRegionServer:HBase RegionServer的进程,也常被成为HRegionServer。HRegionServer是HBase中最主要的组件,负责表数据的实际读写,管理Region。在分布式集群中,HRegionServer一般跟DataNode在同一个节点上,目的是实现数据的本地性,提高读写效率。
  • HMaster:HBase Master的进程,也常被成为HMaster。HMaster是HBase集群的大脑,负责Region分配、负载均衡、RegionServer恢复、Region分裂完成监控、追踪处于活动和宕机状态的服务器等操作。单个集群可以有多个HMaster,但同一时刻只会有一个HMaster是处于活动状态的。
  • HQuorumPeer:表示HBase管理的Zookeeper进程,与之对应的,如果使用外置的Zookeeper集群,Zookeeper的进程名为QuorumPeerMain。

查看HDFS上存放的HBase相关的文件:

  • ubuntu@s100:/soft/hbase/conf$ hdfs dfs -ls -R / | grep hbase
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/.tmp
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/.tmp/data
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/.tmp/data/hbase
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/MasterProcWALs
  • -rw-r--r-- 3 ubuntu supergroup 0 2017-06-28 06:34 /hbase/MasterProcWALs/state-00000000000000000002.log
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/WALs
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/WALs/s100,16201,1498656841686
  • -rw-r--r-- 3 ubuntu supergroup 83 2017-06-28 06:34 /hbase/WALs/s100,16201,1498656841686/s100%2C16201%2C1498656841686..meta.1498656852620.meta
  • -rw-r--r-- 3 ubuntu supergroup 83 2017-06-28 06:34 /hbase/WALs/s100,16201,1498656841686/s100%2C16201%2C1498656841686.default.1498656847662
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/default
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta/.tabledesc
  • -rw-r--r-- 3 ubuntu supergroup 398 2017-06-28 06:34 /hbase/data/hbase/meta/.tabledesc/.tableinfo.0000000001
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta/.tmp
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta/1588230740
  • -rw-r--r-- 3 ubuntu supergroup 32 2017-06-28 06:34 /hbase/data/hbase/meta/1588230740/.regioninfo
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta/1588230740/info
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta/1588230740/recovered.edits
  • -rw-r--r-- 3 ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/meta/1588230740/recovered.edits/3.seqid
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace/.tabledesc
  • -rw-r--r-- 3 ubuntu supergroup 312 2017-06-28 06:34 /hbase/data/hbase/namespace/.tabledesc/.tableinfo.0000000001
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace/.tmp
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace/32a3ddf03b33e8dfa2bf2aff0ac18fd7
  • -rw-r--r-- 3 ubuntu supergroup 42 2017-06-28 06:34 /hbase/data/hbase/namespace/32a3ddf03b33e8dfa2bf2aff0ac18fd7/.regioninfo
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace/32a3ddf03b33e8dfa2bf2aff0ac18fd7/info
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace/32a3ddf03b33e8dfa2bf2aff0ac18fd7/recovered.edits
  • -rw-r--r-- 3 ubuntu supergroup 0 2017-06-28 06:34 /hbase/data/hbase/namespace/32a3ddf03b33e8dfa2bf2aff0ac18fd7/recovered.edits/2.seqid
  • -rw-r--r-- 3 ubuntu supergroup 42 2017-06-28 06:34 /hbase/hbase.id
  • -rw-r--r-- 3 ubuntu supergroup 7 2017-06-28 06:34 /hbase/hbase.version
  • drwxr-xr-x - ubuntu supergroup 0 2017-06-28 06:34 /hbase/oldWALs

2.3. 完全分布式模式

完全分布式模式要求所有的相关节点上都有HBase的安装包,在分发之前,我们还需要修改一些配置文件:

  • ubuntu@s100:/soft/hbase/conf$ nano regionservers
  • s101
  • s102
  • s103

然后分发安装目录以及软链接文件:

  • ubuntu@s100:/soft$ xrsync hbase-1.2.4
  • filepath is /soft/hbase-1.2.4
  • ---------------- s101 --------------------
  • rsync -lr /soft/hbase-1.2.4 ubuntu@s101:/soft/hbase-1.2.4
  • ---------------- s102 --------------------
  • rsync -lr /soft/hbase-1.2.4 ubuntu@s102:/soft/hbase-1.2.4
  • ---------------- s103 --------------------
  • rsync -lr /soft/hbase-1.2.4 ubuntu@s103:/soft/hbase-1.2.4
  • ---------------- s104 --------------------
  • rsync -lr /soft/hbase-1.2.4 ubuntu@s104:/soft/hbase-1.2.4
  • ---------------- s105 --------------------
  • rsync -lr /soft/hbase-1.2.4 ubuntu@s105:/soft/hbase-1.2.4
  • ---------------- s106 --------------------
  • rsync -lr /soft/hbase-1.2.4 ubuntu@s106:/soft/hbase-1.2.4
  • ubuntu@s100:/soft$ sudo xrsync /etc/environment
  • [sudo] password for ubuntu:
  • filepath is /etc/environment
  • ---------------- s101 --------------------
  • rsync -lr /etc/environment root@s101:/etc/environment
  • ---------------- s102 --------------------
  • rsync -lr /etc/environment root@s102:/etc/environment
  • ---------------- s103 --------------------
  • rsync -lr /etc/environment root@s103:/etc/environment
  • ---------------- s104 --------------------
  • rsync -lr /etc/environment root@s104:/etc/environment
  • ---------------- s105 --------------------
  • rsync -lr /etc/environment root@s105:/etc/environment
  • ---------------- s106 --------------------
  • rsync -lr /etc/environment root@s106:/etc/environment
  • ubuntu@s100:/soft$ xcall source /etc/environment
  • ----------- local execute ------------
  • ----------- s101 execute -----------
  • ----------- s102 execute -----------
  • ----------- s103 execute -----------
  • ----------- s104 execute -----------
  • ----------- s105 execute -----------
  • ----------- s106 execute -----------

分发后,启动HBase:

  • ubuntu@s100:/soft$ start-hbase.sh
  • localhost: starting zookeeper, logging to /soft/hbase/logs/hbase-ubuntu-zookeeper-s100.out
  • starting master, logging to /soft/hbase/bin/../logs/hbase-ubuntu-master-s100.out
  • Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
  • Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
  • s103: starting regionserver, logging to /soft/hbase/logs/hbase-ubuntu-regionserver-s103.out
  • s101: starting regionserver, logging to /soft/hbase/logs/hbase-ubuntu-regionserver-s101.out
  • s102: starting regionserver, logging to /soft/hbase/logs/hbase-ubuntu-regionserver-s102.out
  • s103: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
  • s103: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
  • s101: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
  • s101: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
  • s102: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
  • s102: Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0